撰寫第一支神經網路程式
利用 Keras 辨識 MNIST手寫數字資料集
Date: 2019/12/28 | Lecturer: Chia
目次
-
安裝深度學習套件
-
MNIST手寫數字資料集
-
五個步驟
-
載入資料
-
建構神經網路架構
-
資料預處理
-
模型訓練
-
評估測試正確率
-
安裝深度學習套件
$ pip install keras
$ pip install tensorflow
- Keras 可說是「最適合初學者」的深度學習套件!
- 其底層的深度學習計算,可使用
- TensorFlow
- Theano
- 其底層的深度學習計算,可使用
安裝深度學習套件
- Keras 優點:
- 內建常用的類神經網路元件。
- 用最少的程式碼,建構複雜的深度學習網路架構。
- Keras 缺點:
- 為了同時與Theano及TensorFlow相容,會損失一些對網路架構的自由度,且沒辦法使用到底層套件的全部功能。
MNIST手寫數字資料集
$ pip install matplotlib
# A_Neural_Network_keras.py
from keras.datasets import mnist
import matplotlib.pyplot as plt
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
plt.imshow(train_images[0], cmap=plt.cm.binary)
plt.show()
print(train_labels[0])
MNIST手寫數字資料集
(補充) MNIST手寫數字資料集
# mnist_subplot.py
from keras.datasets import mnist
import matplotlib.pyplot as plt
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
plt.subplot(1, 4, 1)
plt.imshow(train_images[0], cmap=plt.cm.binary)
plt.subplot(1, 4, 2)
plt.imshow(train_images[1], cmap=plt.cm.binary)
plt.subplot(1, 4, 3)
plt.imshow(train_images[2], cmap=plt.cm.binary)
plt.subplot(1, 4, 4)
plt.imshow(train_images[3], cmap=plt.cm.binary)
plt.show()
五個步驟
1. 載入資料
- x:圖片
- y:標籤
- train:訓練集
- test:測試集
用來訓練模型
對模型進行測試
五個步驟
2. 建構神經網路架構
3. 資料預處理
訓練集 & 測試集
轉換為神經網路能夠處理的形式
4. 模型訓練
學習把圖片加以歸類
訓練集圖片
五個步驟
5. 評估測試正確率
測試集圖片
預測出來的數字
測試集標籤
五個步驟 - 1. 載入資料
# A_Neural_Network_keras.py
from keras.datasets import mnist
from keras import models
from keras import layers
from keras.utils import to_categorical
匯入所需套件
五個步驟 - 1. 載入資料
# A_Neural_Network_keras.py
# ...
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
print(train_labels[0], test_labels[0])
# 5 7
載入MNIST
五個步驟 - 2. 建構神經網路架構
relu
softmax
Activation Function
激勵函數
五個步驟 - 2. 建構神經網路架構
# A_Neural_Network_keras.py
# ...
network = models.Sequential()
#激勵函數:relu, softmax
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))
# 編譯
network.compile(optimizer='rmsprop', #優化器
loss='categorical_crossentropy', #損失函數
metrics=['accuracy']) #評量準則
建構神經網路架構
五個步驟 - 3. 資料預處理
# A_Neural_Network_keras.py
# ...
# 訓練集 & 測試集 轉換為神經網路能夠處理的形式
# 並縮放到所有值都在 [0, 1] 區間 (除以255)
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255
資料預處理
五個步驟 - 3. 資料預處理
- One-hot encoding 編碼邏輯
- 將類別拆成多個行。
- 任意維度的向量中,僅一個維度的值是1,其餘爲0。
五個步驟 - 3. 資料預處理
# A_Neural_Network_keras.py
# ...
# 對標籤進行分類編碼(One-hot encoding) => 目標:預測數字
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
print(train_labels[0], test_labels[0])
# [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
One-hot encoding
五個步驟 - 4. 模型訓練
# A_Neural_Network_keras.py
# ...
# epochs:表示訓練遍數
# batch_size:表示每次餵給網路的資料數目
network.fit(train_images, train_labels, epochs=5, batch_size=128)
模型訓練
五個步驟 - 5. 評估測試正確率
# A_Neural_Network_keras.py
# ...
# 檢測在測試集上的正確率
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('測試正確率:', test_acc)
評估測試正確率
五個步驟 - 5. 評估測試正確率
Reference
- François Chollet, (2019/05/31), Deep learning 深度學習必讀:Keras 大神帶你用 Python 實作.
- François Chollet, (2019/05/31), A first look at a neural network. Retrieved from https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/2.1-a-first-look-at-a-neural-network.ipynb
- 周秉誼, (2016/12/20), Deep Learning 開發及常用套件介紹. Retrieved from http://www.cc.ntu.edu.tw/chinese/epaper/0039/20161220_3910.html
Reference
- CH.Tseng, (2017/09/23), 學習使用Keras建立卷積神經網路. Retrieved from https://chtseng.wordpress.com/2017/09/23/%E5%AD%B8%E7%BF%92%E4%BD%BF%E7%94%A8keras%E5%BB%BA%E7%AB%8B%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF/
- mikechenx, (2017/12/13), Day 03:Neural Network 的概念探討. Retrieved from https://ithelp.ithome.com.tw/users/20001976/ironman
- 國家實驗研究院, (2017/08/01), TensorFlow 基礎篇〈下〉. Retrieved from http://fgc.stpi.narl.org.tw/activity/videoDetail/4b1141305d9cd231015d9d08fb62002d
Supplement
Thanks for listening.
建構一個類神經網路
By BessyHuang
建構一個類神經網路
- 538