jacobian

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

commit e0f910c0a16cb8165ab4770891f9c161552830ac
parent c24114eb07e7d6c01207afd2e2775cc0266e91df
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Thu, 25 Jun 2020 12:38:39 -0700

Beginnings of nicer network construction

Diffstat:
Mbpnn.cpp | 42++++++++++++++----------------------------
Mbpnn.hpp | 7+++++--
2 files changed, 19 insertions(+), 30 deletions(-)

diff --git a/bpnn.cpp b/bpnn.cpp @@ -46,37 +46,22 @@ void Layer::initWeights(Layer next) } } -Network::Network(char* path, int inputs, int hidden, int outputs, int neurons, int batch_sz, float rate) +Network::Network(char* path, int batch_sz, float learn_rate, float bias_rate) { - learning_rate = rate; + learning_rate = learn_rate; + bias_lr = bias_rate; instances = prep_file(path, "./shuffled.txt"); - length = hidden + 2; + length = 0; batch_size = batch_sz; 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, 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; - } - float* batchptr = batch; - layers.emplace_back(batchptr, batch_size, inputs); - for (int i = 0; i < hidden; i++) { - layers.emplace_back(batch_size, neurons); - } - layers.emplace_back(batch_size, outputs); - for (int i = 0; i < hidden+1; i++) { - layers[i].initWeights(layers[i+1]); - } - for (int i = 0; i < hidden+2; i++) { - layers[i].activation = &resig; - layers[i].activation_deriv = &resig_deriv; - } - batches = 1; + batches = 0; +} + +void add_layer(int nodes, char* activation) +{ + length++; + layers.push_back(batch_size, nodes); + set_activation(length-1, activation); } void Network::set_activation(int index, char* name) @@ -98,7 +83,8 @@ void Network::set_activation(int index, char* name) layers[index].activation_deriv = &resig_deriv; } else { - std::cout << "Warning! Incorrect activation specified. Ignoring...\n"; + std::cout << "Warning! Incorrect activation specified. Exiting...\n"; + exit(1); } } diff --git a/bpnn.hpp b/bpnn.hpp @@ -27,7 +27,7 @@ public: Layer(int rows, int columns); Layer(float* vals, int rows, int columns); - void initWeights(Layer next); + void init_weights(Layer next); }; class Network { @@ -39,11 +39,14 @@ public: int length; float learning_rate; + float bias_lr; int batch_size; int batches; Eigen::MatrixXd* labels; - Network(char* path, int inputs, int hidden, int outputs, int neurons, int batch_sz, float rate); + Network(char* path, int batch_sz, float learn_rate, float bias_rate); + void add_layer(int nodes, char* activation); + void initialize(); void update_layer(float* vals, int datalen, int index); void set_activation(int index, char* activation);