Tensorflow2.1實現Fashion圖像分類示例詳解
實現思路和詳細解讀
1. 獲取 Fashion 數據、處理數據
(1)本次實踐項目用到的是 Fashion 數據集,包含 10 個類別的服飾灰度圖片,共 70000 張,每張圖片展示一件衣物,每張圖片都是低分辨率的 28x28 像素(其實就是28*28的整數矩陣)。部分效果如下:
本次實踐中我們對數據集進行訓練集和測試集的劃分,使用 60000 張圖片來訓練模型,使用 10000 張圖片來評估模型對服飾圖片的分類的準確程度。
直接通過 tensorflow 內置的接口函數從網絡上下載數據集,其中 (train_images, train_labels) 分別是訓練集中的圖片和標簽,(test_images, test_labels) 分別是測試集中的圖片和標簽。
fashion = tf.keras.datasets.fashion_mnist (train_images, train_labels), (test_images, test_labels) = fashion.load_data()
(2)這里主要是使用列表來保存數據集中出現過的所有衣服種類的名字。
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
(3)定義一個函數,主要用來顯示某張照片。
def showImage(image): plt.figure() plt.imshow(image, cmap=plt.cm.binary) plt.colorbar() plt.grid(False) plt.show()
(4)這里主要展示訓練集中第一張原始圖片的樣子,我們可以看到每張圖片都是低分辨率的 28x28 像素(其實就是28*28的矩陣數字),而且每個像素是在 0-255 之間的數字
showImage(train_images[0])
效果如下:
因為每張圖片的每個像素都是 0-255 之間的整數,所以我們?yōu)榱四P陀柧毜募涌焓諗?,將所有的圖片都進行歸一化操作。
train_images = train_images / 255.0 test_images = test_images / 255.0
這里主要展示訓練集中第一張原始圖片的樣子經過歸一化操作的結果,可以看到每個像素點都是 0-1 之間的小數。
showImage(train_images[0])
效果如下:
2. 使用 tensorflow 2.1 搭建模型
(1)因為每張圖片的輸入是 28*28 的像素點,所以第一層的是輸入設置為 input_shape=(28, 28) ,輸出的是一個 784 維的向量,該操作可以看作是將 input_shape 多維數組中的值,重新拼接到一起整合成了一個一維數組。
(2)第二層、第三層都是通過激活函數 relu 的非線性變化,輸出一個 64 維向量的全連接層操作,當然這個網絡結構的層數、激活函數、每層的輸出維度可以自行隨意調整,其大小會影響最后的模型評估的指標,理論上結構越復雜效果越好,但是訓練速度越慢,而且這也會引起過擬合的現象,這個度的把握需要不斷通過輸出的指標來進行調整。
(3)第三層是輸出一個 10 維度的全連接層操作,其實就是該輸入圖片分別屬于這十個類別的對應的概率分布。
model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(10) ])
3. 配置并編譯模型
(1)這里我們選擇了 Adam 優(yōu)化器,這是一個比較成熟且廣泛使用的優(yōu)化器。
(2)這里的損失函數我們選擇了比較常見的交叉熵 SparseCategoricalCrossentropy 。
(3)這里我們選用了最為常用的模型評估指標準確率 accuracy。
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'])
4. 訓練模型
(1)我們使用訓練數據的圖片和標簽來對模型進行訓練,并且設置 epochs 為 5 ,也就是將所有的訓練集從頭到尾反復訓練 5 次,如果模型還沒有收斂那你也可以把 epochs 的值設置的大一些,配合較為復雜的網絡結構,最后模型在訓練階段的準確率應該能達到 98% 以上。
(2)在模型的訓練期間,命令行會顯示模型整體損失值和準確率評估指標的情況,這些都是 tensorflow 內部函數寫好的輸出格式,你也可以自己寫代碼改變。
model.fit(train_images, train_labels, epochs=5)
訓練過程輸出如下所示:
Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 5s 78us/sample - loss: 0.5140 - accuracy: 0.8180
Epoch 2/5
60000/60000 [==============================] - 4s 73us/sample - loss: 0.3724 - accuracy: 0.8654
Epoch 3/5
60000/60000 [==============================] - 4s 74us/sample - loss: 0.3388 - accuracy: 0.8763
Epoch 4/5
60000/60000 [==============================] - 4s 70us/sample - loss: 0.3165 - accuracy: 0.8831
Epoch 5/5
60000/60000 [==============================] - 4s 74us/sample - loss: 0.2985 - accuracy: 0.8902
5. 評估模型
(1)這里我們使用測試數據來對模型進行評估,評估的指標也就是之前規(guī)定的準確率。
(2)verbose=2 只是為了規(guī)定結果輸出形式,可以選擇 0、1、2 中的任意一個 。
loss, acc = model.evaluate(test_images, test_labels, verbose=2) print('Test accuracy:%f, Test loss:%f'%(acc, loss))
結果輸出如下所示,表明所訓練的模型在測試集的評估下準確率能達到 0.8725 :
10000/1 - 1s - loss: 0.2279 - accuracy: 0.8725 Test accuracy:0.872500, Test loss:0.352148
6. 使用模型進行預測
(1)上面模型在預測每張圖片時最后輸出的都是一個 10 維的雜亂無章的浮點數數組,為了保證輸出的結果是被人容易理解的,我們在上面模型的的最后加上了一層 Softmax 。
(2)Softmax 的功能很簡單,就是將這 10 個雜亂無章的浮點數,轉化成 10 個概率,每個概率值在 0-1 之間,這 10 個概率的和為 1 ,這樣我們取其中最大概率的值對應的衣服類別作為我們預測的結果。
model_by_softmax = tf.keras.Sequential([model, tf.keras.layers.Softmax()]) predictions = model_by_softmax.predict(test_images) predict_for_one_image = predictions[3] predict_for_one_image
輸出概率分布如下所示:
array([4.1939876e-07, 9.9996161e-01, 8.4085507e-08, 3.7719459e-05,
3.1557637e-08, 1.0500006e-13, 1.5945717e-07, 1.3569163e-13,
1.8028586e-09, 4.5183642e-11], dtype=float32)
(3)查看一張測試圖片在這 10 個衣服類別中的概率分布,我們發(fā)現 9.9996161e-01 最大,表明該圖片成為第二類衣服款式的概率最大。
(4)我們可以輸出預測的衣服種類,通過查找最大概率對應的衣服種類,發(fā)現該圖片被預測的衣服類別是 Trouser 。
class_names[np.argmax(predict_for_one_image)]
輸出結果如下:
'Trouser'
(5)我們將原始圖片繪制出來發(fā)現確實是一條褲子,說明模型預測正確。
showImage(test_images[3])
展示效果如下:
以上就是Tensorflow2.1實現Fashion圖像分類示例詳解的詳細內容,更多關于Tensorflow Fashion圖像分類的資料請關注腳本之家其它相關文章!
相關文章
Python 使用 consul 做服務發(fā)現示例詳解
這篇文章主要介紹了Python 使用 consul 做服務發(fā)現示例詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03