commit 3bb4bedeb5f12db6543c126a8461df61d0522c17
parent 99e8e1dfc3da45d728e0bec83fc6212b3708d47c
Author: David Freifeld <freifeld.david@gmail.com>
Date: Mon, 18 Jan 2021 14:19:55 -0800
Minor debugging edits
Diffstat:
5 files changed, 19 insertions(+), 46 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
@@ -18,10 +18,10 @@ elseif (FASTER)
elseif (TRADEOFFS)
set(COMPILE_FLAGS "${COMPILE_FLAGS} -mavx -O3 -mavx -msse2 -msse3 -march=native -mfpmath=sse -DMKL_ILP64 -fno-pic -ffast-math -ffast-math")
elseif (RECKLESS)
- set(COMPILE_FLAGS "${COMPILE_FLAGS} -mavx -O3 -mavx -msse2 -msse3 -march=native -mfpmath=sse -DMKL_ILP64 -fno-pic -ffast-math -D NDEBUG -ffast-math -D RECKLESS")
+ set(COMPILE_FLAGS "${COMPILE_FLAGS} -mavx -O3 -mavx -msse2 -msse3 -march=native -mfpmath=sse -DMKL_ILP64 -fno-pic -D NDEBUG -ffast-math -D RECKLESS")
endif()
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILE_FLAGS} -w -llz4")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILE_FLAGS} -fPIE")
# if (PYTHON)
# project(jacobian)
diff --git a/bench/kerasdemo.py b/bench/kerasdemo.py
@@ -17,7 +17,6 @@
import time
import numpy
-import matplotlib.pyplot as plt
# import tensorflow
from numpy import loadtxt
import keras
@@ -26,7 +25,7 @@ from keras.models import Sequential
from keras.layers import Activation
from keras.layers import Dense
-def kerasbench(batch_sz, layers):
+def kerasbench(batch_sz, layers, epochs):
init = time.time()
dataset = loadtxt('data_banknote_authentication.txt', delimiter=',')
X = dataset[:,0:4]
@@ -34,21 +33,16 @@ def kerasbench(batch_sz, layers):
model = Sequential()
model.add(Dense(4, input_dim=4, activation='linear'))
for i in range(layers):
- model.add(Dense(5, activation='relu'))
+ model.add(Dense(5, activation='sigmoid'))
model.add(Dense(1, activation='linear'))
opt = keras.optimizers.SGD(lr=0.0155)
model.compile(loss='mse', optimizer=opt, metrics=['accuracy'])
- history = model.fit(X, y, epochs=50, validation_split=0.1, batch_size=batch_sz)
+ history = model.fit(X, y, epochs=epochs, validation_split=0.1, batch_size=batch_sz)
end = time.time()
print(history.history['loss'])
print(history.history['acc'])
print(history.history['val_loss'])
print(history.history['val_acc'])
return (end-init)
-
-# sum = 0
-# for i in range(10):
-# sum += kerasbench(10, 1)
-# print(sum/10)
-print(kerasbench(16,1))
+print(kerasbench(10,1,50))
diff --git a/bench/scikit.py b/bench/scikit.py
@@ -4,7 +4,7 @@ import matplotlib.pyplot as plt
import time
import numpy as np
-def bench(batch_sz):
+def bench(batch_sz, layers, layer_size, epochs, lr):
start = time.time()
with open("./data_banknote_authentication.txt", 'rt') as f:
reader = csv.reader(f)
@@ -19,25 +19,17 @@ def bench(batch_sz):
X_train.append(i[:-1])
y_train.append(i[-1])
- clf = MLPClassifier(solver="sgd", momentum=0, learning_rate_init=0.0155, batch_size=batch_sz, max_iter=1, hidden_layer_sizes=(5), warm_start=True)
- accuracy = []
+ clf = MLPClassifier(solver="sgd", momentum=0, learning_rate_init=lr, batch_size=batch_sz, max_iter=1, hidden_layer_sizes=(layer_size), warm_start=True)
+ accuracy = []1p
for i in range(50):
clf.fit(X_train, y_train)
- accuracy.append(clf.score(X_train,y_train))
+ #accuracy.append(clf.score(X_train,y_train))
end = time.time()
- print(clf.loss_curve_)
+ #print(clf.loss_curve_)
#print(clf.validation_scores_)
- print(accuracy)
- print(len(clf.loss_curve_), len(accuracy))
+ #print(accuracy)
+ #print(len(clf.loss_curve_), len(accuracy))
return end-start
-# i = 1
-# while (i < 1343):
-# times = []
-# times.append(bench(i))
-# print("Finished loop %s in %s s." %(i, times[-1]))
-# if (i == 1): i += 9
-# else: i += 10
-# print(times)
print(bench(16))
diff --git a/example.cpp b/example.cpp
@@ -12,19 +12,19 @@
#include "./src/bpnn.hpp"
#include "./src/utils.hpp"
-#include "./checks.cpp"
#include "unistd.h"
#include <ctime>
+#include <chrono>
double bench(int batch_sz, int epochs)
{
auto start = std::chrono::high_resolution_clock::now();
Network net ("./data_banknote_authentication.txt", batch_sz, 0.0155, 0.03, L2, 0, 0.9);
net.add_layer(4, "linear", linear, linear_deriv);
- net.add_layer(5, "lecun_tanh", lecun_tanh, lecun_tanh_deriv);
+ net.add_layer(5, "lecun", lecun_tanh, lecun_tanh_deriv);
net.add_layer(2, "linear", linear, linear_deriv);
net.initialize();
- for (int i = 0; i < epochs; i++) {
+ for (int i = 0; i < epochs; i++) {
net.train();
}
auto end = std::chrono::high_resolution_clock::now();
@@ -37,20 +37,8 @@ int main(int argc, char** argv)
std::cout << "Invalid command! Either pass a special option or pass two integers - batch_size and epochs (in that order)." << "\n";
exit(1);
}
- else if (strcmp(argv[1], "basic-checks") == 0) {
- basic_checks();
- }
- else if (strcmp(argv[1], "sanity-checks") == 0) {
- sanity_checks();
- }
- else if (strcmp(argv[1], "grad-checks") == 0) {
- grad_checks();
- }
- else if (argc < 3) {
- std::cout << "Invalid command! Either pass a special option or pass two integers - batch_size and epochs (in that order)." << "\n";
- exit(1);
- }
else {
+ sleep(strtol(argv[3], NULL, 10));
std::cout << bench(strtol(argv[1], NULL, 10), strtol(argv[2], NULL, 10)) << "\n";
}
}
diff --git a/src/bpnn.cpp b/src/bpnn.cpp
@@ -37,7 +37,7 @@ void Layer::init_weights(Layer next)
std::normal_distribution<float> d(0,sqrt(1.0/n));
for (int i = 0; i < (weights->rows()*weights->cols()); i++) {
std::random_device rd;
- std::mt19937 gen(rd());
+ std::mt19937 gen(rd());
(*weights)(static_cast<int>(i / nodes), i%nodes) = d(gen);
(*v)(static_cast<int>(i / nodes), i%nodes) = 0;
(*m)(static_cast<int>(i / nodes), i%nodes) = 0;
@@ -225,7 +225,7 @@ Eigen::MatrixXf Network::backpropagate()
update(deltas, i);
if (reg_type == L2) *layers[length-2-i].weights -= ((lambda/batch_size) * (*layers[length-2-i].weights));
else if (reg_type == L1) *layers[length-2-i].weights -= ((lambda/(2*batch_size)) * l1_deriv(*layers[length-2-i].weights));
- *layers[length-1-i].bias -= bias_lr * gradients[i];
+ *layers[length-1-i].bias -= bias_lr * gradients[i];
}
return gradients.back();
}
@@ -254,7 +254,6 @@ void Network::train()
float cost_sum = 0;
float acc_sum = 0;
for (int i = 0; i <= instances-batch_size; i+=batch_size) {
- if (early_stop == true && get_val_cost() < threshold) return;
if (i != instances-batch_size) next_batch(data);
feedforward();
backpropagate();