GitHub repo: bit.ly/pybay-keras
In [84]:
reset -fs
In [85]:
import keras
In [86]:
# What is the backend / execution engine?
In [87]:
keras.backend.backend()
Out[87]:
"An open-source software library for Machine Intelligence"
Numerical computation using data flow graphs.
In [88]:
# Import data
In [89]:
from keras.datasets import mnist
In [90]:
# Setup train and test splits
In [91]:
(x_train, y_train), (x_test, y_test) = mnist.load_data()
In [92]:
from random import randint
from matplotlib import pyplot
%matplotlib inline
In [93]:
pyplot.imshow(x_train[randint(0, x_train.shape[0])], cmap='gray_r');
In [94]:
# Munge Data
# Transform from matrix to vector, cast, and normalize
In [95]:
image_size = 784 # 28 x 28
x_train = x_train.reshape(x_train.shape[0], image_size) # Transform from matrix to vector
x_train = x_train.astype('float32') # Cast as 32 bit integers
x_train /= 255 # Normalize inputs from 0-255 to 0.0-1.0
x_test = x_test.reshape(x_test.shape[0], image_size) # Transform from matrix to vector
x_test = x_test.astype('float32') # Cast as 32 bit integers
x_test /= 255 # Normalize inputs from 0-255 to 0.0-1.0
In [96]:
# Convert class vectors to binary class matrices
In [97]:
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
In [98]:
# Import the most common type of neural network
In [99]:
from keras.models import Sequential
RTFM - https://keras.io/layers/
In [100]:
# Define model instance
In [101]:
model = Sequential()
In [102]:
# Import the most common type of network layer, fully interconnected
In [103]:
from keras.layers import Dense
In [104]:
# Define input layer
In [105]:
layer_input = Dense(units=512, # Number of nodes
activation='sigmoid', # The nonlinearity
input_shape=(image_size,))
model.add(layer_input)
In [106]:
# Define another layer
In [107]:
model.add(Dense(units=512, activation='sigmoid'))
In [108]:
# Define output layers
In [109]:
layer_output = Dense(units=10, # Number of digits (0-9)
activation='softmax') # Convert neural activation to probability of category
model.add(layer_output)
In [110]:
# Print summary
In [111]:
model.summary()
In [112]:
# Yes - we compile the model to run it
In [113]:
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
In [114]:
# Train the model
In [115]:
training = model.fit(x_train,
y_train,
epochs=5, # Number of passes over complete dataset
verbose=True,
validation_split=0.1)
In [116]:
# Let's see how well our model performs
In [117]:
loss, accuracy = model.evaluate(x_test,
y_test,
verbose=True)
print(f"Test loss: {loss:.3}")
print(f"Test accuracy: {accuracy:.3%}")
In [118]:
# reset -fs
In [119]:
# from keras import *
In [120]:
# whos
In [121]:
# from keras.datasets import fashion_mnist
In [122]:
# # Setup train and test splits
# (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
In [123]:
# from random import randint
# from matplotlib import pyplot
# %matplotlib inline
In [124]:
# pyplot.imshow(x_train[randint(0, x_train.shape[0])], cmap='gray_r');
In [125]:
# # Define CNN model
# # Redefine input dimensions to make sure conv works
# img_rows, img_cols = 28, 28
# x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
# x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
# input_shape = (img_rows, img_cols, 1)
In [126]:
# import keras
In [127]:
# # Convert class vectors to binary class matrices
# y_train = keras.utils.to_categorical(y_train, 10)
# y_test = keras.utils.to_categorical(y_test, 10)
In [128]:
# from keras.layers import Conv2D, Dense, Flatten, MaxPooling2D
In [129]:
# # Define model
# model = Sequential()
# model.add(Conv2D(32,
# kernel_size=(3, 3),
# activation='sigmoid',
# input_shape=input_shape))
# model.add(Conv2D(64, (3, 3), activation='sigmoid'))
# model.add(MaxPooling2D(pool_size=(2, 2)))
# model.add(Flatten())
# model.add(Dense(128, activation='sigmoid'))
# model.add(Dense(10, activation='softmax'))
In [130]:
# model.compile(loss='categorical_crossentropy',
# optimizer='adam',
# metrics=['accuracy'])
In [131]:
# # Define training
# training = model.fit(x_train,
# y_train,
# epochs=5,
# verbose=True,
# validation_split=0.1)
In [132]:
# loss, accuracy = model.evaluate(x_test,
# y_test,
# verbose=True)
# print(f"Test loss: {loss:.3}")
# print(f"Test accuracy: {accuracy:.3%}")
It is a reference to a literary image from ancient Greek and Latin literature.
First found in the Odyssey, where dream spirits (Oneiroi, singular Oneiros) are divided between those who deceive men with false visions, who arrive to Earth through a gate of ivory, and those who announce a future that will come to pass, who arrive through a gate of horn.
It's a play on the words κέρας (horn) / κραίνω (fulfill), and ἐλέφας (ivory) / ἐλεφαίρομαι (deceive).