jacobian

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

commit 4ef04e671adbedba987f6cea30e3a7f4f1d66e98
parent bec1678d6f27c9c4e89610fe91b9ffb363c837a1
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Tue, 30 Jun 2020 20:11:01 -0700

Added constructors + funcs for adding layers

Diffstat:
Mcnn.cpp | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 56 insertions(+), 2 deletions(-)

diff --git a/cnn.cpp b/cnn.cpp @@ -8,12 +8,29 @@ class ConvLayer Eigen::MatrixXd* input; Eigen::MatrixXd* kernel; Eigen::MatrixXd* output; + int stride_len; public: - ConvLayer(int stride) + ConvLayer(int x, int y, int stride, int kernel_size); void convolute(); }; +ConvLayer::ConvLayer(int x, int y, int stride, int kern_size) +{ + input = new Eigen::MatrixXd (x, y); + for (int i = 0; i < x*y; i++) { + (*input)((int)i / y,i%y) = 0; + } + kernel = new Eigen::MatrixXd (kern_size, kern_size); + for (int i = 0; i < kern_size*kern_size; i++) { + (*input)((int)i / kern_size,i%kern_size) = 0; + } + output = new Eigen::MatrixXd (kern_size, kern_size); // We're using valid padding for now. + for (int i = 0; i < kern_size*kern_size; i++) { + (*input)((int)i / kern_size,i%kern_size) = 0; + } +}; + void ConvLayer::convolute() { for (int i = 0; i < input->cols() - kernel->cols() + 1; i+=stride_len) { @@ -28,9 +45,28 @@ class PoolingLayer Eigen::MatrixXd* input; Eigen::MatrixXd* kernel; Eigen::MatrixXd* output; - + int stride_len; + public: void pool(); + PoolingLayer(int x, int y, int stride, int kern_size); +}; + +// Will eventually be different from ConvLayer +PoolingLayer::PoolingLayer(int x, int y, int stride, int kern_size) +{ + input = new Eigen::MatrixXd (x, y); + for (int i = 0; i < x*y; i++) { + (*input)((int)i / y,i%y) = 0; + } + kernel = new Eigen::MatrixXd (kern_size, kern_size); + for (int i = 0; i < kern_size*kern_size; i++) { + (*input)((int)i / kern_size,i%kern_size) = 0; + } + output = new Eigen::MatrixXd (kern_size, kern_size); + for (int i = 0; i < kern_size*kern_size; i++) { + (*input)((int)i / kern_size,i%kern_size) = 0; + } }; void PoolingLayer::pool() @@ -62,6 +98,7 @@ public: void process(); // Runs the convolutional and pooling layers. void next_batch(); void add_conv_layer(); + void add_pool_layer(); }; ConvNet::ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate) @@ -75,3 +112,20 @@ ConvNet::ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate) data = fopen("./shuffled.txt", "r"); batches = 0; } + +void add_conv_layer(int x, int y, int stride, int kern_size) +{ + preprocess_length++; + conv_layers.empace_back(x,y,stride,kern_size); +} + +void add_pool_layer(int x, int y, int stride, int kern_size) +{ + preprocess_length++; + pool_layers.empace_back(x,y,stride,kern_size); +} + +void process() +{ + +}