20#include <keras_model.h>
26 return (v > 0) - (v < 0);
32 _model.LoadModel(keras_model_file);
40std::vector<double>
TBNN::predict(std::vector<double> lambda, std::vector<std::vector<double>> T)
42 process_lambda(lambda);
49void TBNN::process_lambda(std::vector<double> lambda)
51 std::vector<double> lc;
52 std::vector<double> lcr;
53 size_t nbl = lambda.size();
64 for(
unsigned int i=0; i<nbl; i++)
65 lc[i] = lambda[i] - _ppNN->
get_lmean()[i];
67 for(
unsigned int i=0; i<nbl; i++)
70 for(
unsigned int i=0; i<nbl; i++)
71 _plambda[i] = lc[i] / _ppNN->
get_lmax()[i];
76 for(
unsigned int i=0; i<nbl; i++)
77 lc[i] = sgn(lambda[i]) * pow(std::fabs(lambda[i]),_ppNN->
get_alpha()[i]);
79 for(
unsigned int i=0; i<nbl; i++)
83 for(
unsigned int i=0; i<nbl; i++)
86 for(
unsigned int i=0; i<nbl; i++)
87 lcr[i] = lc[i] / _ppNN->
get_lmax()[i];
89 for(
unsigned int i=0; i<nbl; i++)
92 for(
unsigned int j=0; j<nbl; j++)
98 if( _ppNN->get_alpha().size() == nbl )
99 for(
unsigned int i=0; i<nbl; i++)
100 lc[i] = sgn(lambda[i]) * pow(std::fabs(lambda[i]),_ppNN->get_alpha()[i]);
102 for(
unsigned int i=0; i<nbl; i++)
105 if( _ppNN->get_lmean().size() == nbl )
106 for(
unsigned int i=0; i<nbl; i++)
107 lc[i] = lc[i] - _ppNN->get_lmean()[i];
109 for(
unsigned int i=0; i<nbl; i++)
110 lcr[i] = lc[i] / _ppNN->get_lmax()[i];
112 for(
unsigned int i=0; i<nbl; i++)
115 for(
unsigned int j=0; j<nbl; j++)
116 _plambda[i] += _ppNN->get_lambda_as()[j][i] * lcr[j];
121 cerr <<
"Mauvaise methode de pre traitement des lambda" << endl;
126void TBNN::process_T(std::vector<std::vector<double>> T)
128 size_t nbt = T.size();
129 size_t nbb = T[0].size();
132 for(
unsigned i=0; i<nbt; i++)
136 for(
unsigned int j=0; j<nbb; j++)
140 switch(_ppNN->get_ppt())
144 for(
unsigned int i=1; i<nbt; i++)
147 for(
unsigned int j=0; j<nbb; j++)
148 normf += T[i][j] * T[i][j];
150 for(
unsigned int j=0; j<nbb; j++)
151 _pT[i][j] = T[i][j] / (normf + _ppNN->get_t_thresh());
156 for(
unsigned int i=1; i<nbt; i++)
157 for(
unsigned int j=0; j<nbb; j++)
158 _pT[i][j] = T[i][j] / _ppNN->get_tfn()[i-1];
162 cerr <<
"Mauvaise methode de pre traitement des tenseurs T" << endl;
167void TBNN::process_b()
169 std::vector<int> iT = _ppNN->get_iT();
170 size_t nbt = iT.size();
171 size_t nbb = _pT[0].size();
175 for(
unsigned int i=0; i<nbb; i++)
178 for(
unsigned int j=0; j<nbt; j++)
179 _pb[i] += _g[j] * _pT[iT[j]][i];
184 for(
unsigned int i=0; i<nbb; i++)
185 _b[i] = _ppNN->get_bsigma() * _pb[i];
190 std::vector<int> il = _ppNN->get_ilambda();
191 std::vector<int> iT = _ppNN->get_iT();
192 Tensor in((
int)il.size());
194 size_t nbt = iT.size();
199 for(
unsigned int i=0; i<il.size(); i++)
200 in.data_[i] = (
float)_plambda[il[i]];
203 _model.Apply(&in,&out);
206 for(
unsigned int i=0; i<nbt; i++) _g[i] = out(i);
vector< double > get_alpha()
vector< double > get_lmax()
vector< double > get_lmean()
vector< vector< double > > get_lambda_au()
std::vector< double > predict(std::vector< double > lambda, std::vector< std::vector< double > > T)
TBNN(string keras_model_file, string preproc_file)