jacobian

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

commit 385b1d0e25807493e58709f8b8b68bd6c111b988
parent cf18167c4d30a20ce0d546125803d63615c32529
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Sat, 27 Jun 2020 19:05:49 -0700

Oops turns out ifstream is slower

Diffstat:
Mbpnn.cpp | 15++++++++-------
Mbpnn.hpp | 2+-
Mexample.py | 30+++++++++++++++++-------------
3 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/bpnn.cpp b/bpnn.cpp @@ -42,7 +42,7 @@ Network::Network(char* path, int batch_sz, float learn_rate, float bias_rate) instances = prep_file(path, "./shuffled.txt"); length = 0; batch_size = batch_sz; - data = new std::ifstream("./shuffled.txt"); + data = fopen("./shuffled.txt", "r"); batches = 0; } @@ -200,17 +200,19 @@ void Network::update_layer(float* vals, int datalen, int index) int Network::next_batch() { auto init_begin = std::chrono::high_resolution_clock::now(); - char line[1024]; + char line[1024] = {' '}; int inputs = layers[0].contents->cols(); int datalen = batch_size * inputs; float batch[datalen]; int label = -1; auto get_begin = std::chrono::high_resolution_clock::now(); for (int i = 0; i < batch_size; i++) { - data->getline(line, 1024); - sscanf(line, "%i,%f,%f,%f,%f", &label, &batch[0 + (i * inputs)], + if (fgets(line, 1024, data)==NULL) { + break; + } + sscanf(line, "%f,%f,%f,%f,%i", &batch[0 + (i * inputs)], &batch[1 + (i * inputs)], &batch[2 + (i * inputs)], - &batch[3 + (i * inputs)]); + &batch[3 + (i * inputs)], &label); (*labels)(i, 0) = label; } auto get_end = std::chrono::high_resolution_clock::now(); @@ -326,7 +328,6 @@ void Network::train(int total_epochs) printf("Time spent across epoch: %lf on next batch, %lf on feedforward, %lf on backprop, %lf on cost, %lf on acc.\n\n", times[0], times[1], times[2], times[3], times[4], epochtime-times[0]-times[1]-times[2]-times[3]-times[4]); batches=1; epochs++; - data->clear(); - data->seekg(0); + rewind(data); } } diff --git a/bpnn.hpp b/bpnn.hpp @@ -31,7 +31,7 @@ public: class Network { public: - std::ifstream* data; + FILE* data; int instances; std::vector<Layer> layers; diff --git a/example.py b/example.py @@ -2,17 +2,21 @@ import mrbpnn import numpy import time -init = time.time() -net = mrbpnn.Network("./exoplanets.txt", 10, 0.0155, 0.03); -net.add_layer(4, "sigmoid"); -net.add_layer(5, "step"); -net.add_layer(5, "step"); -net.add_layer(5, "lecun_tanh"); -net.add_layer(1, "resig"); -net.initialize(); -initend = time.time() -net.train(50); - -end = time.time() -print("%s: init %s" % (end-init, initend-init)) +def bench(): + init = time.time() + net = mrbpnn.Network("./data_banknote_authentication.txt", 10, 0.0155, 0.03); + net.add_layer(4, "linear"); + net.add_layer(5, "lecun_tanh"); + net.add_layer(1, "resig"); + net.initialize(); + initend = time.time() + net.train(50); + end = time.time() + return (end-init) +# print("%s: init %s" % (end-init, initend-init)) +timesum=0 +trials = 100 +for i in range(trials): + timesum+=bench() +print("Averages over %s trials\n--------------\nTime: %s seconds.\n" % (trials, timesum/trials))