[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 21:在 Hexo 增加作者版权声明(使用 Next 布景)

>>:  页面切换好夥伴- Vue Router [序]

[Day25] - Using Redux with Web Component

使用组件跟组件的组合 , 形成一个页面 势必会遇到经典的组件传值 issue (下图左侧) 以大家常...

Day12 同步状态控制 Synchronizer

由於我们可藉由产生带重叠范围的配对请求,而这些配对请求将并发(Concurrently)的触发 MM...

Day 12【连动 MetaMask - Backend & Init】277353

【前言】 大家安安,今天的主题经过 MetaMask 强大的功能之後其实是可以省略的。开玩笑的,反...

电子书阅读器上的浏览器 [Day14] 中文直排阅读模式

这功能对於浏览器来说,应该是个没人(或很少人)想过会存在的功能。 从十几二十年前开始有浏览器以来,浏...

Day39. 建造者模式

本文同步更新於blog Builder Pattern 将复杂对象的构建与其表示分离。 建造者模式...