TensorFlow Lite模型量化方法

##CUDA_VISIBLE_DEVICES=-1& tflite_convert --saved_model_dir ./sfz1model/ --output_file ./tflite/sfz1.tflit
def convert2f16():
    modeldir='./sfz1model'
    tfdir='./tflite/float16.tflite'

    tfconverter = \
                tf.lite.TFLiteConverter.from_saved_model(modeldir)
    #float16 量化            
    tfconverter.optimizations=[tf.lite.Optimize.DEFAULT]
    tfconverter.target_spec.supported_types=[tf.float16]
    #
    saved_model_tflite = tfconverter.convert()


    with open(tfdir, 'wb') as f:
        f.write(saved_model_tflite)

def convert2f8if32():
    modeldir='./sfz1model'
    tfdir='./tflite/i8f32.tflite'
    
    tfconverter = \
                tf.lite.TFLiteConverter.from_saved_model(modeldir)
    #int8 float32 混合量化            
    tfconverter.optimizations=[tf.lite.Optimize.DEFAULT]
    #tfconverter.target_spec.supported_types=[tf.float16]
    #
    saved_model_tflite = tfconverter.convert()


    with open(tfdir, 'wb') as f:
        f.write(saved_model_tflite)


from nets.resnetsfz import *
h,w = 135,240
BATCH_SIZE=1
val_split = 0.1
gen=SfzGen(BATCH_SIZE,w,h,val_split,[
        ])        
def data_gen():
    data=gen.generate(True)
    for i in range(100):
        x,y=data.__next__()
        # Model has only one input so each data point has one element.
        yield [x]
# mnist_train, _ = tf.keras.datasets.mnist.load_data()
# images = tf.cast(mnist_train[0], tf.float32) / 255.0
# mnist_ds = tf.data.Dataset.from_tensor_slices((images)).batch(1)
# def representative_data_gen():
#   for input_value in mnist_ds.take(100):
#     # Model has only one input so each data point has one element.
#     yield [input_value]

def convert2int8():#
    modeldir='./sfz1model'
    tfdir='./tflite/int8.tflite'
    
    tfconverter = \
                tf.lite.TFLiteConverter.from_saved_model(modeldir)
    #int8 float32 混合量化            
    tfconverter.optimizations=[tf.lite.Optimize.DEFAULT]
    #tfconverter.target_spec.supported_types=[tf.float16]
    tfconverter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
    tfconverter.inference_input_type = tf.uint8
    tfconverter.inference_output_type = tf.uint8    
    
    tfconverter.representative_dataset = data_gen

    saved_model_tflite = tfconverter.convert()


    with open(tfdir, 'wb') as f:
        f.write(saved_model_tflite)
Frank Wang:TensorFlow Lite量化方法介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值