Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
                }
            }
        }
    }
}