Python深度學習實戰10-模型訓練曆史
26 Sep 2017
深度學習模型訓練過程如何可視化, 或者說如何可視化模型訓練時模型準确率等模型性能資料随時間變化程度. 本次實戰就是讓我們知道:
檢視訓練曆史資料
繪制模型訓練時, 模型在訓練集和驗證集上的準确率(in-sample-error, validation-error 可參考 learning from data 一書)随時間(疊代步數)變化的曲線.
繪制模型訓練時, 模型在訓練集和驗證集上的代價函數随時間變化的曲線.
1.Model Training History
模型訓練時的曆史資料, 可以通過 model.fit() 傳回的 history 對象擷取. 比如, 在建立模型和編譯模型之後, 我們進行模型拟合.
# 訓練曆史 圖形化
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 随機數設定
seed = 7
np.random.seed(seed)
# 加載資料
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
df = pd.read_csv(url, header=None)
dataset = df.values
X = dataset[:, 0:8]
Y = dataset[:, 8]
# 建立神經網絡模型 12-8-1
model = Sequential()
model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))
model.add(Dense(8, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# 編譯模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 模型拟合
history = model.fit(X, Y, validation_split=0.33, nb_epoch=150, batch_size=10, verbose=0)
# 列出曆史資料
print(history.history.keys()) # 可檢視 history 對象中有哪些曆史資料
output: ['acc', 'loss', 'val_acc', 'val_loss']
從輸出中, 我們可以看出, history 對象中存儲了 'acc', 'loss', 'val_acc', 'val_loss' 4種資料.
acc: 模型在訓練集上準确率
loss: 模型在訓練集上的代價函數值
val_acc: 模型在驗證集上準确率
val_loss: 模型在驗證集上的代價函數值
2.訓練曆史資料可視化
我們知道訓練曆史資料, 那麼就可以繪制與時間(疊代步數)的曲線圖.
# 總: 準确性
plt.figure(1)
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('Model Accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()
# 總: 代價函數值
plt.figure(2)
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model Loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()
output:
上圖中的曲線分别為模型在訓練集(train), 驗證集(validation)上準确率随疊代步數變化的曲線. 我們可以看出, 模型訓練未收斂, 其準确率可以進一步提升.
上圖中的曲線分别為模型在訓練集(train), 驗證集(validation)上的代價函數值随疊代步數變化的曲線. 我們可以看出, 模型訓練未收斂, 代價函數值可以進一步降低.
從上面的變化曲線, 我們也可以看看模型是否 overfitting[validation 準确率或loss值是否出現明顯拐點.]
3.Sum
我們通過簡單的例子, 檢視深度學習模型訓練過程的資料, 并進行可視化, 可以幫助我們判斷模型是否收斂, 是否出現 overfit 現象.
申明
用時
代碼實作: 0: 29
閱讀與記錄: 0: 56
總: 1: 25
@Anifacc
2017-09-26
人生苦短, 為歡幾何.