# My Mnist CNN (Convolution layerの特徴マップは5個)
# Conv2D - ReLU - MaxPooling - Dence - ReLU - Dence
# 2018/05/25 by marsee
# Keras / Tensorflowで始めるディープラーニング入門 https://qiita.com/yampy/items/706d44417c433e68db0d
# のPythonコードを再利用させて頂いている
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D, Activation
from keras import backend as K
batch_size = 128
num_classes = 10
epochs = 12
img_rows, img_cols = 28, 28
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#Kerasのバックエンドで動くTensorFlowとTheanoでは入力チャンネルの順番が違うので場合分けして書いています
if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
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)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
y_train = y_train.astype('int32')
y_test = y_test.astype('int32')
y_train = keras.utils.np_utils.to_categorical(y_train, num_classes)
y_test = keras.utils.np_utils.to_categorical(y_test, num_classes)
model = Sequential()
model.add(Conv2D(10, kernel_size=(5, 5),
input_shape=input_shape))
model.add(Activation(activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(100))
model.add(Activation(activation='relu'))
model.add(Dense(num_classes))
model.add(Activation(activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs,
verbose=1, validation_data=(x_test, y_test))
('x_train shape:', (60000, 28, 28, 1))
(60000, 'train samples')
(10000, 'test samples')
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
60000/60000 [==============================] - 12s 201us/step - loss: 0.2579 - acc: 0.9231 - val_loss: 0.0840 - val_acc: 0.9733
Epoch 2/12
60000/60000 [==============================] - 12s 201us/step - loss: 0.0785 - acc: 0.9762 - val_loss: 0.0564 - val_acc: 0.9819
Epoch 3/12
60000/60000 [==============================] - 12s 192us/step - loss: 0.0545 - acc: 0.9834 - val_loss: 0.0492 - val_acc: 0.9838
Epoch 4/12
60000/60000 [==============================] - 13s 210us/step - loss: 0.0425 - acc: 0.9869 - val_loss: 0.0442 - val_acc: 0.9862
Epoch 5/12
60000/60000 [==============================] - 12s 196us/step - loss: 0.0340 - acc: 0.9898 - val_loss: 0.0396 - val_acc: 0.9875
Epoch 6/12
60000/60000 [==============================] - 12s 198us/step - loss: 0.0284 - acc: 0.9915 - val_loss: 0.0382 - val_acc: 0.9874
Epoch 7/12
60000/60000 [==============================] - 11s 191us/step - loss: 0.0243 - acc: 0.9928 - val_loss: 0.0340 - val_acc: 0.9886
Epoch 8/12
60000/60000 [==============================] - 11s 189us/step - loss: 0.0206 - acc: 0.9937 - val_loss: 0.0371 - val_acc: 0.9878
Epoch 9/12
60000/60000 [==============================] - 12s 199us/step - loss: 0.0167 - acc: 0.9949 - val_loss: 0.0312 - val_acc: 0.9897
Epoch 10/12
60000/60000 [==============================] - 12s 195us/step - loss: 0.0146 - acc: 0.9954 - val_loss: 0.0317 - val_acc: 0.9896
Epoch 11/12
60000/60000 [==============================] - 11s 188us/step - loss: 0.0121 - acc: 0.9963 - val_loss: 0.0344 - val_acc: 0.9892
Epoch 12/12
60000/60000 [==============================] - 12s 205us/step - loss: 0.0103 - acc: 0.9970 - val_loss: 0.0320 - val_acc: 0.9898
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | - | - | - | - | - | - |