用tensorflow2實現mnist手寫數字識別
1.匯入依賴包
將tensorflow和numpy匯入
from tensorflow import keras
from tensorflow.keras.layers import Flatten, Dense
import numpy as np
2.載入資料集
使用tensorflow內建的mnist資料集,返回訓練集圖片、訓練集標籤、測試集圖片、測試集標籤
(train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data()
3.對圖片進行歸一化
圖片每個畫素的數值都是在[0, 255]之間,所以歸一化要除以255,資料要是浮點數,所以要新增一個小數點
train_images, test_images = train_images / 255.0, test_images / 255.0
4.定義模型
搭建一個順序模型,第一層先將資料展平,原始圖片是28x28的灰度圖,所以輸入尺寸是(28,28),第二層節點數可以自己選擇一個合適值,這裡用128個節點,啟用函式用relu,第三層有多少個種類就寫多少,[0, 9]一共有10個數字,所以必須寫10,啟用函式用softmax
model = keras.Sequential([
Flatten(input_shape=(28, 28)),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
])
5.指定最佳化器、損失函式、評價指標
最佳化器使用adam,損失函式使用交叉熵損失函式,評價指標用準確率
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['acc'])
6.訓練模型
將訓練集輸入模型進行訓練,一共訓練10次
model.fit(train_images, train_labels, epochs=10)
Epoch 1/101875/1875 [==============================] - 3s 2ms/step - loss: 0.2575 - acc: 0.9261Epoch 2/101875/1875 [==============================] - 3s 2ms/step - loss: 0.1135 - acc: 0.9661Epoch 3/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0776 - acc: 0.9764Epoch 4/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0589 - acc: 0.9818Epoch 5/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0452 - acc: 0.9861Epoch 6/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0371 - acc: 0.9890Epoch 7/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0279 - acc: 0.9912Epoch 8/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0226 - acc: 0.9932Epoch 9/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0203 - acc: 0.9935Epoch 10/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0153 - acc: 0.9954
Out[6]:
<tensorflow.python.keras.callbacks.History at 0x24ecdc1c460>
7.用測試集驗證模型效果
用測試集去驗證訓練好的模型,日誌等級設定為2
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('Test acc:', test_acc)
313/313 - 0s - loss: 0.0845 - acc: 0.9791Test acc: 0.9790999889373779
8.將圖片輸入模型,返回預測結果
將測試集中的第一張圖片輸入模型,看是哪個數字的機率最大,並輸出真實值
predictions = model.predict(test_images)
print('預測值:', np.argmax(predictions[0]))
print('真實值:', test_labels[0])
預測值: 7真實值: 7
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978904/viewspace-2733646/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Pytorch搭建MyNet實現MNIST手寫數字識別PyTorch
- 在PaddlePaddle上實現MNIST手寫體數字識別
- Tensorflow2.0-mnist手寫數字識別示例
- TensorFlow.NET機器學習入門【5】採用神經網路實現手寫數字識別(MNIST)機器學習神經網路
- 程式碼實現(機器學習識別手寫數字)機器學習
- Tensorflow實現RNN(LSTM)手寫數字識別RNN
- 機器學習:scikit-learn實現手寫數字識別機器學習
- OpenCV + sklearnSVM 實現手寫數字分割和識別OpenCV
- 深度學習例項之基於mnist的手寫數字識別深度學習
- 深度學習實驗:Softmax實現手寫數字識別深度學習
- 【機器學習】手寫數字識別機器學習
- 【Get】用深度學習識別手寫數字深度學習
- CNN實現手寫數字識別並改變引數進行分析CNN
- mnist手寫數字識別——深度學習入門專案(tensorflow+keras+Sequential模型)深度學習Keras模型
- 機器學習之神經網路識別手寫數字(純python實現)機器學習神經網路Python
- tensorflow.js 手寫數字識別JS
- KNN 演算法-實戰篇-如何識別手寫數字KNN演算法
- 瀏覽器中的手寫數字識別瀏覽器
- 使用神經網路識別手寫數字神經網路
- Spark學習筆記——手寫數字識別Spark筆記
- 一個單層的基礎神經網路實現手寫數字識別神經網路
- 學習Pytorch+Python之MNIST手寫字型識別PyTorchPython
- 手把手教你使用LabVIEW OpenCV DNN實現手寫數字識別(含原始碼)ViewOpenCVDNN原始碼
- 基於 keras-js 快速實現瀏覽器內的 CNN 手寫數字識別KerasJS瀏覽器CNN
- TensorFlow系列專題(六):實戰專案Mnist手寫資料集識別
- 使用TensorFlow實現手寫識別(Softmax)
- 手寫數字圖片識別-全連線網路
- 計算機視覺—CNN識別手寫數字(11)計算機視覺CNN
- 計算機視覺—kNN識別手寫數字(10)計算機視覺KNN
- 【Keras篇】---Keras初始,兩種模型構造方法,利用keras實現手寫數字體識別Keras模型構造方法
- 手寫數字圖片識別-卷積神經網路卷積神經網路
- 《手寫數字識別》神經網路 學習筆記神經網路筆記
- 基於PyTorch框架的多層全連線神經網路實現MNIST手寫數字分類PyTorch框架神經網路
- 【TensorFlow篇】--Tensorflow框架實現SoftMax模型識別手寫數字集框架模型
- matlab練習程式(神經網路識別mnist手寫資料集)Matlab神經網路
- 卷積神經網路初探——LeNet-5的原理與手寫數字識別的實現卷積神經網路
- 實戰四:手把手教你實現數字識別
- 全棧AI工程師指南,DIY一個識別手寫數字的web應用全棧AI工程師Web