jacobian

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

commit 82cda4732e01ca0d7830f09dd4553f60b36a71bc
parent dca5b3e70a6964c668ca1d59b2de7ce8773959d8
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Mon, 22 Jun 2020 19:03:13 -0700

Broke training but sped up batch advancement

Diffstat:
Mbpnn.cpp | 29++++++++++++-----------------
Mbpnn.hpp | 4++--
Mmr_bpnn_2.cpp | 4++--
3 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/bpnn.cpp b/bpnn.cpp @@ -42,17 +42,16 @@ Network::Network(char* path, int inputs, int hidden, int outputs, int neurons, i { learning_rate = rate; instances = prep_file(path, "./shuffled.txt"); - fpath = "./shuffled.txt"; length = hidden + 2; batch_size = batch_sz; - FILE* fptr = fopen(fpath, "r"); + data = fopen("./shuffled.txt", "r"); int datalen = batch_sz*inputs; float batch[datalen]; labels = new Eigen::MatrixXd (batch_size, 1); int label; char line[1024] = {' '}; for (int i = 0; i < batch_size; i++) { - fgets(line, 1024, fptr); + fgets(line, 1024, data); 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; } @@ -164,30 +163,26 @@ void Network::update_layer(float* vals, int datalen, int index) } } -int Network::next_batch(char* path) +int Network::next_batch() { - FILE* fptr = fopen(path, "r"); char line[1024] = {' '}; int inputs = layers[0].contents->cols(); int datalen = batch_size * inputs; float batch[datalen]; int label = -1; - for (int i = 1; i < batch_size*(batches+1); i++) { - if (fgets(line, 1024, fptr)==NULL) { + for (int i = 0; i < batch_size; i++) { + if (fgets(line, 1024, data)==NULL) { break; } - if (i >= batches*batch_size) { - int j = i - (batches*batch_size); - 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; - } + 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; } float* batchptr = batch; update_layer(batchptr, datalen, 0); - fclose(fptr); + // std::cout << "Next batch is\n" << *layers[0].contents << "\nwith labels\n"<<*labels << "\n\n"; return 0; } @@ -269,7 +264,7 @@ void Network::train(int total_epochs) cost_sum += cost(); acc_sum += accuracy(); if (i != instances-batch_size) { // Don't try to advance batch on final batch. - next_batch(fpath); + next_batch(); } batches++; } epoch_accuracy = 1.0/((float) instances/batch_size) * acc_sum; @@ -308,7 +303,7 @@ void demo(int total_epochs) auto batch_begin = std::chrono::high_resolution_clock::now(); if (i != linecount-net.batch_size) { // Don't try to advance batch on final batch. - net.next_batch(net.fpath); + net.next_batch(); } auto loop_end = std::chrono::high_resolution_clock::now(); times[0] += std::chrono::duration_cast<std::chrono::nanoseconds>(back_begin - feed_begin).count() / pow(10,9); diff --git a/bpnn.hpp b/bpnn.hpp @@ -27,7 +27,7 @@ public: class Network { public: - char* fpath; + FILE* data; int instances; std::vector<Layer> layers; @@ -50,7 +50,7 @@ public: float cost(); float accuracy(); void backpropagate(); - int next_batch(char* path); + int next_batch(); float test(char* path); void train(int total_epochs); }; diff --git a/mr_bpnn_2.cpp b/mr_bpnn_2.cpp @@ -42,7 +42,7 @@ struct pair* map (struct pair input_pair) // auto batch_begin = std::chrono::high_resolution_clock::now(); if (i != linecount-net->batch_size) { // Don't try to advance batch on final batch. - net->next_batch(net->fpath); + net->next_batch(); } net->batches++; // auto loop_end = std::chrono::high_resolution_clock::now(); @@ -124,6 +124,6 @@ PYBIND11_MODULE(mrbpnn, m) { .def("cost", &Network::cost) .def("accuracy", &Network::accuracy) .def("update_layer", &Network::update_layer, py::arg("vals"), py::arg("len"), py::arg("index")) - .def("next_batch", &Network::next_batch, py::arg("path")) + .def("next_batch", &Network::next_batch) .def("train", &Network::train, py::arg("epochs")); }