1. 程式人生 > >[Keras深度學習淺嘗]實戰一·DNN實現Fashion MNIST 資料集分類

[Keras深度學習淺嘗]實戰一·DNN實現Fashion MNIST 資料集分類

[Keras深度學習淺嘗]實戰一·DNN實現Fashion MNIST 資料集分類

此實戰來源於TensorFlow Keras官方教程

Fashion-MNIST是一個替代MNIST手寫數字集的影象資料集。 它是由Zalando(一家德國的時尚科技公司)旗下的研究部門提供。其涵蓋了來自10種類別的共7萬個不同商品的正面圖片。Fashion-MNIST的大小、格式和訓練集/測試集劃分與原始的MNIST完全一致。60000/10000的訓練測試資料劃分,28x28的灰度圖片。你可以直接用它來測試你的機器學習和深度學習演算法效能,且不需要改動任何的程式碼。

  • 匯入相關包
# TensorFlow and tf.keras
import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" import tensorflow as tf from tensorflow import keras # Helper libraries import numpy as np import matplotlib.pyplot as plt print(tf.__version__)
1.12.0
  • 匯入資料集
fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels)
, (test_images, test_labels) = fashion_mnist.load_data()
  • 定義名稱list(方便label轉名稱)
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
train_images.shape
(60000, 28, 28)
len(train_labels)
60000
  • image資料歸一化(由0:255 -> 0:1,資料量壓縮,不易產生溢位,易於訓練)
train_images = train_images / 255.0

test_images = test_images / 255.0
  • 顯示一張照片
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)

png

  • 顯示多張照片
plt.figure(figsize=(10,10))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(class_names[train_labels[i]])

png

  • 定義網路
model = keras.Sequential([
	 #shape轉換過程 (-1,28,28)->(-1,28*28)
    keras.layers.Flatten(input_shape=(28, 28)),
    #shape轉換過程 (-1,28*28)->(-1,256)
    keras.layers.Dense(256, activation=tf.nn.relu),
    #shape轉換過程 (-1,256)->(-1,256)
    keras.layers.Dropout(0.2,noise_shape=None, seed=None),
    #shape轉換過程 (-1,256)->(-1,64)
    keras.layers.Dense(64, activation=tf.nn.relu),
    #shape轉換過程 (-1,64)->(-1,10)
    keras.layers.Dense(10, activation=tf.nn.softmax)
])
  • 編譯模型(選取優化函式與損失值計算方式)
model.compile(optimizer=tf.train.AdamOptimizer(),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
  • 模型訓練
model.fit(train_images, train_labels, epochs=5)
Epoch 1/5
60000/60000 [==============================] - 8s 136us/step - loss: 0.4993 - acc: 0.8249
Epoch 2/5
60000/60000 [==============================] - 7s 121us/step - loss: 0.3819 - acc: 0.8627
Epoch 3/5
60000/60000 [==============================] - 8s 127us/step - loss: 0.3429 - acc: 0.8758
Epoch 4/5
60000/60000 [==============================] - 9s 142us/step - loss: 0.3142 - acc: 0.8857
Epoch 5/5
60000/60000 [==============================] - 6s 102us/step - loss: 0.2972 - acc: 0.8908

<tensorflow.python.keras.callbacks.History at 0xb59a50b70>
  • 測試準確率
test_loss, test_acc = model.evaluate(test_images, test_labels)

print('Test accuracy:', test_acc)
10000/10000 [==============================] - 0s 45us/step
Test accuracy: 0.867
  • 模型應用
plt.figure()
plt.imshow(test_images[1])
plt.colorbar()
plt.grid(False)
predictions = model.predict(test_images[1:2])

png

class_names[np.argmax(predictions)]
'Pullover'