keras中的模型保存和加載


tensorflow中的模型常常是protobuf格式,這種格式既可以是二進制也可以是文本。keras模型保存和加載與tensorflow不同,keras中的模型保存和加載往往是保存成hdf5格式。

keras的模型保存分為多種情況。

一、不保存模型只顯示大概結構

  • model.summary()
    這個函數會打印模型結構,但是僅僅是打印到控制台。

  • keras.utils.plot_model()
    使用graphviz中的dot.exe生成網絡結構拓撲圖

二、保存模型結構

  • keras.models.Model對象的to_json,to_yaml
    只保存模型結構,加載時使用keras.models.model_from_json(),keras.models.model_from_yaml()

  • keras.model.get_config()返回文本形式的配置
    使用keras.model.model_from_config可以加載模型。

三、保存全部結構

keras.core.saving.py這個文件十分重要,keras的模型保存、加載都需要這個文件。
但是不建議直接使用這個文件,因為keras中的Model對象和models模塊會調用這個文件。
keras.core包下的內容一般供內部使用,不暴露給使用者。

Model對象提供了save()和save_wights()兩個方法。save()方法保存了三種東西:

  • 模型結構
  • 模型參數
  • 優化器參數

其中優化器參數是給優化器用的,用於繼續訓練模型。有些優化器比如AdamOptimizer需要根據訓練步數來調整不同參數的學習速率,這樣在分階段訓練模型時才能夠保證正確。save()函數保存結果就是一個hdf5文件,不像tensorflow一下子保存好多種文件。tensorflow把模型結構和權重分開保存,目的是多個權重文件可以共用一個模型結構文件,但是模型結構文件通常非常小,所占空間遠遠小於參數所占空間。

Model對象的save_weights()方法只保存了模型參數而沒有保存模型結構,它的保存格式也是hdf5。它保存的數據不能用於繼續訓練模型。

Model實例的save()方法有一個等價方式:使用models.save_model()。

對於使用save()方法保存的文件,可以使用models.load_model()進行加載,此函數直接返回一個Model對象。因為save()方法保存了模型的全部內容,所以可以直接“無中生有”創造一個模型。

對於使用save_weights()方法保存的文件,只能通過Model對象提供的load_weights()方法加載模型權重。 並且,在加載模型權重之前,必須把網絡結構定義好,並且模型的各個層的名稱必須與保存模型權重時的各個層保持一致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM