jacobian

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

commit 131f4d117056a32c8c6ad5c898361262a119cee0
parent 423dfd2a492422c04063567b0f5f0164432ed475
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Sun, 29 Nov 2020 09:36:05 -0800

Fixed basic convolutional backprop

Diffstat:
Msrc/cnn.cpp | 7+++----
1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/cnn.cpp b/src/cnn.cpp @@ -275,7 +275,6 @@ void ConvNet::backpropagate() std::cout << conv_layers[layer].input->cols() << " " << gradients.back().cols() << "\n"; for (int i = 0; i < conv_layers[layer].input->rows() - gradients.back().rows() + 1; i++) { for (int j = 0; j < conv_layers[layer].input->cols() - gradients.back().cols() + 1; j++) { - std::cout << i << " " << j << "\n"; conv_deltas[conv_deltas.size()-1](i, j) = (gradients.back() * conv_layers[layer].input->block(i, j, gradients.back().rows(), gradients.back().cols())).sum(); } } @@ -284,9 +283,10 @@ void ConvNet::backpropagate() Eigen::MatrixXf flipped_kernel = Eigen::MatrixXf::Zero(conv_layers[layer].kernel->rows(), conv_layers[layer].kernel->cols()); flipped_kernel = conv_layers[layer].kernel->transpose().colwise().reverse().transpose().colwise().reverse(); - Eigen::MatrixXf padded_grad = Eigen::MatrixXf::Zero(gradients.back().rows() + 2, gradients.back().cols() + 2); - padded_grad.block(1, 1, gradients.back().rows(), gradients.back().cols()) = gradients.back(); + Eigen::MatrixXf padded_grad = Eigen::MatrixXf::Zero(gradients.back().rows() + ((flipped_kernel.rows() - 1)*2), gradients.back().cols() + ((flipped_kernel.cols() - 1)*2)); + padded_grad.block(flipped_kernel.rows() - 1, flipped_kernel.cols() - 1, gradients.back().rows(), gradients.back().cols()) = gradients.back(); Eigen::MatrixXf final_grad (padded_grad.rows() - flipped_kernel.rows() + 1, padded_grad.cols() - flipped_kernel.cols() + 1); + std::cout << padded_grad.rows() << " " << flipped_kernel.rows() << "\n"; for (int i = 0; i < padded_grad.rows() - flipped_kernel.rows() + 1; i++) { for (int j = 0; j < padded_grad.cols() - gradients.back().cols() + 1; j++) { final_grad(i, j) = (flipped_kernel * padded_grad.block(i, j, flipped_kernel.rows(), flipped_kernel.cols())).sum(); @@ -294,7 +294,6 @@ void ConvNet::backpropagate() } gradients.push_back(final_grad); } - assert(2<1); } void ConvNet::train()