jacobian

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

commit 75532fb76bf8c2776736063d46aa5a7d8dba3339
parent a166cbbd6beeeaecc1385a93c81f802a6b893bd2
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Sat, 13 Jun 2020 22:35:24 -0700

Expanded training, ignoring blatant backprop flaws

Diffstat:
Mtest.cpp | 66+++++++++++++++++++++++++++++++++++++++++++++++++++---------------
1 file changed, 51 insertions(+), 15 deletions(-)

diff --git a/test.cpp b/test.cpp @@ -92,10 +92,11 @@ public: int length; int batch_size; + int batches; Eigen::MatrixXd* labels; Network(char* path, int inputs, int hidden, int outputs, int neurons, int batch_sz); - void update_layer(); + void update_layer(float* vals, int datalen, int index); Eigen::MatrixXd activate(Eigen::MatrixXd matrix); void feedforward(); @@ -104,7 +105,7 @@ public: float cost(); float gradient(int mode, int layer, int node); void backpropagate(); - void next_batch(); + int next_batch(); void test(); }; @@ -192,27 +193,62 @@ void Network::backpropagate() } } -void Network::next_batch() +void Network::update_layer(float* vals, int datalen, int index) { - fopen(fpath); + for (int i = 0; i < datalen; i++) { + (*layers[index].contents)((int)i / layers[index].contents->cols(),i%layers[index].contents->cols()) = vals[i]; + } +} + +int Network::next_batch() +{ + FILE* fptr = fopen(fpath, "r"); char line[1024] = {' '}; - for (int i = 0; i < batch_sz; i++) { + int inputs = layers[0].contents->cols(); + int datalen = batch_size * inputs; + float batch[datalen]; + int label = 100; + for (int i = 0; i < batch_size*batches + 1; i++) { fgets(line, 1024, fptr); - sscanf(line, "%f,%f,%f,%f,%i", &batch[0+(i*inputs)], &batch[1+(i*inputs)], &batch[2+(i*inputs)], &batch[3+(i*inputs)], &label); - (*labels)(i,0) = label; + if (i >= batches) { + printf("%s", line); + for (int j = 0; j < batch_size; j++) { + fgets(line, 1024, fptr); + sscanf(line, "%f,%f,%f,%f,%i", &batch[0 + (j * inputs)], + &batch[1 + (j * inputs)], &batch[2 + (j * inputs)], + &batch[3 + (j * inputs)], &label); + (*labels)(j, 0) = label; + } + } } + float* batchptr = batch; + update_layer(batchptr, datalen, 0); + return 0; } int main() { std::cout << "\n\n\n"; Network net ("./data_banknote_authentication.txt", 4, 2, 1, 5, 1); - float cost = 1000; - for (int i = 0; i < 100; i++) { - net.feedforward(); - net.backpropagate(); - cost = net.cost(); - std::cout << net.cost() << "\n"; - } - net.list_net(); + int cycles = 0; + for (int i = 0; i < 3; i++) { + float cost = 1000; + for (int j = 0; j < 100; j++) { + net.feedforward(); + net.backpropagate(); + cost = net.cost(); + } + // std::cout << cycles << '\n'; + std::cout << net.cost() << " as it is " << net.labels[0] << " vs " << *net.layers[net.length-1].contents << "\n"; + // net.list_net(); + // std::cout << "\n\n\n\n\n\n"; + net.batches++; + int exit = net.next_batch(); + if (exit == -1) { + break; + } + cycles++; + } + net.feedforward(); + std::cout << net.cost() << " as it is " << net.labels[0] << " vs " << *net.layers[net.length-1].contents << "\n"; }