%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.optimizers import SGD
檢查是否使用 GPU
import tensorflow as tf
tf.test.gpu_device_name()
'/device:GPU:0'
進一步知道用了什麼 GPU
!nvidia-smi -L
GPU 0: Tesla P100-PCIE-16GB (UUID: GPU-050fe9a8-960d-29be-1443-a4633f24ce6d)
from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11493376/11490434 [==============================] - 0s 0us/step 11501568/11490434 [==============================] - 0s 0us/step
x_train = x_train.reshape(60000, 28, 28, 1) / 255
x_test = x_test.reshape(10000, 28, 28, 1) / 255
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
model = Sequential()
model.add(Conv2D(16, (3,3), padding='same',
input_shape=(28,28,1),
activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(32, (3,3), padding='same',
activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (3,3), padding='same',
activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.summary()
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 28, 28, 16) 160 max_pooling2d (MaxPooling2D (None, 14, 14, 16) 0 ) conv2d_1 (Conv2D) (None, 14, 14, 32) 4640 max_pooling2d_1 (MaxPooling (None, 7, 7, 32) 0 2D) conv2d_2 (Conv2D) (None, 7, 7, 64) 18496 max_pooling2d_2 (MaxPooling (None, 3, 3, 64) 0 2D) flatten (Flatten) (None, 576) 0 dense (Dense) (None, 64) 36928 dense_1 (Dense) (None, 10) 650 ================================================================= Total params: 60,874 Trainable params: 60,874 Non-trainable params: 0 _________________________________________________________________
model.compile(loss='mse', optimizer=SGD(learning_rate=0.087),
metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=128, epochs=12)
Epoch 1/12 469/469 [==============================] - 10s 4ms/step - loss: 0.0898 - accuracy: 0.1404 Epoch 2/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0888 - accuracy: 0.3111 Epoch 3/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0865 - accuracy: 0.4274 Epoch 4/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0629 - accuracy: 0.6095 Epoch 5/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0206 - accuracy: 0.8805 Epoch 6/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0127 - accuracy: 0.9198 Epoch 7/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0101 - accuracy: 0.9357 Epoch 8/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0086 - accuracy: 0.9449 Epoch 9/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0076 - accuracy: 0.9523 Epoch 10/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0068 - accuracy: 0.9572 Epoch 11/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0062 - accuracy: 0.9607 Epoch 12/12 469/469 [==============================] - 2s 4ms/step - loss: 0.0058 - accuracy: 0.9637
<keras.callbacks.History at 0x7ff6d202db90>
y_predict = np.argmax(model.predict(x_test), axis=-1)
loss, acc = model.evaluate(x_test, y_test)
313/313 [==============================] - 1s 2ms/step - loss: 0.0058 - accuracy: 0.9605
print(f'測試資料的正確率為 {acc*100:.2f}%')
測試資料的正確率為 96.05%
def my_predict(n):
print('我可愛的 CNN 預測是', y_predict[n])
X = x_test[n].reshape(28,28)
plt.imshow(X, cmap='Greys')
from ipywidgets import interact_manual
interact_manual(my_predict, n=(0, 9999));
interactive(children=(IntSlider(value=4999, description='n', max=9999), Button(description='Run Interact', sty…
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive
%cd '/content/drive/My Drive/Colab Notebooks'
/content/drive/My Drive/Colab Notebooks
model.save('my_cnn_model')
INFO:tensorflow:Assets written to: my_cnn_model/assets