iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
AI & Data

AI Facial Expression Recognition: Data, Model, Application系列 第 21

[Day 21] 媽! Keras 和 TensorFlow 在亂存模型啦! ( TFLite 輕量模型)

前言

受惠於深度學習框架的多元性,開發者可以選自己喜歡的框架,
像是: Theano、Caffe、ONNX、Keras、Tensorflow、Pytorch、DL Spark、Paddle...
光是最知名的兩大套件就有令人眼花撩亂的模型儲存格式,
Tensorflow有.h5.hdf5.ckpt.pb
Pytorch有.pt.pth.pkl


手機適合用什麼副檔名的儲存方式?

當然是.tflite !
Google在2017年推出針對手機端的神經網絡計算框架TensorFlow Lite。
所以TFLite有那些優點呢?

  1. 通過 TFLite 生成的依賴庫體積很小 (在寸土寸金的手機儲存空間這很重要)
  2. 支援手機端硬體加速
  3. TFLite 可以運行在 Android 和 iOS 上
  4. 模型本身比較小
    (相同的EfficientNetB0模型,用.h5和.tflite 做比較)
    https://ithelp.ithome.com.tw/upload/images/20210927/20141294EbsKjcZX8e.jpg

題外話

讓模型輕量化,model quantization是一個很簡單的方法,
原理是將參weghts的儲存位元數下降。
例如: 把 float32 轉成 int8


那要如何獲得.tflite的模型呢?

我們過去二十天來都是用tf.keras在訓練模型,
tf.keras的Model class可以用TFLiteConverter轉成.tflite。
程式碼如下:

def save_model(model, save_name="mymodel"):
    """
    model : Keras Model class
    save_name : str
    """
    # 儲存模型-tf格式
    # Convert the model.
    converter = tf.lite.TFLiteConverter.from_keras_model(model)
    tflite_model = converter.convert()
    # Save the model.
    with open("./" + save_name + ".tflite", 'wb') as f:
        f.write(tflite_model)

    # 儲存模型-keras格式
    model.save("./" + save_name + ".h5")

結語

儲存模型只是應用深度學習的第一步,
我們獲得輕量化的模型就是為了能夠把模型部署在邊緣裝置上,
但我只有Android手機/images/emoticon/emoticon02.gif
未完待續...


上一篇
[Day 20] 兩段式訓練比兩段式左轉更安全 (遷移學習技巧)
下一篇
[Day 22] 卷積類明星模型大亂鬥 ! EFN特別版
系列文
AI Facial Expression Recognition: Data, Model, Application30

尚未有邦友留言

立即登入留言