commit 43e2b13bd0546c2b75a1955422bece2c4b21ec06
parent 1a9db6adece3fe6a47ca89f6a80b4ad80305523f
Author: David Freifeld <freifeld.david@gmail.com>
Date: Sun, 12 Jul 2020 10:36:57 -0700
Added crossentropy cost function
Diffstat:
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/bpnn.cpp b/src/bpnn.cpp
@@ -184,16 +184,22 @@ void Network::list_net()
float Network::cost()
{
- // float sum = 0;
+ float sum = 0;
float reg = 0; // Regularization term
- // for (int i = 0; i < layers[length-1].contents->rows(); i++) {
- // sum += ((*labels)(i, 0) - (*layers[length-1].contents)(i, 0)) * ((*labels)(i, 0) - (*layers[length-1].contents)(i, 0));
- // }
+ for (int i = 0; i < layers[length-1].contents->rows(); i++) {
+ float tempsum = 0;
+ for (int j = 0; j < layers[length-1].contents->cols(); j++) {
+ float truth;
+ if (j==(*labels)(i,0)) truth = (*labels)(i,0);
+ else truth = 0;
+ tempsum += truth * log((*layers[length-1].contents)(i,j))
+ }
+ sum+=tempsum;
+ }
for (int i = 0; i < layers.size()-1; i++) {
reg += (layers[i].weights->cwiseProduct(*layers[i].weights)).sum();
}
- // return ((1.0/batch_size) * sum) + (1/2*lambda*reg);
- return (1/2*lambda*reg);
+ return ((1.0/batch_size) * sum) + (1/2*lambda*reg);
}
float Network::accuracy()