在Keras中展示深度學習模式的訓練歷史記錄
通過觀察神經網路和深度學習模型在訓練期間的表現,你可以得知很多有用的資訊。
Keras是Python中強大的庫,為建立深度學習模型提供了一個簡單的介面,幷包裝了更為技術性的TensorFlow和Theano後端。
在這篇文章中,你將發現在訓練時如何使用Python中的Keras對深入學習模型的效能進行評估和視覺化。
讓我們開始吧。
- 更新2017/03:更新Keras 2.0.2,TensorFlow 1.0.1,Theano 0.9.0的示例。
在Keras中訪問模型訓練的歷史記錄
Keras提供了在訓練深度學習模型時記錄回撥的功能。
訓練所有深度學習模型時都會使用歷史記錄回撥,這種回撥函式被記為系統預設的回撥函式。它記錄每個時期的訓練權重,包括損失和準確性(用於分類問題中)。
歷史物件從呼叫fit()函式返回來訓練模型。權重儲存在返回的物件的歷史詞典中。
例如,你可以在訓練模型後,使用以下程式碼段列出歷史記錄物件中收集的指標:
# list all data in history
print(history.history.keys())
例如,對於使用驗證資料集對分類問題進行訓練的模型,可能會產生:
['acc','loss','val_acc','val_loss']
我們可以使用歷史物件中收集的資料來繪製平面圖。
這些圖可以提供對模型訓練有幫助的資訊,如:
- 它的收斂速度。(斜度)
- 模型是否已經收斂(線的高度)。
- 模式是否過度學習訓練資料驗證線的拐點(驗證線的變化)。
或者更多。
視覺化Keras的模型訓練歷史
我們可以用收集的歷史資料建立圖。
在下面的例子中,我們建立了一個小型網路來建模Pima印第安人糖尿病二分類問題。這是一個可從UCI機器學習儲存庫獲取的小型資料集。你可以下載資料集並將其儲存到當前工作目錄中,檔名為:pima-indians-diabetes.csv。
該示例收集了從訓練模型返回的歷史記錄,並建立了兩個圖表:
- 訓練和驗證資料集在訓練週期的準確性圖。
- 訓練和驗證資料集在訓練週期的損失圖。
# Visualize training history from keras.modelsimport Sequential from keras.layersimport Dense import matplotlib.pyplot as plt import numpy # fix random seed for reproducibility seed= 7 numpy.random.seed(seed) # load pima indians dataset dataset= numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",") # split into input (X) and output (Y) variables X= dataset[:,0:8] Y= dataset[:,8] # create model model= Sequential() model.add(Dense(12, input_dim=8, kernel_initializer='uniform', activation='relu')) model.add(Dense(8, kernel_initializer='uniform', activation='relu')) model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid')) # Compile model model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # Fit the model history= model.fit(X, Y, validation_split=0.33, epochs=150, batch_size=10, verbose=0) # list all data in history print(history.history.keys()) # summarize history for accuracy plt.plot(history.history['acc']) plt.plot(history.history['val_acc']) plt.title('model accuracy') plt.ylabel('accuracy') plt.xlabel('epoch') plt.legend(['train','test'], loc='upper left') plt.show() # summarize history for loss plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('model loss') plt.ylabel('loss') plt.xlabel('epoch') plt.legend(['train','test'], loc='upper left') plt.show()
如下圖所示,驗證資料集的歷史被標記為test,因為它實際上是模型的一個測試資料集。
從圖中可以看出,模型可以受到更多的訓練,兩個資料集的準確性趨勢在最後幾個週期仍然在上升。我們還可以看到,該模型尚未過度學習訓練資料集,兩種資料集顯示出相似的模型技巧。
從下面損失圖中,我們可以看到該模型在訓練和驗證資料集(test)上都具有類似的效能。如果圖中後面線開始平行,這可能意味著過早的停止了訓練。
總結
在這篇文章中,你發現在深入學習模式的訓練期間收集和評估權重的重要性。
你瞭解了Keras中的歷史記錄回撥,以及如何呼叫fit()函式來訓練你的模型。以及學習瞭如何用訓練期間收集的歷史資料繪圖。
原文:http://machinelearningmastery.com/display-deep-learning-model-training-history-in-keras/