1. 程式人生 > 其它 >在Keras中展示深度學習模式的訓練歷史記錄

在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。

該示例收集了從訓練模型返回的歷史記錄,並建立了兩個圖表:

  1. 訓練和驗證資料集在訓練週期的準確性圖。
  2. 訓練和驗證資料集在訓練週期的損失圖。
# 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/