我一直不太懂訓練模型是什麼意思,或實際是如何運作的,今天要接續昨天對 Softmax 模型深入研究。
訓練模型能夠做什麼呢?
(1)可以讓模型從訓練數據中學習特徵和模式,有助於它進行預測或分類。
(2)不斷調整模型參數,可以提高在未來數據上預測的準確性。
(3)過程中使用損失函數衡量模型的表現,通過最小化損失來優化模型的性能。
TensorFlow 官方證實現今最好的模型準確率高達 0.997,我們自己做的模型都很精簡,要那麼高的準確率,可以使用卷積神經網絡等先進架構,他們更擅長處理圖像數據。
以下簡單實作如何訓練評估模型,有個基本概念。
先丟欲處理數據,並正規化數據:
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
重新調整數據以符合模型輸入:
x_train = x_train.reshape((60000, 28 * 28))
x_test = x_test.reshape((10000, 28 * 28))
將標籤轉換為 one-hot 編碼,one-hot 編碼表示該位元組或向量裡僅容許其中一位爲1,其他位都必須爲0:
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)
構建並編譯 Softmax 模型:
model = models.Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=(28 * 28,)))
model.add(layers.Dense(10, activation='softmax')) # 最後一層使用 Softmax
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
訓練模型:
model.fit(x_train, y_train, epochs=5, batch_size=32, validation_split=0.2)
評估模型:
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f'Test accuracy: {test_accuracy:.4f}')
可以用以上程式測試資料集上評估模型的準確性。