模型轉化之----H5轉化tflite


H5轉化tflite

 

 

注意事項:

1.H5文件必須為整個模型(包含權重,模型結構,配置信息),若是權值h5文件,會加載不出模型

模型訓練時,ModelCheckpoint設置參數save_weights_only=False;

  • save_weights_only : 如果為 True,則僅保存模型的權重 ( model.save_weights(filepath)),否則保存完整模型 ( model.save(filepath))

 

參考鏈接:https://blog.csdn.net/leviopku/article/details/86612293

https://blog.csdn.net/weixin_41770169/article/details/85697281

http://www.cppcns.com/jiaoben/python/314093.html

https://blog.csdn.net/u011529752/article/details/113921568?spm=1001.2014.3001.5501

  

轉換步驟:

  

 

報錯1:ValueError: Unknown activation function:relu6

原因:新版本的keras把relu6改掉了,找不到該方法

解決方法:

自己定義一個relu6;

  

 

報錯2:TypeError: Unexpected keyword argument passed to optimizer: learning_rate

原因:由於在新版本的keras中(指大於等於2.3.0版本),將原來的 lr 這一參數重命名為 leraning_rate,因此將 leraning_rate 重新改為 lr 即可解決報錯問題

解決方法:

在模型訓練時需根據keras版本定義學習率:

  

解決方法2:

若上述方法不能解決,則升級tensorflow版本至2.0;

並修改使用tf1.0版本的API:

converter = tf.compat.v1.lite.TFLiteConverter.from_keras_model_file(model_file=filepath);

  

H5模型可視化:

 

 

 

報錯1:ValueError: Unknown activation function:relu6

原因:新版本的keras把relu6改掉了,找不到方法

解決方法:

重新定義relu6,修改如下:

  

 

報錯2:TypeError: Unexpected keyword argument passed to optimizer: learning_rate

類型錯誤:意外的關鍵字參數傳遞給優化器:learning_rate

原因:

Keras版本不匹配,學習率命名 keras2.2.4使用lr,keras2.3.1使用learning_rate

解決方法:

升級keras:pip install --upgrade keras==2.3.1

 

報錯3:OSError: `pydot` failed to call GraphViz.Please install GraphViz (https://www.graphviz.org/) and ensure that its executables are in the $PATH.

原因:

解決方法:(仍待解決)

 pip install pydot

pip install pydotplus

brew install graphviz

  

Ps:

關於Adam:

 

  

 

 

Keras保存模型:

參考鏈接:https://blog.csdn.net/leviopku/article/details/86612293

1.保存整個模型:model.save(filepath)將Keras模型和權重保存在一個HDF5文件中,該文件將包含:

  • 模型的結構
  • 模型的權重
  • 訓練配置(損失函數,優化器,准確率等)
  • 優化器的狀態,以便於從上次訓練中斷的地方

再一次使用時可以model.load_model(filepath)載入模型;

 

2.保存模型結構:model.to_jason()將模型序列化保存為json文件,里面記錄了網絡的整體結構, 各個層的參數設置等信息. 將json字符串保存到文件.

 

 

 

3.保存模型權重:經過調參網絡的輸出精度比較滿意后,可以將訓練好的網絡權重參數保存下來,可通過下面的代碼利用HDF5進行保存:

model.save_weights(‘model_weights.h5’)

使用時加載模型: 

model.load_weights(‘model_weights.h5’)

 

如果需要加載權重到不同的網絡結構(有些層一樣)中,例如fine-tune或transfer-learning,可以通過層名字來加載模型: 

model.load_weights('my_model_weights.h5', by_name=True)

因此建模時最好給每個層定義名字。

 

 


免責聲明!

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



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