commit 9dd01a140192fb1cd0b03fef351ca4a5092040d0
parent b9e8d8eb59ef4775704925bad033e8852da74464
Author: David Freifeld <freifeld.david@gmail.com>
Date: Sun, 5 Jul 2020 10:49:38 -0700
Problematic backprop
Diffstat:
2 files changed, 20 insertions(+), 18 deletions(-)
diff --git a/bpnn.cpp b/bpnn.cpp
@@ -124,10 +124,10 @@ void Network::feedforward()
}
}
for (int i = 0; i < length-1; i++) {
- if (batch_size > 64 && batch_size % 4 == 0) {
- *layers[i+1].contents = strassen_mul((*layers[i].contents),(*layers[i].weights));
- }
- else *layers[i+1].contents = (*layers[i].contents) * (*layers[i].weights);
+ //if (batch_size > 64 && batch_size % 4 == 0) {
+ // *layers[i+1].contents = strassen_mul((*layers[i].contents),(*layers[i].weights));
+ //}
+ *layers[i+1].contents = (*layers[i].contents) * (*layers[i].weights);
*layers[i+1].contents += *layers[i+1].bias;
}
for (int i = 1; i < length; i++) {
@@ -320,8 +320,8 @@ void Network::train(int total_epochs)
}
epoch_acc = 1.0/((float) instances/batch_size) * acc_sum;
epoch_cost = 1.0/((float) instances/batch_size) * cost_sum;
- //test(TEST_PATH);
- //printf("Epoch %i/%i - cost %f - acc %f - val_cost %f - val_acc %f\n", epochs+1, total_epochs, epoch_cost, epoch_acc, val_cost, val_acc);
+ test(TEST_PATH);
+ printf("Epoch %i/%i - cost %f - acc %f - val_cost %f - val_acc %f\n", epochs+1, total_epochs, epoch_cost, epoch_acc, val_cost, val_acc);
batches=1;
epochs++;
rewind(data);
diff --git a/cnn.cpp b/cnn.cpp
@@ -21,7 +21,7 @@ public:
ConvLayer::ConvLayer(int x, int y, int stride, int kern_size, int pad)
{
padding = pad;
- pad++;
+ pad*=2;
stride_len = stride;
input = new Eigen::MatrixXd (x+pad,y+pad);
for (int i = 0; i < (x+pad)*(y+pad); i++) {
@@ -118,6 +118,7 @@ public:
ConvNet::ConvNet(char* path, int batch_sz, float learn_rate, float bias_rate, float ratio) : Network(path, batch_sz, learn_rate, bias_rate, ratio)
{
preprocess_length = 0;
+ labels = new Eigen::MatrixXd (batch_sz, 1);
}
void ConvNet::add_conv_layer(int x, int y, int stride, int kern_size, int pad)
@@ -171,7 +172,9 @@ void ConvNet::backpropagate()
{
std::vector<Eigen::MatrixXd> gradients;
std::vector<Eigen::MatrixXd> deltas;
+ 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;
@@ -188,10 +191,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";
@@ -206,12 +209,11 @@ void ConvNet::backpropagate()
int main()
{
ConvNet net ("./data_banknote_authentication.txt", 1, 0.05, 0.01, 0.9);
- Eigen::MatrixXd* testlabel = new Eigen::MatrixXd (1,1);
- *testlabel << 1;
- net.labels = testlabel;
- net.add_conv_layer(8,8,1,4,1);
+ (*net.labels)(0,0) = 1;
+ std::cout << *net.labels << "LABEL\n\n";
+ net.add_conv_layer(8,8,1,4,0);
//net.add_pool_layer(5,5,1,2,0);
- net.add_layer(49, "linear");
+ net.add_layer(25, "linear");
net.add_layer(5, "relu");
net.add_layer(1, "resig");
net.initialize();
@@ -230,8 +232,8 @@ int main()
for (int i = 0; i < 10; i++) {
net.feedforward();
net.backpropagate();
- std::cout << *net.layers[net.layers.size()-1].contents << "\n";
+ std::cout << *net.layers[net.layers.size()-1].contents << " <--- ACTIVIATION\n";
}
- net.list_net();
+ //net.list_net();
// net.list_net();
}