首页 > 其他分享 >keras 模型量化

keras 模型量化

时间:2023-01-20 11:39:11浏览次数:35  
标签:layer weight keras 模型 path np 量化 model oldparam


"""
#coding:utf-8
__project_ = 'TF2learning'
__file_name__ = 'quantization'
__author__ = 'qilibin'
__time__ = '2021/3/17 9:18'
__product_name = PyCharm
"""
import h5py
import pandas as pd
import numpy as np


'''
读取原来的只包含权重的H5模型,按层遍历,对每层的每个权重进行16位或8位量化,将量化后的权重数值重新保存在H5文件中
'''


def quantization16bit(old_model_path,new_model_path,bit_num):
'''

:param old_model_path: 未量化的模型路径 模型是只保存了权重未保存网络结构
:param new_model_path: 量化过后的模型路径
:param bit_num: 量化位数
:return:
'''


f = h5py.File(old_model_path,'r')
f2 = h5py.File(new_model_path,'w')
for layer in f.keys():
# layer : 层的名称

print (layer)

# # 每层里面的权重名称 有的层没有参数
# name_of_weight_of_layer = f[layer].attrs['weight_names']
# # 有的层是没有参数的 比如 relu
# length = len(name_of_weight_of_layer)

length = len(list(f[layer].keys()))
if length > 0:
g1 = f2.create_group(layer)
g1.attrs["weight_names"] = layer
g2 = g1.create_group(layer)

for weight in f[layer][layer].keys():
print ("wieght name is :" + weight)
oldparam = f[layer][layer][weight][:]
print ('-----------------------------------------old-----------------------')
print (oldparam)

if type(oldparam) == np.ndarray:
if bit_num == 16:
newparam = np.float16(oldparam)
if bit_num == 8:
min_val = np.min(oldparam)
max_val = np.max(oldparam)
oldparam = np.round((oldparam - min_val) / (max_val - min_val) * 255)
newparam = np.uint8(oldparam)
else:
newparam = oldparam
print ('-----------------------------------------new-----------------------')
#print (newparam)
#f[key][key][weight_name][:] = newparam 在原来模型的基础上修改 行不通
if bit_num == 16:
d = g2.create_dataset(weight, data=newparam,dtype=np.float16)
if bit_num == 8:
d = g2.create_dataset(weight, data=newparam, dtype=np.uint8)

else:
g1 = f2.create_group(layer)
g1.attrs["weight_names"] = layer
f.close()
f2.close()
old_model_path = './yolox_s.h5'
new_model_path = './yolox_sq.h5'
quantization16bit(old_model_path,new_model_path,8)
# print (f['batch_normalization']['batch_normalization']['gamma:0'][:])


标签:layer,weight,keras,模型,path,np,量化,model,oldparam
From: https://blog.51cto.com/u_15202985/6020567

相关文章

  • Google Jeff Dean 2022年终报告,大模型、AI 绘画神器
    GoogleJeffDean2022年终报告,大模型、AI绘画神器2022年,谷歌在ML领域取得了哪些新进展?JeffDean发万字长文总结。2022年,谷歌在机器学习方面有什么进展?GoogleResearch......
  • PyTorch图像分类全流程实战--预训练模型预测图像分类02
    主要内容今天的任务是学习预训练模型的使用,模型是Resnet18,使用的torchvision包由流行的数据集、模型体系结构和通用的计算机视觉图像转换组成。简单地说就是常用数据集+常......
  • PyTorch图像分类实战task2——预训练模型预测
    预训练图像分类模型预测视频链接:https://www.bilibili.com/video/BV1qe4y1D7zD/?spm_id_from=pageDriver&vd_source=ec0dfe3d40081b44c0160eacc0f39d0f脚本文件:https://g......
  • 利用Paddle开源OCR模型进行字符识别
    在挂机录制视频的时候,需要一个检测进度条是否跑完的功能。但是无奈各大平台ocr的api都很贵,本人不太愿意为了这个小功能掏钱。然后发现了这个OCR模型。虽然没学过人工智能,......
  • 【三维重建系列】相机模型部分公式详解记录
    相机模型P矩阵公式:\[P=KR[I|-C^{\backsim}]\]其中\(C^{\backsim}\)表示平移矩阵为齐次坐标即世界坐标系原点到相机坐标系原点的距离\(R\)同样表达的也是这个关系......
  • vcu整车simulink应用层模型 模型包含高压上下电,车辆蠕动,驻坡功能,能量管理
    vcu整车simulink应用层模型模型包含高压上下电,车辆蠕动,驻坡功能,能量管理,档位管理,续航里程,定速巡航等等。每个功能都对应有详细的pdf文档详细说明,进入条件,退出条件,以及标定......
  • 主题模型之PLSA
    ​​WelcomeToMyBlog​​上一篇文章介绍了​​文本建模之UnigramModel​​,但这个模型太过于简略,本篇文章介绍PLSA(ProbabilisticLatentSemanticAnalysis,概率化的......
  • Maximum Entropy Model最大熵模型
    ​​WelcomeToMyBlog​​​最大熵模型(MaximumEntropyModel)属于对数线性模型,由最大熵原理推导实现.最大熵原理最大熵原理是概率模型学习的一个准则.最大熵原理认......
  • casbin权限模型推演
    无论什么项目只要涉及到多个用户的操作都会开始考虑权限控制,权限管理是一个很常见部分,所以出现了单独处理这个部分的开源项目,即本文要介绍的casbin项目。casbin支持很多......
  • 诸论与模型评估与选择
    诸论及模型评估与选择基本术语数据集(dataset)实例(instance)、样本(sample):每条记录是关于一个事件或者要给对象的描述属性(attribute)、特征(feature):反映事件或对象在某方面......