天天看點

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

這一章我們主要介紹一下模型儲存的方式,我們訓練fashion_mnist這個資料集作為例子

首先導入庫

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

之後導入資料集

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

歸一化

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

建立模型

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

編譯模型

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

訓練模型,我們訓練三個epoch就行

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

之後我們評估一下這個模型

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重
30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

其中有一個參數verbose,它有兩個可選值,0或1,0是不顯示,1是顯示,預設為1

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

下面我們來儲存模型,模型有三個部分組成,分别是

  • 模型權重(每一層的可訓練參數是多少)
  • 模型架構(神經網絡的每一層是什麼)
  • 優化器配置(神經網絡的編譯情況)

我們下面先儲存整個模型,我們下面的所有代碼均是在進行完model.fit之後再執行的

目錄

1  儲存整個模型

2  僅儲存架構

3  僅儲存權重

3.1  擷取與設定權重

3.2  儲存與讀取

1  儲存整個模型

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

我們之前儲存的都是非h5檔案,儲存的是整個檔案夾,那個是之前的寫法,今後會逐漸廢棄,我們一般将其儲存為h5檔案

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

之後我們依然使用tf.keras.models.load_model()就可以讀取模型,我們建立一個檔案

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

我們看一下這個模型

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重
30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

我們驗證一下有沒有儲存權重,我們首先導入資料集,然後使用model.evaluate()評估一下

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重
30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重
  • 沒有優化器是無法使用evaluate()進行評估的

2  僅儲存架構

我們使用to_json()方法提取出模型架構

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

我們看一下json_config

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重
30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

可以發現json_config中記錄了模型的很多屬性,并且是一個str,我們可以把以上内容寫到一個txt中

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重
  • json_config.txt如果沒有的話會自動建立
  • 僅儲存架構就不需要再進行編譯與訓練了
30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

我們打開看一下

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

發現字元串已經寫入了json_config.txt,之後我們再另一個檔案中進行調用

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

我們看一下這個模型

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

發現模型的架構被儲存了下來

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

之後我們對這個模型評估一下

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

發現是無法評估的,因為我們目前的模型僅有架構,沒有優化器

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

我們可以編譯一下它再進行評估

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

發現可以評估

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

但效果不行,這個就表示,我們沒有儲存權重

3  僅儲存權重

僅儲存權重就使用在我們訓練的過程中,我們訓練中很有可能遇到突發情況打斷訓練,這個時候如果沒有進行儲存,我們就要重新開始訓練,非常浪費時間,這個時候我們就需要儲存一些東西,如果我們僅僅為了繼續訓練,我們僅儲存權重就可以了,因為架構與編譯在訓練代碼中一定是有的,如果将架構,權重,編譯環境都儲存就非常的浪費資源

3.1  擷取與設定權重

我們先使用get_weights(),看一下權重是什麼東西

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重
30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重
30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重
30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

發現是一個清單中包含了多個array

我們可以使用set_weight()将權重賦給模型,當然這對現在并沒有什麼用,隻是展示一下有這樣一個函數

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

3.2  儲存與讀取

我們可以使用save_weights()來僅僅儲存權重

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重
30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

我們對比一下僅儲存權重與剛剛全部儲存模型的檔案大小

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

發現權重檔案比整體模型檔案小了許多,這還是僅僅在隻有三層的情況下

之後我們再另一個檔案中使用load_weights()加載權重,剛剛我們先加載了模型架構,又增加了編譯環節,之後我們對其加載權重

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

現在我們再對其進行評估

30.模型儲存1  儲存整個模型 2  僅儲存架構 3  僅儲存權重

發現與我們之前訓練的兩個名額差不多

繼續閱讀