/* create_autoencoderblacklist.cpp - list the training samples where autoencoder error is much worse than in test set Copyright (C) 2010 Rui Rodrigues This software is released under the terms of the GNU General Public License (http://www.gnu.org/copyleft/gpl.html). */ #include #include #include using namespace std; #include #include #include #include #include #include "gradgsl.h" #include #include #include "netdimsandfilenames.h" void checkfstream(ofstream& file_io,const char* filename); //in ../geral/checkfstream.cpp void checkfstream(ifstream& file_io,const char* filename); //in ../geral/checkfstream.cpp void checkfstream(FILE* pointer,const char* filename); void read_datafile(ifstream&in,netdimsandfilenames& A); //in netdimsandfilenames.cpp void readgslvectormatrix(FILE* readfromfile, gsl_vector* v,vector&sizes); //in iosgslvectormatrix.cpp void readgslmatriz(const char* filename,gsl_matrix*&m); //in iosgslvectormatrix.cpp void writegslmatriz(const char* filename,gsl_matrix*m); //save a vector that contains several gslmatrices void savegslvectormatrix(FILE* writetofile, gsl_vector* v,vector&sizes); //in iosgslvectormatrix.cpp void readconfigurationdata(string&file, netdimsandfilenames&A); //down in this file int give_autoencoder_weights_sizes(netdimsandfilenames&A); //down in this file void loadautoencoderweights(netdimsandfilenames&A, gsl_vector*weights); void useblacklist(gsl_matrix * &inputdata,const char*blacklistfile); //in blacklist.cpp //the following will be use to choose to load initial weights for rbmlogistic or backproprbm weights const int num_matrices_autoencoder=4; // ------------------------------------------------------------------- // ---------------------------------------------------------------------------------------- int main(int argc, char ** argv){ try{ if(argc<3){ cout<<" must be called with argument signal and folder name !"<size1<size2!=ninputs){ cout<<"inputdata is not compatible with ninputs!"<size1; //compute autoencoder error by patch in the last 30 secs double *errorforpatchcritical_time=new double[nsegments]; double maximum_errorforpatchcritical_time; double other_error_rate_critical_time; double *diferenceoncritical_time=new double[nsegments]; double minimumdiferenceoncriticaltime, max,min; gsl_vector_view vecaux; { parametersfwdgsl parameters(3,dimensions,nsegments); gsl_matrix_memcpy(&(parameters.reallayerdata[0].matrix),criticaltimedata); //error for each patch give_error_for_each_patch_gsl_vislinear(autoencoderweights,¶meters, criticaltimedata,errorforpatchcritical_time); //maximum from error for each patch vecaux=gsl_vector_view_array (errorforpatchcritical_time,nsegments); maximum_errorforpatchcritical_time=gsl_vector_max (&vecaux.vector); other_error_rate_critical_time=just_compute_error_gsl_vislinear(autoencoderweights,¶meters, criticaltimedata); //diference between max and min on each patch for(int i=0;isize1; double *errorforpatchtraining=new double[npatches]; double *diferenceforpatchtraining=new double[npatches]; parametersfwdgsl parameters(3,dimensions,npatches); gsl_matrix_memcpy(&(parameters.reallayerdata[0].matrix),inputdata); give_error_for_each_patch_gsl_vislinear(autoencoderweights,¶meters, inputdata,errorforpatchtraining); //compute 'diference' for each patch for(int i=0;i blacklist; double factorformaximumerror=4.0; double factorfordiference=1.0/10; for(int i=0;ifactorformaximumerror*maximum_errorforpatchcritical_time)|| (diferenceforpatchtraining[i]::const_iterator iter = blacklist.begin(); iter != blacklist.end(); ++iter ) { saveonfile<<*iter << '\n'; } saveonfile< knownsizes(9); int ninputs=A.nsignals*A.patchsize; knownsizes[0]=4; knownsizes[1]=ninputs+1; knownsizes[2]=A.nhidden0; knownsizes[3]=A.nhidden0+1; knownsizes[4]=A.nhidden1; knownsizes[5]=A.nhidden1+1; knownsizes[6]=A.nhidden0; knownsizes[7]=A.nhidden0+1; knownsizes[8]=ninputs; vector sizes; FILE * readweights = fopen(A.backpropautoencodercoefficientsfile.c_str(), "r"); readgslvectormatrix(readweights, weights,sizes); fclose(readweights); for(int i=0; i<9;++i) if(knownsizes[i]!=(int)sizes[i]){ cout<<"matrices sizes are not correct!"<