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:
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))