10 KiB
10 KiB
In [5]:
import matplotlib
%matplotlib inline
matplotlib.rcParams['figure.figsize'] = (20, 10)
matplotlib.rcParams['font.size'] = 24
matplotlib.rcParams['lines.linewidth'] = 5
matplotlib.rcParams['lines.markersize'] = 20
import tensorflow as tf
from tensorflow.python.client import device_lib
import time
import numpy as np
from matplotlib import pyplot
from collections import defaultdict
from ipy_table import make_table, set_row_style, set_column_style
from jupyter_progressbar import ProgressBar
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Activation
from keras.optimizers import SGD, Adam
from keras.layers import Dense, Dropout, Flatten
from keras.regularizers import l1, l2
from keras import regularizers
import numpy
import pickle
import tensorflow as tfIn [6]:
devices = device_lib.list_local_devices()
make_table([["name", "type"]] + [
[device.name, device.device_type]
for device in devices
])
set_row_style(0, bold=True)Out [6]:
| name | type |
| /device:CPU:0 | CPU |
| /device:GPU:0 | GPU |
In [11]:
results = defaultdict(dict)
for device in devices:
with tf.device(device.name):
with open("CatsAndDogs.pickle", 'rb') as f:
data = pickle.load(f)
X = data["dataset"]
y = data["labels"]
del data
(X_train, X_test, y_train, y_test) = train_test_split(
X, y, test_size = 0.25, random_state = 42)
model = Sequential()
model.add(Flatten(input_shape=X_train.shape[1:]))
model.add(Dense(768, kernel_initializer="uniform", activation="relu"))
model.add(Dropout(0.2))
model.add(Dense(384, kernel_initializer="uniform", activation="relu"))
model.add(Dropout(0.2))
model.add(Dense(128, kernel_initializer="uniform", activation="relu"))
model.add(Dropout(0.2))
model.add(Dense(2, activation="softmax"))
model.compile(loss="binary_crossentropy", optimizer=Adam(lr=0.001), metrics=["accuracy"])
t0 = time.time()
model.fit(X_train, y_train, validation_split=0.25, epochs=5, batch_size=128, verbose=0)
t1 = time.time()
(loss, accuracy) = model.evaluate(X_test, y_test, verbose=0)
t2 = time.time()
results[device.name]['training'] = t1 - t0
results[device.name]['evaluating'] = t2 - t16250/6250 [==============================] - 1s 167us/step 6250/6250 [==============================] - 0s 60us/step
In [12]:
make_table([["device", "execution time (s) training", "execution time (s) evaluating"]] + [
[device, result['training'], result['evaluating']]
for device, result in results.items()
])
set_column_style(0, bold=True, align='right')
set_row_style(0, bold=True, align='right')Out [12]:
| device | execution time (s) training | execution time (s) evaluating |
| /device:GPU:0 | 8.3381 | 0.3781 |
| /device:CPU:0 | 38.5678 | 1.0451 |