commit a92faf16c14b08ff92066b0630f71474b9fbe3a1
parent 6338610c6f712a734ba91b882cb214ffcbf3035d
Author: David Freifeld <freifeld.david@gmail.com>
Date: Wed, 15 Jul 2020 12:49:27 -0700
Large bugfix + much better accuracy
Diffstat:
2 files changed, 10 insertions(+), 16 deletions(-)
diff --git a/example.cpp b/example.cpp
@@ -14,7 +14,7 @@
double bench(int batch_sz)
{
auto start = std::chrono::high_resolution_clock::now();
- Network net ("./data_banknote_authentication.txt", batch_sz, 0.0155, 0.03, 0, 0.9);
+ Network net ("./data_banknote_authentication.txt", batch_sz, 0.1, 0.03, 0, 0.9);
net.add_layer(4, "linear");
net.add_layer(6, "lecun_tanh");
net.add_layer(2, "linear");
@@ -41,7 +41,6 @@ double bench(int batch_sz)
int main()
{
- // sleep(30);
std::cout << bench(16) << "\n";
// bench(50);
// bench(50);
diff --git a/src/bpnn.cpp b/src/bpnn.cpp
@@ -146,21 +146,7 @@ void Network::set_activation(int index, std::function<float(float)> custom, std:
void Network::feedforward()
{
- for (int j = 0; j < layers[0].contents->rows(); j++) {
- if (strcmp(layers[0].activation_str, "linear") == 0) break;
- for (int k = 0; k < layers[0].contents->cols(); k++) {
- (*layers[0].dZ)(j,k) = layers[0].activation_deriv((*layers[0].contents)(j,k));
- (*layers[0].contents)(j,k) = layers[0].activation((*layers[0].contents)(j,k));
- }
- }
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));
- //}
- *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++) {
for (int j = 0; j < layers[i].contents->rows(); j++) {
if (strcmp(layers[i].activation_str, "linear") == 0) break;
for (int k = 0; k < layers[i].contents->cols(); k++) {
@@ -168,6 +154,15 @@ void Network::feedforward()
(*layers[i].contents)(j,k) = layers[i].activation((*layers[i].contents)(j,k));
}
}
+ *layers[i+1].contents = (*layers[i].contents) * (*layers[i].weights);
+ *layers[i+1].contents += *layers[i+1].bias;
+ }
+ for (int j = 0; j < layers[length-1].contents->rows(); j++) {
+ if (strcmp(layers[length-1].activation_str, "linear") == 0) break;
+ for (int k = 0; k < layers[length-1].contents->cols(); k++) {
+ (*layers[length-1].dZ)(j,k) = layers[length-1].activation_deriv((*layers[length-1].contents)(j,k));
+ (*layers[length-1].contents)(j,k) = layers[length-1].activation((*layers[length-1].contents)(j,k));
+ }
}
// std::cout << "\nSOFTMAX INPUT\n" << *layers[length-1].contents << "\n\n";
for (int i = 0; i < layers[length-1].contents->rows(); i++) {