jacobian

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

commit d108a1ba61e4e822fda8e8a9c98af2f7d53378e6
parent 122407d4b2f983afabfddc35fc5fc02c51c10e2a
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Thu,  2 Jul 2020 16:05:52 -0700

CNN compiles

Diffstat:
Mcnn.cpp | 32++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/cnn.cpp b/cnn.cpp @@ -1,7 +1,7 @@ #include "bpnn.hpp" #include "utils.hpp" -#define LARGE_NUM = 1000000 // Remove me. +#define LARGE_NUM 1000000 // Remove me. class ConvLayer { @@ -31,7 +31,7 @@ void ConvLayer::convolute() { for (int i = 0; i < input->cols() - kernel->cols() + 1; i+=stride_len) { for (int j = 0; j < input->rows() - kernel->rows() + 1; j+=stride_len) { - output(j, i) = (*kernel * input->block<kernel->rows(), kernel->cols()(j, i)).sum() + output->block(j, i, kernel->rows(), kernel->cols()) = (*kernel * (input->block(j, i, kernel->rows(), kernel->cols()).sum())); } } } @@ -69,8 +69,8 @@ void PoolingLayer::pool() for (int j = 0; j < input->rows() - kernel->rows() + 1; j+=stride_len) { for (int k = 0; k < kernel->cols(); k++) { for (int l = 0; l < kernel->rows(); l++) { - if ((input->block<kernel->rows(), kernel->cols()(j, i))(l, k) > maxnum) { - maxnum = (input->block<kernel->rows(), kernel->cols()(j, i))(l, k); + if ((input->block(j, i, kernel->rows(), kernel->cols()))(l, k) > maxnum) { + maxnum = (input->block(j, i, kernel->rows(), kernel->cols()))(l, k); } } } @@ -86,14 +86,14 @@ class ConvNet : Network std::vector<ConvLayer> conv_layers; std::vector<PoolingLayer> pool_layers; public: - ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate); + ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate, float ratio); void process(); // Runs the convolutional and pooling layers. void next_batch(); - void add_conv_layer(); - void add_pool_layer(); + void add_conv_layer(int x, int y, int stride, int kern_size); + void add_pool_layer(int x, int y, int stride, int kern_size); }; -ConvNet::ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate) +ConvNet::ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate, float ratio) : Network(path, batch_sz, learn_rate, bias_rate, ratio) { learning_rate = learn_rate; bias_lr = bias_rate; @@ -105,21 +105,21 @@ ConvNet::ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate) batches = 0; } -void add_conv_layer(int x, int y, int stride, int kern_size) +void ConvNet::add_conv_layer(int x, int y, int stride, int kern_size) { preprocess_length++; - conv_layers.empace_back(x,y,stride,kern_size); + conv_layers.emplace_back(x,y,stride,kern_size); } // May make this inaccessible to user code and just have it called from add_conv_layer as pooling is basically always paired with conv. -void add_pool_layer(int x, int y, int stride, int kern_size) +void ConvNet::add_pool_layer(int x, int y, int stride, int kern_size) { preprocess_length++; - pool_layers.empace_back(x,y,stride,kern_size); + pool_layers.emplace_back(x,y,stride,kern_size); } // Needs a batch advancement function, 100% does not work. -void process() +void ConvNet::process() { // Assumes pooling is immediately after any conv layer. for (int i = 0; i < preprocess_length-1; i++) { @@ -131,5 +131,9 @@ void process() conv_layers[preprocess_length-1].convolute(); pool_layers[preprocess_length-1].input = conv_layers[preprocess_length-1].output; pool_layers[preprocess_length-1].pool(); - layers[0].contents = pool_layers[i].output; + layers[0].contents = pool_layers[preprocess_length-1].output; +} + +int main() +{ }