/* fwdhiddenlayerrbmvislinear.cpp - forward input data to the hidden layer of an rbm with linear visivle units 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 #include #include using namespace std; #include "netrbm.h" #include "netdimsandfilenames.h" #ifdef _OPENMP #include #endif void checkfstream(ofstream& file_io,const char* filename); //in checkfstream.cpp void checkfstream(ifstream& file_io,const char* filename); //in checkfstream.cpp void read_datafile(ifstream&in,netdimsandfilenames& A); //in netdimsandfilenames.cpp void logistic (gsl_matrix * m,size_t nrows,size_t ncols); //down in this file void writegslmatriz(const char* filename,gsl_matrix*m); void readgslmatriz(const char* filename,gsl_matrix*&m); void readgslvector(const char* filename,gsl_vector*m); void writegslvector(const char* filename,gsl_vector*m); //in iogslvectormatrix.cpp // ---------------------------------------------------------------------------------------- //-----------------------CONFIGURE----------------------------------------------------- const size_t batchsize=500; const size_t numepochs=25; const double epsilonweights=0.025; const double epsilonbias=0.025; const double momentum=0.2; const double weightscost=0.0002; //----------------------------------------------------------------------------------- void fwdhiddenlayervislinear(netrbm&net,gsl_matrix*data); //down in this file void writegslmatriz(const char* filename,gsl_matrix*m); //in iosvectormatrix.cpp int main(int argc, char ** argv){ try{ if(argc<3){ cout<<" must be called with argument signal1 and aftert folder name !"<size2!=ninputs){ cout<<"inputdata is not compatible with ninputs!"<size1; //load weights (first matrix with pure weights then visible bias finally //hidden bias gsl_vector * vectorweightsandbias=gsl_vector_calloc (ninputs*nhidden+ninputs+nhidden); readgslvector(A1.netvislinearweights.c_str(),vectorweightsandbias); #ifdef _OPENMP int maxnumthreads = omp_get_max_threads(); #else /* _OPENMP */ int maxnumthreads = 4; #endif /* _OPENMP */ const unsigned blocksize=npatches/maxnumthreads; netrbm net(ninputs,nhidden, npatches,maxnumthreads, blocksize, npatches, vectorweightsandbias); fwdhiddenlayervislinear(net,data); writegslmatriz(A1.rbmvislinearhiddendatafile.c_str(),net.posprobs); gettimeofday(&end, NULL); int seconds = end.tv_sec - start.tv_sec; int useconds = end.tv_usec - start.tv_usec; int mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5; cout<<"Elapsed time: "<size1, ncols=m->size2; for(unsigned i=0;i