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