這一章我們主要介紹一下模型儲存的方式,我們訓練fashion_mnist這個資料集作為例子
首先導入庫
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL2EGN1MTN3ImMhlzM5QjZ4EGNlRjNhRGOzU2NzMGOwgzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
之後導入資料集
歸一化
建立模型
編譯模型
訓練模型,我們訓練三個epoch就行
之後我們評估一下這個模型
其中有一個參數verbose,它有兩個可選值,0或1,0是不顯示,1是顯示,預設為1
下面我們來儲存模型,模型有三個部分組成,分别是
- 模型權重(每一層的可訓練參數是多少)
- 模型架構(神經網絡的每一層是什麼)
- 優化器配置(神經網絡的編譯情況)
我們下面先儲存整個模型,我們下面的所有代碼均是在進行完model.fit之後再執行的
目錄
1 儲存整個模型
2 僅儲存架構
3 僅儲存權重
3.1 擷取與設定權重
3.2 儲存與讀取
1 儲存整個模型
我們之前儲存的都是非h5檔案,儲存的是整個檔案夾,那個是之前的寫法,今後會逐漸廢棄,我們一般将其儲存為h5檔案
之後我們依然使用tf.keras.models.load_model()就可以讀取模型,我們建立一個檔案
我們看一下這個模型
我們驗證一下有沒有儲存權重,我們首先導入資料集,然後使用model.evaluate()評估一下
- 沒有優化器是無法使用evaluate()進行評估的
2 僅儲存架構
我們使用to_json()方法提取出模型架構
我們看一下json_config
可以發現json_config中記錄了模型的很多屬性,并且是一個str,我們可以把以上内容寫到一個txt中
- json_config.txt如果沒有的話會自動建立
- 僅儲存架構就不需要再進行編譯與訓練了
我們打開看一下
發現字元串已經寫入了json_config.txt,之後我們再另一個檔案中進行調用
我們看一下這個模型
發現模型的架構被儲存了下來
之後我們對這個模型評估一下
發現是無法評估的,因為我們目前的模型僅有架構,沒有優化器
我們可以編譯一下它再進行評估
發現可以評估
但效果不行,這個就表示,我們沒有儲存權重
3 僅儲存權重
僅儲存權重就使用在我們訓練的過程中,我們訓練中很有可能遇到突發情況打斷訓練,這個時候如果沒有進行儲存,我們就要重新開始訓練,非常浪費時間,這個時候我們就需要儲存一些東西,如果我們僅僅為了繼續訓練,我們僅儲存權重就可以了,因為架構與編譯在訓練代碼中一定是有的,如果将架構,權重,編譯環境都儲存就非常的浪費資源
3.1 擷取與設定權重
我們先使用get_weights(),看一下權重是什麼東西
發現是一個清單中包含了多個array
我們可以使用set_weight()将權重賦給模型,當然這對現在并沒有什麼用,隻是展示一下有這樣一個函數
3.2 儲存與讀取
我們可以使用save_weights()來僅僅儲存權重
我們對比一下僅儲存權重與剛剛全部儲存模型的檔案大小
發現權重檔案比整體模型檔案小了許多,這還是僅僅在隻有三層的情況下
之後我們再另一個檔案中使用load_weights()加載權重,剛剛我們先加載了模型架構,又增加了編譯環節,之後我們對其加載權重
現在我們再對其進行評估
發現與我們之前訓練的兩個名額差不多