jacobian

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

commit becc4d5a0e970e6465cb2310ff02ee421e939a0a
parent 051633438b3f17b063e844b4f84f6ee9db883af4
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Sun,  5 Jul 2020 11:14:59 -0700

CNN now stabler

Diffstat:
Mcnn.cpp | 38+++++++++++++++++++++++---------------
1 file changed, 23 insertions(+), 15 deletions(-)

diff --git a/cnn.cpp b/cnn.cpp @@ -105,7 +105,6 @@ public: std::vector<ConvLayer> conv_layers; std::vector<PoolingLayer> pool_layers; - std::function<Eigen::MatrixXd(void)>next_batch(); ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate, float ratio); void list_net(); @@ -113,6 +112,8 @@ public: void backpropagate(); void add_conv_layer(int x, int y, int stride, int kern_size, int pad); void add_pool_layer(int x, int y, int stride, int kern_size, int pad); + void set_label(Eigen::MatrixXd newlabels); + void initialize(); }; ConvNet::ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate, float ratio) : Network(path, batch_sz, learn_rate, bias_rate, ratio) @@ -133,7 +134,13 @@ void ConvNet::add_pool_layer(int x, int y, int stride, int kern_size, int pad) pool_layers.emplace_back(x,y,stride,kern_size,pad); } -// Needs a batch advancement function, 100% does not work. +void ConvNet::initialize() +{ + for (int i = 0; i < length-1; i++) { + layers[i].init_weights(layers[i+1]); + } +} + void ConvNet::process() { // std::cout << preprocess_length << "\n"; @@ -155,6 +162,11 @@ void ConvNet::process() } } +void ConvNet::set_label(Eigen::MatrixXd newlabels) +{ + *labels = newlabels; +} + void ConvNet::list_net() { for (int i = 0; i < preprocess_length; i++) { @@ -172,10 +184,7 @@ void ConvNet::backpropagate() { std::vector<Eigen::MatrixXd> gradients; std::vector<Eigen::MatrixXd> deltas; - (*labels)(0,0) = 1; - std::cout << *labels << "lab\n\n\n\n"; Eigen::MatrixXd error = ((*layers[length-1].contents) - (*labels)); - std::cout << (*layers[length-1].dZ) << " " << error << "|n\n\n\n\n"; gradients.push_back(error.cwiseProduct(*layers[length-1].dZ)); deltas.push_back((*layers[length-2].contents).transpose() * gradients[0]); int counter = 1; @@ -192,10 +201,10 @@ void ConvNet::backpropagate() *layers[length-1-i].bias -= bias_lr * gradients[i]; } // list_net(); - std::cout << "GRADIENT LIST\n"; - for (int i = 0; i < gradients.size(); i++) { - std::cout << gradients[i] << "\n\n"; - } + // std::cout << "GRADIENT LIST\n"; + // for (int i = 0; i < gradients.size(); i++) { + // std::cout << gradients[i] << "\n\n"; + // } Eigen::Map<Eigen::MatrixXd> reshaped(gradients[gradients.size()-1].data(), conv_layers[conv_layers.size()-1].output->rows(),conv_layers[conv_layers.size()-1].output->cols()); gradients[gradients.size()-1] = reshaped; //std::cout << gradients[gradients.size()-1].cols() << " " << conv_layers[0].input->cols() << " " << conv_layers[0].input->cols() - gradients[length-1].cols()+1 << "\n"; @@ -207,13 +216,12 @@ void ConvNet::backpropagate() conv_layers[0].bias -= gradients[gradients.size()-1].sum(); } - - int main() { ConvNet net ("./data_banknote_authentication.txt", 1, 0.05, 0.01, 0.9); - (*net.labels)(0,0) = 1; - std::cout << *net.labels << "LABEL\n\n"; + Eigen::MatrixXd labels (1,1); + labels << 1; + net.set_label(labels); net.add_conv_layer(8,8,1,4,0); //net.add_pool_layer(5,5,1,2,0); net.add_layer(25, "linear"); @@ -235,8 +243,8 @@ int main() for (int i = 0; i < 10; i++) { net.feedforward(); net.backpropagate(); - std::cout << *net.layers[net.layers.size()-1].contents << " <--- ACTIVIATION\n"; + std::cout << *net.layers[net.layers.size()-1].contents << " <--- ACTIVATION\n"; } - //net.list_net(); + net.list_net(); // net.list_net(); }