1. 程式人生 > >第18章 檢測點模型

第18章 檢測點模型

文件 完成 有一個 是否 verbose 需要 畫出 提高 發生

第18章 檢測點模型

在第13章我們討論了在訓練結束後如何保存和序列化模型到磁盤上。在上一章,我們學習了在過擬合和欠擬合發生的時候如何畫出它們,使您能夠在訓練時,在保持顯示出希望的模型的同時,殺死性能不佳的實驗。

但是,你可能想我們是否能夠將上述策略結合到一起。在損失/正確率提高時能序列化模型嗎?或者在訓練過程中僅序列化最佳模型是可能的嗎?答案是肯定的,幸運的是,這些操作不需要我們寫回調函數,這些都內置在keras庫中了。

1 檢查神經網絡模型的改進

檢查點的一個好的應用是每次在訓練中有好的改進時,就序列化到磁盤上。我們定義“改進”要麽是損失下降要麽是正確率提高,我們將在實際的keras回調函數中設置這些參數。

具體代碼見GitHub的chapter18/。

在導入類中註意ModelCheckpoint,這個類讓我們在模型性能提高的時候檢查和序列化網絡到磁盤上。構建回調函數如下:

  技術分享圖片

我們在第37-38行定義了保存的檢查點文件名,固定值weights-epoch數目-損失值。然後39-40定義檢查點模型,參數保存的名字、要監視的變量(這裏我們監視驗證損失)、mode指明如何監視(由於損失越小越好,因此設為min;如果監視的是正確率,由於越大越好,則要設置為max)、save_best_only參數則表示最新的最佳模型不會被覆蓋、最後的verbose參數僅是顯示執行過程中的log信息。

然後在訓練模型時,加入callback就可以了:

  技術分享圖片

之後運行模型,等待完成,就可以看到每次驗證損失降低時就記錄一次模型文件了。

2 僅檢查最佳神經網絡

可能在上面運行中最不好的是每次模型改進就會保存一個模型,最後會有很多改進模型,但是我們可能只想保留最佳模型文件。幸好,可以通過ModelCheckpoint接受一個參數,然後無論什麽時候性能改進了,僅僅是覆蓋這個文件。我們創建一個cifar10_checkpoint_best.py文件,具體見GitHub的chapter18/下。

這裏僅僅是通過添加一個覆蓋文件即可:

技術分享圖片

其它代碼則與訓練一個網絡的步驟相同,導入模塊,加載數據、劃分數據、數據float化、向量化標簽、初始化模型與優化器。

這裏執行完後,可看到只有一個文件保留,即只保留一個最佳的模型文件。

作者傾向於後者,這可以保留較少文件,且保留了最佳模型文件。

第18章 檢測點模型