赞
踩
本文主要介绍的是在tensorflow模型较大,参数量很多的情况下如何优化模型,让模型瘦身,使得模型有部署到一些嵌入式系统,如 树莓派的可能性。
① 训练后剪枝
主要原理比较简单,设置规则将接近0的权重设置为0,使得权重更加的稀疏,减少计算量
②训练后量化
训练模型的时候采用了flot32的高精度,在预测的时候,减小精度设置到比如flot16,int32 等,使得小数的位数减少了,计算难度也就变小了,拿int举例子,将每一步的中间权重(不包括输出)量化为0-255的区间内,用0-255的数字来表示以前的权重,这样在预测的时候确保了在牺牲很小精度的情况下,模型的体积大大减小了,因为flot型和int型,一个字符占的字节数是不一样的。
最后通过zip发现,训练后剪枝压缩的效果一般,应该是模型本身已经够稀疏了,但是训练后量化压缩的效果很好,体积缩小了10倍数。
还可以尝试,训练时剪枝的方法,官方都有很详细的步骤
import os import time import numpy as np import tensorflow as tf from PIL import Image, ImageDraw, ImageFont from tensorflow.keras.layers import Input, Lambda from tensorflow.keras.models import Model from nets.yolo4 import yolo_body, yolo_eval import tensorflow_model_optimization as tfmot import tempfile model_path = 'model_data/ep100-loss1.559-val_loss1.393.h5' anchors_path = 'model_data/yolo_anchors.txt' classes_path = 'model_data/defect_classes.txt' def _get_class(classes_path): classes_path = os.path.expanduser(classes_path) with open(classes_path) as f: class_names = f.readlines() class_names =
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。