bool Trainee::dump(const char *traindatapath) { std::ofstream dat(traindatapath); if(!dat.good()) return false; dat << n_inputvec << ' ' << n_hid1vec << ' ' << n_hid2vec << ' ' << n_outputvec << '\n'; int i, j; for(i=0;i<n_hid1vec;i++){ for(j=0;j<n_inputvec-1;j++) dat << weight1(i, j) << ' '; dat << weight1(i, j) << '\n'; } for(j=0;j<n_hid1vec-1;j++) dat << bias1(j) << ' '; dat << bias1(j) << '\n'; for(i=0;i<n_hid2vec;i++){ for(j=0;j<n_hid1vec-1;j++) dat << weight2(i, j) << ' '; dat << weight2(i, j) << '\n'; } for(j=0;j<n_hid2vec-1;j++) dat << bias2(j) << ' '; dat << bias2(j) << '\n'; for(i=0;i<n_outputvec;i++){ for(j=0;j<n_hid2vec-1;j++) dat << weight3(i, j) << ' '; dat << weight3(i, j) << '\n'; } for(j=0;j<n_outputvec-1;j++) dat << bias3(j) << ' '; dat << bias3(j) << '\n'; if(!dat.good()) return false; return true; }
Trainee::Trainee(int n_hid1, int n_hid2, float init_sigma) { n_inputvec = MNISTreader::pixelSize; n_hid1vec = n_hid1; n_hid2vec = n_hid2; n_outputvec = 10; gsq_w1 = Eigen::ArrayXXf::Zero(n_hid1vec, n_inputvec); gsq_b1 = Eigen::ArrayXf::Zero(n_hid1vec); gsq_w2 = Eigen::ArrayXXf::Zero(n_hid2vec, n_hid1vec); gsq_b2 = Eigen::ArrayXf::Zero(n_hid2vec); gsq_w3 = Eigen::ArrayXXf::Zero(n_outputvec, n_hid2vec); gsq_b3 = Eigen::ArrayXf::Zero(n_outputvec); std::random_device rd; std::mt19937 mt(rd()); std::normal_distribution<float> nd(0.0, init_sigma); weight1 = Eigen::MatrixXf(n_hid1vec, n_inputvec); for(int i=0;i<n_hid1vec;i++) for(int j=0;j<n_inputvec;j++) weight1(i, j) = nd(mt); bias1 = Eigen::VectorXf::Zero(n_hid1vec); weight2 = Eigen::MatrixXf(n_hid2vec, n_hid1vec); for(int i=0;i<n_hid2vec;i++) for(int j=0;j<n_hid1vec;j++) weight2(i, j) = nd(mt); bias2 = Eigen::VectorXf::Zero(n_hid2vec); weight3 = Eigen::MatrixXf(n_outputvec, n_hid2vec); for(int i=0;i<n_outputvec;i++) for(int j=0;j<n_hid2vec;j++) weight3(i, j) = nd(mt); bias3 = Eigen::VectorXf::Zero(n_outputvec); }
void AncillaryMethods::intersectIdx(Vector< FrameInlier >& idx1, Vector< FrameInlier >& idx2, Vector< FrameInlier >& intersection) { int j = 0; int k = 0; intersection.clearContent(); Vector<int> inter; Vector<int> inlier1; Vector<int> inlier2; Vector<double> weight1; Vector<double> weight2; if (idx1.getSize() > 0 && idx2.getSize() > 0) { for (int i = 0; i < idx1.getSize(); i++) { while (idx1(i).getFrame() > idx2(j).getFrame() && j < idx2.getSize() - 1) { j++; } if (j == idx2.getSize()) break; if (idx1(i).getFrame() == idx2(j).getFrame()) { inlier1 = idx1(i).getInlier(); inlier2 = idx2(j).getInlier(); weight1 = idx1(i).getWeight(); weight2 = idx2(j).getWeight(); inlier1.intersection(inlier2, inter); if (inter.getSize() > 0) { FrameInlier inlier(idx1(i).getFrame()); for ( int l = 0; l < inlier1.getSize(); l++) { while (inlier1(l) > inlier2(k) && k < inlier2.getSize() - 1) { k++; } if (k == inlier2.getSize()) break; if (inlier1(l) == inlier2(k)) { inlier.addInlier(inlier1(l)); inlier.addWeight(weight1(l)); inlier.addWeight(weight2(k)); } } k = 0; intersection.pushBack(inlier); } } } } }