Created
October 22, 2018 08:34
-
-
Save fredriccliver/d5bac7db0a7abc5e8bc01eb2affa5e2d to your computer and use it in GitHub Desktop.
mnist
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import warnings | |
warnings.simplefilter(action='ignore', category=FutureWarning) | |
import sys | |
import tensorflow as tf | |
import keras | |
from keras.models import Sequential | |
from keras.layers import Dense, Dropout, Flatten | |
from keras.layers.convolutional import Conv2D, MaxPooling2D | |
import numpy as np | |
np.random.seed(7) | |
print('Python version : ', sys.version) | |
print('TensorFlow version : ', tf.__version__) | |
print('Keras version : ', keras.__version__) | |
img_rows = 28 | |
img_cols = 28 | |
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() | |
input_shape = (img_rows, img_cols, 1) | |
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) | |
x_train = x_train.astype('float32') / 255. | |
x_test = x_test.astype('float32') / 255. | |
print('x_train shape:', x_train.shape) | |
print(x_train.shape[0], 'train samples') | |
print(x_test.shape[0], 'test samples') | |
batch_size = 128 | |
num_classes = 10 | |
epochs = 12 | |
y_train = keras.utils.to_categorical(y_train, num_classes) | |
y_test = keras.utils.to_categorical(y_test, num_classes) | |
model = Sequential() | |
model.add(Conv2D(32, kernel_size=(5, 5), strides=(1, 1), padding='same', | |
activation='relu', | |
input_shape=input_shape)) | |
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) | |
model.add(Conv2D(64, (2, 2), activation='relu', padding='same')) | |
model.add(MaxPooling2D(pool_size=(2, 2))) | |
model.add(Dropout(0.25)) | |
model.add(Flatten()) | |
model.add(Dense(1000, activation='relu')) | |
model.add(Dropout(0.5)) | |
model.add(Dense(num_classes, activation='softmax')) | |
model.summary() | |
from IPython.display import SVG | |
from keras.utils.vis_utils import model_to_dot | |
%matplotlib inline | |
SVG(model_to_dot(model, show_shapes=True).create(prog='dot', format='svg')) | |
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) | |
hist = model.fit(x_train, y_train, | |
batch_size=batch_size, | |
epochs=epochs, | |
verbose=1, | |
validation_data=(x_test, y_test)) | |
score = model.evaluate(x_test, y_test, verbose=0) | |
print('Test loss:', score[0]) | |
print('Test accuracy:', score[1]) | |
n = 0 | |
plt.imshow(x_test[n].reshape(28, 28), cmap='Greys', interpolation='nearest') | |
plt.show() | |
print('The Answer is ', model.predict_classes(x_test[n].reshape((1, 28, 28, 1)))) | |
import random | |
predicted_result = model.predict(x_test) | |
predicted_labels = np.argmax(predicted_result, axis=1) | |
test_labels = np.argmax(y_test, axis=1) | |
wrong_result = [] | |
for n in range(0, len(test_labels)): | |
if predicted_labels[n] != test_labels[n]: | |
wrong_result.append(n) | |
samples = random.choices(population=wrong_result, k=16) | |
count = 0 | |
nrows = ncols = 4 | |
plt.figure(figsize=(12,8)) | |
for n in samples: | |
count += 1 | |
plt.subplot(nrows, ncols, count) | |
plt.imshow(x_test[n].reshape(28, 28), cmap='Greys', interpolation='nearest') | |
tmp = "Label:" + str(test_labels[n]) + ", Prediction:" + str(predicted_labels[n]) | |
plt.title(tmp) | |
plt.tight_layout() | |
plt.show() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment