jacobian

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 483db5bcd63c6145537a26ea98eaf4e243d67d86
parent c1621a248c76f048d48d212c6a1656c704ef12f2
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Sun, 21 Jun 2020 11:21:59 -0700

Continuing work on fixing net

Diffstat:
Mbpnn.cpp | 12++++++++----
Mkerasdemo.py | 12+++++++-----
Mmr_bpnn_2.cpp | 2+-
3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/bpnn.cpp b/bpnn.cpp @@ -98,8 +98,8 @@ void Network::feedforward() // layers[i+1].contents->row(j) += *layers[i+1].bias; TODO ADD ME BACK! } // if (i != length-2) { - *layers[i+1].contents = activate(*layers[i+1].contents); - *layers[i+1].dZ = activate_deriv(*layers[i+1].contents); + *layers[i+1].contents = activate(*layers[i+1].contents); + *layers[i+1].dZ = activate_deriv(*layers[i+1].contents); // } // else { // *layers[i + 1].dZ = (layers[i + 1].dZ->array() + 1).matrix(); @@ -129,8 +129,9 @@ float Network::accuracy() float correct = 0; int total = 0; for (int i = 0; i < layers[length-1].contents->rows(); i++) { + printf("%i vs %f\n", (int)(*labels)(i, 0), (*layers[length-1].contents)(i, 0)); if ((*labels)(i, 0) == round((*layers[length-1].contents)(i, 0))) { - // printf("Correct!\n"); + printf("Correct!\n"); correct += 1; } total = i; @@ -145,7 +146,10 @@ void Network::backpropagate() // std::cout << "\nROUND\n\n\n\n\n\n"; std::vector<Eigen::MatrixXd> gradients; std::vector<Eigen::MatrixXd> deltas; - gradients.push_back((((*layers[length-1].contents) - (*labels)).cwiseProduct(((*layers[length-1].contents) - (*labels)))).cwiseProduct(*layers[length-1].dZ)); + Eigen::MatrixXd error = ((*layers[length-1].contents) - (*labels)).cwiseProduct(((*layers[length-1].contents) - (*labels))); + error = error.cwiseProduct(((*layers[length-1].contents) - (*labels)).cwiseProduct(((*layers[length-1].contents) - (*labels)))); + error = error.cwiseProduct(((*layers[length-1].contents) - (*labels)).cwiseProduct(((*layers[length-1].contents) - (*labels)))); + gradients.push_back(error.cwiseProduct(*layers[length-1].dZ)); deltas.push_back((*layers[length-2].contents).transpose() * gradients[0]); int counter = 1; for (int i = length-2; i >= 1; i--) { diff --git a/kerasdemo.py b/kerasdemo.py @@ -12,6 +12,7 @@ import time # import tensorflow from numpy import loadtxt +import keras from keras.models import Sequential from keras.layers import Dense init = time.time() @@ -25,13 +26,14 @@ model = Sequential() model.add(Dense(4, input_dim=4, activation='sigmoid')) model.add(Dense(5, activation='sigmoid')) model.add(Dense(5, activation='sigmoid')) -model.add(Dense(1, activation='sigmoid')) +model.add(Dense(1, activation='relu')) # compile the keras model -model.compile(loss='mse', optimizer='sgd', metrics=['accuracy']) +opt = keras.optimizers.SGD(lr=1) +model.compile(loss='mse', optimizer=opt, metrics=['accuracy']) # fit the keras model on the dataset -model.fit(X, y, epochs=50, batch_size=10) +model.fit(X, y, epochs=50, batch_size=1) # evaluate the keras model _, accuracy = model.evaluate(X, y) print('Accuracy: %.2f' % (accuracy*100)) -end = time.time(); -print(end-init); +end = time.time() +print(end-init) diff --git a/mr_bpnn_2.cpp b/mr_bpnn_2.cpp @@ -108,5 +108,5 @@ void translate(char* path) int main(int argc, char** argv) { // begin(argv[2], map, reduce, translate, strtol(argv[1], NULL, 10), 1, argv[3], strtol(argv[4], NULL, 10)); - demo(1); + demo(50); }