jacobian

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

commit 1b2ae40382763a7096bf2a19041bb4ed20ec8d75
parent effd2a53777647e6c2d460000173d8e86015278b
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Fri,  3 Jul 2020 12:57:50 -0700

More feedforward fixed

Diffstat:
Mcnn.cpp | 21+++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/cnn.cpp b/cnn.cpp @@ -22,9 +22,9 @@ ConvLayer::ConvLayer(int x, int y, int stride, int kern_size) for (int i = 0; i < kern_size*kern_size; i++) { (*kernel)((int)i / kern_size,i%kern_size) = (double) rand() / RAND_MAX; } - 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++) { - (*output)((int)i / kern_size,i%kern_size) = (double) rand()/RAND_MAX; + output = new Eigen::MatrixXd (x-kern_size+1, y-kern_size+1); // We're using valid padding for now. + for (int i = 0; i < (x-kern_size+1)*(y-kern_size+1); i++) { + (*output)((int)i / (y-kern_size+1),i%(y-kern_size+1)) = (double) rand()/RAND_MAX; } }; @@ -32,11 +32,12 @@ void ConvLayer::convolute() { //std::cout << input->cols() << " " << input->cols() << "\n"; // std::cout << "Conv input:\n" << *input << "\nkernel:\n" << *kernel << "\n\n"; + // std::cout << *input << "\n\n"; 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) { //std::cout << i << j << stride_len << "\n"; + // std::cout << j << ","<< i << " vs " << input->rows() << "," << input->cols() <<"\n"<< input->block(j, i, kernel->rows(), kernel->cols()) << "\n\n"; (*output)(j, i) = (*kernel * (input->block(j, i, kernel->rows(), kernel->cols()))).sum(); - std::cout << j << ","<< i << " vs " << input->rows() << "," << input->cols() <<"\n"<< input->block(j, i, kernel->rows(), kernel->cols()) << "\n\n"; } } } @@ -61,9 +62,10 @@ PoolingLayer::PoolingLayer(int x, int y, int stride, int kern_size) for (int i = 0; i < kern_size*kern_size; i++) { (*kernel)((int)i / kern_size,i%kern_size) = (double) rand()/RAND_MAX; } - output = new Eigen::MatrixXd (kern_size, kern_size); - for (int i = 0; i < kern_size*kern_size; i++) { - (*output)((int)i / kern_size,i%kern_size) = (double) rand()/RAND_MAX; + output = new Eigen::MatrixXd (x-kern_size+1, y-kern_size+1); + std::cout << *output; + for (int i = 0; i < (x-kern_size+1)*(y-kern_size+1); i++) { + (*output)((int)i / (y-kern_size+1),i%(y-kern_size+1)) = (double) rand()/RAND_MAX; } }; @@ -71,7 +73,6 @@ void PoolingLayer::pool() { // It doesn't look like anything better than O(n^4) is doable for this as kernel needs to go through matrix and you need to index kernel. LOOK INTO ME!! float maxnum = -LARGE_NUM; - // std::cout << "Pool input:\n" << *input << "\n\n"; for (int i = 0; i < input->cols() - kernel->cols(); i+=stride_len) { for (int j = 0; j < input->rows() - kernel->rows(); j+=stride_len) { for (int k = 0; k < kernel->cols(); k++) { @@ -165,8 +166,8 @@ int main() { ConvNet net ("./data_banknote_authentication.txt", 1, 0.05, 0.01, 0.9); net.add_conv_layer(8,8,1,4); - net.add_pool_layer(4,4,1,2); - net.add_layer(4, "linear"); + net.add_pool_layer(5,5,1,2); + net.add_layer(16, "linear"); net.add_layer(5, "relu"); net.add_layer(1, "resig"); net.initialize();