jacobian

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

commit 3bb4bedeb5f12db6543c126a8461df61d0522c17
parent 99e8e1dfc3da45d728e0bec83fc6212b3708d47c
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Mon, 18 Jan 2021 14:19:55 -0800

Minor debugging edits

Diffstat:
MCMakeLists.txt | 4++--
Mbench/kerasdemo.py | 14++++----------
Mbench/scikit.py | 22+++++++---------------
Mexample.cpp | 20++++----------------
Msrc/bpnn.cpp | 5++---
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();