From a5bed3157a15a536974e4296d96624b4557653c4 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Fri, 14 Jan 2022 12:48:37 +0000 Subject: [PATCH] - fixed feed backs git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@808 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- source/poet.cpp | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/source/poet.cpp b/source/poet.cpp index e767009..5554d93 100644 --- a/source/poet.cpp +++ b/source/poet.cpp @@ -103,6 +103,11 @@ arma::mat createTraining(const string &filename, size_t seq_len) arma::mat batch = arma::zeros(numTraining, numVisible); arma::mat pattern = arma::zeros(seq_len, NUM_CODES); + for (int i=0; i < seq_len; i++) + { + pattern.row(i)[0] = 1; + } + int last_index = ch2idx(' '); while(!feof(pFile)) { @@ -158,14 +163,16 @@ struct Rnn arma::mat curr_vec(arma::mat const &vcVec) { arma::mat vMat = vcVec_to_vMat(vcVec); - - return vMat.col(nVy-1); + return vMat.col(0); } - arma::mat vcVec_next_step(arma::mat const &vcVec, arma::mat const &h) + arma::mat vcVec_next_step(arma::mat const &vCurr, arma::mat const &vcVec_last, arma::mat const &h) { - arma::mat vMat = arma::shift(vcVec_to_vMat(vcVec), 1, 1); - arma::mat vVec = vMat.as_row(); + arma::mat vMat_last = arma::shift(vcVec_to_vMat(vcVec_last), 1, 1); + vMat_last.col(0) = arma::zeros(nVx, 1); + vMat_last.col(1) = vCurr; + + arma::mat vVec = vMat_last.as_row(); arma::mat vcVec_next = arma::join_rows(vVec, h); return vcVec_next; @@ -217,38 +224,44 @@ int main() Rnn rnn(layer); printf("\nStimulus: Training\n"); + h = layer->toHiddenProbs(t); + r = t; for (int i=0; i < numTraining; i++) { - arma::mat curr = rnn.curr_vec(t.row(i)); + arma::mat r = t.row(i); + layer->gibbs_vh(r, h); + layer->gibbs_hv(h, r); + arma::mat curr = rnn.curr_vec(r); char c = idx2ch(curr.index_max()); putchar(c); } printf("\n"); - h = layer->toHiddenProbs(t.row(0)); + arma::mat v = t.row(0); printf("Stimulus: Next char and current h\n"); for (int i=1; i < numTraining+1; i++) { - arma::mat r; - layer->gibbs_hv(h, r); + arma::mat r = v; + layer->gibbs_vh(r, h); arma::mat curr = rnn.curr_vec(r); - arma::mat v = rnn.vcVec_next_step(r, h); + v = rnn.vcVec_next_step(curr, r, h); layer->gibbs_vh(v, h); - + char c = idx2ch(curr.index_max()); putchar(c); } printf("\n"); - h = layer->toHiddenProbs(t.row(0)); + v = t.row(0); + h = layer->toHiddenProbs(v); printf("Stimulus: Current h\n"); for (int i=1; i < numTraining+1; i++) { - arma::mat r; + arma::mat r = v; layer->gibbs_hv(h, r); arma::mat curr = rnn.curr_vec(r); - arma::mat v = rnn.vcVec_next_step(arma::zeros(1, r.n_cols), h); + v = rnn.vcVec_next_step(curr, arma::zeros(1, r.n_cols), h); layer->gibbs_vh(v, h);