2017-01-24 88 views
3

我一直在Keras培訓一個CNN,並將培訓和驗證精確度作爲時代的函數進行繪圖。我想知道是否有一種繪製精度作爲處理時間函數的方法。Keras繪圖精度vs時間

原因是我想證明轉移學習的速度,而不是重新培訓整個網絡。當使用轉移學習時,網絡會採用相同數量的時代進行訓練,給予或拿取,但每個時代需要的時間要少得多(幅度要快一個數量級),我想用圖形捕捉這個時間。

這裏是我一直使用至今代碼:

history = model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1, validation_data=(X_test, Y_test)) 

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='lower right') 
plt.show() 

在此先感謝

+0

如果曆元的數量不變,那簡單測量整個端到端時間有什麼問題?它應該是您的需求的公平比較。 – ginge

+1

我意識到這是微不足道的,但它是一個演示文稿,隨着時間的推移情節看起來好得多,並且比培訓時間表更清楚地展示了改進。我一直在按照你的建議去做,但對於一些視覺效果的一些工作還有很長的路要走 –

回答

2

所以它實際上是非常簡單的實現一段代碼在Keras完成你的任務。爲了做到這一點 - 熟悉keras.callback是很好的。它使得可以調用一個自定義函數:

on_epoch_begin:在每個紀元開始時調用。

on_epoch_end:所謂的在每一個時代的結束,

on_batch_begin:叫在每一批的開始,

on_batch_end:所謂的在每個批次結束,

on_train_begin:所謂的模型訓練的開始,

on_train_end:稱爲模型訓練結束。

所以現在你可以實現例如一個新的回調將:

  • 寄存器的訓練時間on_train_begin開始時,
  • 在每個曆元的末端它將註冊使用中提供一個dicton_epoch_end計算的端部的實際時間,
  • 寄存器培訓結束on_train_end

通過使用此回調收集的數據,您可以通過多種方式輕鬆呈現時間和準確性之間的依賴關係。當然 - 它可以很容易地擴展到batch/iterations時間段。