jacobian

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

commit 9502b96fb20003c4f2e9ee8ae0a67f6ae2200e71
parent e612a355518e113bd39f8b9da3df42ccbf2f9016
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Wed, 24 Jun 2020 11:40:08 -0700

Switched back to FILE*

Diffstat:
Mbpnn.cpp | 24++++++++----------------
Mbpnn.hpp | 7+++----
2 files changed, 11 insertions(+), 20 deletions(-)

diff --git a/bpnn.cpp b/bpnn.cpp @@ -44,16 +44,14 @@ Network::Network(char* path, int inputs, int hidden, int outputs, int neurons, i instances = prep_file(path, "./shuffled.txt"); length = hidden + 2; batch_size = batch_sz; - data.open("./shuffled.txt", std::ios::in); - std::istream is (&data); - stream = &is; + 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++) { - stream->getline(line, 1024); + 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; } @@ -67,7 +65,6 @@ Network::Network(char* path, int inputs, int hidden, int outputs, int neurons, i layers[i].initWeights(layers[i+1]); } batches = 1; - std::cout << "Batch is: " << *layers[0].contents << "\n"; } Eigen::MatrixXd Network::activate(Eigen::MatrixXd matrix) @@ -174,25 +171,21 @@ int Network::next_batch() int datalen = batch_size * inputs; float batch[datalen]; int label = -1; - auto scan_begin = std::chrono::high_resolution_clock::now(); - auto set_begin = std::chrono::high_resolution_clock::now(); auto get_begin = std::chrono::high_resolution_clock::now(); for (int i = 0; i < batch_size; i++) { - if (stream->getline(line, 1024) && strlen(line)>0) { + if (fgets(line, 1024, data)==NULL) { break; } - scan_begin = std::chrono::high_resolution_clock::now(); sscanf(line, "%f,%f,%f,%f,%i", &batch[0 + (i * inputs)], &batch[1 + (i * inputs)], &batch[2 + (i * inputs)], &batch[3 + (i * inputs)], &label); - set_begin = std::chrono::high_resolution_clock::now(); (*labels)(i, 0) = label; } auto get_end = std::chrono::high_resolution_clock::now(); float* batchptr = batch; update_layer(batchptr, datalen, 0); auto update_end = std::chrono::high_resolution_clock::now(); - std::cout << " INIT " << std::chrono::duration_cast<std::chrono::nanoseconds>(get_begin - init_begin).count() << " GET " << std::chrono::duration_cast<std::chrono::nanoseconds>(scan_begin - get_begin).count() << " SCAN " << std::chrono::duration_cast<std::chrono::nanoseconds>(set_begin - scan_begin).count() << " SET " << std::chrono::duration_cast<std::chrono::nanoseconds>(get_end - set_begin).count() << " UPDATE " << std::chrono::duration_cast<std::chrono::nanoseconds>(update_end - get_end).count() << " TOTAL " << std::chrono::duration_cast<std::chrono::nanoseconds>(update_end - init_begin).count() << "\n"; + std::cout << " INIT " << std::chrono::duration_cast<std::chrono::nanoseconds>(get_begin - init_begin).count() / pow(10,9) << " GET " << std::chrono::duration_cast<std::chrono::nanoseconds>(get_end - get_begin).count() / pow(10,9) << " UPDATE " << std::chrono::duration_cast<std::chrono::nanoseconds>(update_end - get_end).count() / pow(10,9) << " TOTAL " << std::chrono::duration_cast<std::chrono::nanoseconds>(update_end - init_begin).count() / pow(10,9) << "\n"; // std::cout << "Next batch is\n" << *layers[0].contents << "\nwith labels\n"<<*labels << "\n\n"; return 0; } @@ -287,8 +280,7 @@ void Network::train(int total_epochs) printf("Epoch %i/%i - time %f - cost %f - acc %f\n", epochs+1, total_epochs, epochtime, epoch_cost, epoch_accuracy); batches=1; epochs++; - stream->clear(); - stream->seekg(0); + rewind(data); } } @@ -336,8 +328,7 @@ void demo(int total_epochs) printf("Time spent across epoch: %lf on feedforward, %lf on backprop, %lf on cost, %lf on acc, %lf on next batch, %lf other.\n", times[0], times[1], times[2], times[3], times[4], epochtime-times[0]-times[1]-times[2]-times[3]-times[4]); net.batches=1; epochs++; - net.stream->clear(); - net.stream->seekg(0); + rewind(net.data); } // float newvals[4] = {0}; // FILE* new = fopen("./predict.txt", "r"); @@ -347,4 +338,4 @@ void demo(int total_epochs) // net.list_net(); //net.list_net(); // printf("Test accuracy: %f\n", net.test("./test.txt")); - } +} +\ No newline at end of file diff --git a/bpnn.hpp b/bpnn.hpp @@ -7,7 +7,6 @@ extern "C" { #include <vector> #include <array> #include <iostream> -#include <fstream> #include <string> #include <cstdio> #include <fstream> @@ -28,8 +27,7 @@ public: class Network { public: - std::filebuf data; - std::istream* stream; + FILE* data; int instances; std::vector<Layer> layers; @@ -58,4 +56,4 @@ public: }; void demo(int total_epochs); -int prep_file(char* path, char* out_path); +int prep_file(char* path, char* out_path); +\ No newline at end of file