本文是TF給出的第一個關於keras的demo,以此來引出keras的基本用法和幾個關鍵方法,也體會到了keras使用的方便。
一、數據集
demo中所用的數據集是fashion_mnist。是關於穿着物品的圖片集。地址:https://github.com/zalandoresearch/fashion-mnist
數據集的特征:
- 訓練數據60000個
- 測試數據10000個
- 每個圖片是28 * 28 灰度圖
- 10個分類
keras的數據集下載簡單幾句話就可以搞定。
fashion_mnist = keras.datasets.fashion_mnist (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
datasets里包含很多數據集,都可以通過load_data直接下載(雖然很多下載不了,可能是被牆了。可以直接下載數據集,然后保存在根目錄的.keras目錄的datasets下。macos下是在~/.keras,windows是在?)。
通過load_data下載的數據,直接將訓練和測試數據集分開返回,而且也將數據和分類標簽分開返回。
二、數據處理
歸一化。
train_images = train_images / 255.0
test_images = test_images / 255.0
三、建模
model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dense(10, activation=tf.nn.softmax) ])
這個demo里,采用序列模式。
- 第一層是Flatten,將28 * 28的像素值,壓縮成一行 (784, )
- 第二層是Dense,全連接層。激活函數使用relu
- 第三層還是Dense,因為是多分類問題,激活函數使用softmax
在keras里,layers里包含所有的層類型。其中還包括,
- 卷積層,Conv2D
- Dropout層,Dropout
- MaxPool1D, 最大池化層
- 等等
具體可參考:https://tensorflow.google.cn/api_docs/python/tf/keras/layers
四、編譯
建模后就是編譯。編譯的參數主要是:
- optimizer,優化方法,這里用Adam
- loss,損失函數,這里用稀疏類別交叉熵(多類的對數損失),sparse是指稀疏矩陣
- metrics,評估模型在訓練和測試時的性能的指標
model.compile(optimizer=tf.train.AdamOptimizer(), loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])
五、擬合
擬合是訓練參數,擬合訓練數據的過程。主要參數:
- 訓練數據
- 訓練標簽
- 訓練次數
model.fit(train_images, train_labels, epochs=5)
六、評估
把擬合好的模型應用在測試數據上,得到在測試集上的損失值和准確率。
通過觀察和繪制損失值和准確率的統計圖,分析模型的性能,是否滿足需求。
如果滿足需求,再進行最后的預測過程。
test_loss, test_acc = model.evaluate(test_images, test_labels)
七、預測
predictions = model.predict(test_images)
predict可以得到所有類型對應的概率。
Reference:
1、https://tensorflow.google.cn/tutorials/keras/basic_classification
2、https://keras-cn.readthedocs.io/en/latest/、keras中文文檔。