commit 509ec7150cd365ed4387be92f84b6a4090a17a9c
parent 7ecdb7cb088fe6c36d890f9bcfbaa63724dd32f2
Author: David Freifeld <freifeld.david@gmail.com>
Date: Mon, 27 Jul 2020 15:08:49 -0700
More tweaks
Diffstat:
5 files changed, 112 insertions(+), 101 deletions(-)
diff --git a/Makefile b/Makefile
@@ -20,7 +20,7 @@ debug: $(GEN_FLAGS) = -Wall -U NDEBUG
fast: CXXFLAGS += $(GEN_FLAGS) -O3
fast: compile
-faster: CXXFLAGS = -shared -std=c++17 -undefined dynamic_lookup `python3 -m pybind11 --includes` ./src/mr_bpnn_2.cpp ./src/bpnn.cpp ./src/utils.cpp mapreduce.a -liomp5 -lpthread -lm -ldl -o mrbpnn`python3-config --extension-suffix` -O3 -mavx -mfma -march=native -mfpmath=sse -fno-pic -DMKL_ILP64 -D NDEBUG
+faster: CXXFLAGS = -shared -std=c++17 -undefined dynamic_lookup `python3 -m pybind11 --includes` ./src/mr_bpnn_2.cpp ./src/bpnn.cpp ./src/utils.cpp mapreduce.a -o mrbpnn`python3-config --extension-suffix` -O3 -mavx -mfma -march=native -mfpmath=sse -fno-pic -DMKL_ILP64 -D NDEBUG
faster: compile
tradeoffs: CXXFLAGS = -shared -std=c++17 -undefined dynamic_lookup `python3 -m pybind11 --includes` ./src/mr_bpnn_2.cpp ./src/bpnn.cpp ./src/utils.cpp mapreduce.a -o mrbpnn`python3-config --extension-suffix` -O3 -mavx -mfma -march=native -mfpmath=sse -DMKL_ILP64 -qopenmp -fno-pic -qopt-calloc -qopt-prefetch -unroll-aggressive -qopt-calloc -use-intel-optimized-headers -ffast-math -no-prec-div -no-prec-sqrt -fimf-precision=low -fast-transcendentals -D NDEBUG #-qopt-report=5 -qopt-report-file=report
diff --git a/bench/benchmark.py b/bench/benchmark.py
@@ -0,0 +1,57 @@
+#
+# benchmark.py
+# Jacobian
+#
+# Created by David Freifeld
+# Copyright © 2020 David Freifeld. All rights reserved.
+#
+
+import mrbpnn
+import matplotlib.pyplot as plt
+import numpy
+import time
+
+def bench(batch_sz, layers):
+ init = time.time()
+ net = mrbpnn.Network("../data_banknote_authentication.txt", batch_sz, 0.0155, 0.03, 0, 0.9)
+ net.add_layer(4, "linear")
+ for i in range(layers):
+ net.add_layer(5, "relu")
+ net.add_layer(2, "linear")
+ net.initialize()
+ initend = time.time()
+ for i in range(50):
+ net.train()
+ end = time.time()
+ return (end-init)
+
+for i in range(1):
+ print(bench(16,1))
+
+# x = []
+# y = []
+# i = 1
+# while(i < 125):
+# print(i)
+# y.append(bench(i, 1))
+# x.append(i)
+# i+=1;
+# plt.plot(x,y, label = "Jacobian (Sequential)")
+
+# plt.plot(otherlist, [2.3994078636169434, 1.2735769748687744, 1.0030598640441895, 0.8972160816192627, 0.801548957824707, 0.752018928527832, 0.7073678970336914, 0.6857280731201172, 0.6707980632781982, 0.6421489715576172, 0.6614980697631836, 0.6403779983520508, 0.7251319885253906, 0.6796879768371582, 0.6601080894470215, 0.6711599826812744, 0.6432759761810303, 0.6491389274597168, 0.6762490272521973, 0.6859049797058105, 0.7067179679870605, 0.7142889499664307, 0.7258059978485107, 0.7868969440460205, 0.7326970100402832, 0.7365641593933105, 0.7576079368591309, 0.7772500514984131, 0.8062641620635986, 0.7768490314483643, 0.8253629207611084, 0.8264601230621338, 0.8459320068359375, 0.9670729637145996, 0.8388969898223877, 0.9129719734191895, 0.9009649753570557, 0.8916170597076416, 0.8926799297332764, 0.9171609878540039, 0.9242072105407715, 0.9534740447998047, 0.947465181350708, 0.9723358154296875, 1.018247127532959, 1.1208629608154297, 1.014026165008545, 1.034980058670044, 1.0626468658447266, 1.080394983291626, 1.0627479553222656, 1.0839190483093262, 1.0938241481781006, 1.127730131149292, 1.1265759468078613, 1.136888027191162, 1.140428066253662, 1.1712510585784912, 1.206390142440796, 1.2087180614471436, 1.4066569805145264, 1.2425589561462402, 1.280066967010498, 1.2891559600830078, 1.3243582248687744, 1.3152379989624023], label="Keras")
+# plt.legend()
+# plt.show()
+# print(y)
+
+# x = ['Keras', 'Scikit-Learn', 'Jacobian']
+# speed = [3.22842907906, 2.2518157958984375 ,0.043680644035339354]
+
+# x_pos = [i for i, _ in enumerate(x)]
+
+# plt.bar(x_pos, speed, color='green')
+# plt.ylabel("Time (s)")
+# plt.title("Average Runtime (10 trials)")
+
+# plt.xticks(x_pos, x)
+
+# plt.show()
diff --git a/bench/kerasdemo.py b/bench/kerasdemo.py
@@ -0,0 +1,54 @@
+#
+# kerasdemo.py
+# Jacobian
+#
+# Created by David Freifeld
+#
+#+-----------------------------------------------------------------------------+
+# Keras benchmark code to compare with network.
+#
+# Runs a fully connected feedforward neural network with backpropagation for 50
+# epochs, then tests on data. First layer has 4 neurons, 2 hidden layers have 5,
+# output layer has 1. All four layers use sigmoid for activation.
+#
+# Taken and loosely modified from:
+# https://machinelearningmastery.com/tutorial-first-neural-network-python-keras/
+#+-----------------------------------------------------------------------------+
+
+import time
+import numpy
+# import tensorflow
+from numpy import loadtxt
+import keras
+from keras import backend as K
+from keras.models import Sequential
+from keras.layers import Activation
+from keras.layers import Dense
+
+def kerasbench(batch_sz, layers):
+ init = time.time()
+ dataset = loadtxt('data_banknote_authentication.txt', delimiter=',')
+ X = dataset[:,0:4]
+ y = dataset[:,4]
+ 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(1, activation='linear'))
+ opt = keras.optimizers.SGD(lr=0.0155)
+ model.compile(loss='mse', optimizer=opt, metrics=['accuracy'])
+ model.fit(X, y, epochs=50, batch_size=batch_sz)
+ end = time.time()
+ return (end-init)
+
+# sum = 0
+# for i in range(10):
+# sum += kerasbench(10, 1)
+# print(sum/10)
+
+y2 = []
+y2.append(kerasbench(1, 1))
+y2.append(kerasbench(5, 1))
+y2.append(kerasbench(10, 1))
+y2.append(kerasbench(15, 1))
+print(kerasbench(16,1))
diff --git a/scripts/benchmark.py b/scripts/benchmark.py
@@ -1,44 +0,0 @@
-#
-# benchmark.py
-# Jacobian
-#
-# Created by David Freifeld
-# Copyright © 2020 David Freifeld. All rights reserved.
-#
-
-import mrbpnn
-import matplotlib.pyplot as plt
-import numpy
-import time
-
-def bench(batch_sz, layers):
- init = time.time()
- net = mrbpnn.Network("../data_banknote_authentication.txt", batch_sz, 0.0155, 0.03, 0, 0.9)
- net.add_layer(4, "linear")
- for i in range(layers):
- net.add_layer(5, "lecun_tanh")
- net.add_layer(2, "linear")
- net.initialize()
- initend = time.time()
- for i in range(50):
- net.train()
- end = time.time()
- return (end-init)
-
-for i in range(5):
- print(bench(10,1))
-
-# x = []
-# y = []
-# i = 1
-# while(i < 125):
-# print(i)
-# y.append(bench(i, 1))
-# x.append(i)
-# i+=1;
-# plt.plot(x,y, label = "Jacobian (Sequential)")
-
-# plt.plot(otherlist, [2.3994078636169434, 1.2735769748687744, 1.0030598640441895, 0.8972160816192627, 0.801548957824707, 0.752018928527832, 0.7073678970336914, 0.6857280731201172, 0.6707980632781982, 0.6421489715576172, 0.6614980697631836, 0.6403779983520508, 0.7251319885253906, 0.6796879768371582, 0.6601080894470215, 0.6711599826812744, 0.6432759761810303, 0.6491389274597168, 0.6762490272521973, 0.6859049797058105, 0.7067179679870605, 0.7142889499664307, 0.7258059978485107, 0.7868969440460205, 0.7326970100402832, 0.7365641593933105, 0.7576079368591309, 0.7772500514984131, 0.8062641620635986, 0.7768490314483643, 0.8253629207611084, 0.8264601230621338, 0.8459320068359375, 0.9670729637145996, 0.8388969898223877, 0.9129719734191895, 0.9009649753570557, 0.8916170597076416, 0.8926799297332764, 0.9171609878540039, 0.9242072105407715, 0.9534740447998047, 0.947465181350708, 0.9723358154296875, 1.018247127532959, 1.1208629608154297, 1.014026165008545, 1.034980058670044, 1.0626468658447266, 1.080394983291626, 1.0627479553222656, 1.0839190483093262, 1.0938241481781006, 1.127730131149292, 1.1265759468078613, 1.136888027191162, 1.140428066253662, 1.1712510585784912, 1.206390142440796, 1.2087180614471436, 1.4066569805145264, 1.2425589561462402, 1.280066967010498, 1.2891559600830078, 1.3243582248687744, 1.3152379989624023], label="Keras")
-# plt.legend()
-# plt.show()
-# print(y)
diff --git a/scripts/kerasdemo.py b/scripts/kerasdemo.py
@@ -1,56 +0,0 @@
-#
-# kerasdemo.py
-# Jacobian
-#
-# Created by David Freifeld
-# Copyright © 2020 David Freifeld. All rights reserved.
-#
-
-#+-----------------------------------------------------------------------------+
-# Keras benchmark code to compare with network.
-#
-# Runs a fully connected feedforward neural network with backpropagation for 50
-# epochs, then tests on data. First layer has 4 neurons, 2 hidden layers have 5,
-# output layer has 1. All four layers use sigmoid for activation.
-#
-# Taken and loosely modified from:
-# https://machinelearningmastery.com/tutorial-first-neural-network-python-keras/
-#+-----------------------------------------------------------------------------+
-
-import time
-import numpy
-# import tensorflow
-from numpy import loadtxt
-import keras
-from keras import backend as K
-from keras.models import Sequential
-from keras.layers import Activation
-from keras.layers import Dense
-
-def kerasbench(batch_sz, layers):
- init = time.time()
- dataset = loadtxt('data_banknote_authentication.txt', delimiter=',')
- X = dataset[:,0:4]
- y = dataset[:,4]
- 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(1, activation='sigmoid'))
- opt = keras.optimizers.SGD(lr=0.0155)
- model.compile(loss='mse', optimizer=opt, metrics=['accuracy'])
- model.fit(X, y, epochs=50, batch_size=batch_sz)
- end = time.time()
- return (end-init)
-
-# sum = 0
-# for i in range(10):
-# sum += kerasbench(10, 1)
-# print(sum/10)
-
-y2 = []
-y2.append(kerasbench(1, 1))
-y2.append(kerasbench(5, 1))
-y2.append(kerasbench(10, 1))
-y2.append(kerasbench(15, 1))
-print(y2)