极智开发 | 随机初始化onnx模型权重的方法

欢迎关注我的公众号 [极智视界],获取我的更多经验分享

大家好,我是极智视界,本文分享一下 随机初始化onnx模型权重的方法。

邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:t.zsxq.com/0aiNxERDq

onnx 模型一直是在算法部署中扮演重要的角色,它是衔接前端训练框架和后端部署硬件之间的不二之选,

有的时候需要随机初始化 onnx 模型权重,比如在对外对接、定位问题的时候,直接提供完整模型比较敏感,但又没办法。这个时候的做法往往是提供一个怀疑存在问题的模型片段 或者是 只提供模型结构而不提供模型权重。这里的随机初始化 onnx 模型权重其实就是只提供模型结构而不提供模型权重,将权重进行随机初始化后,也意味着原来的权重 "失真" 了,这样能够起到一定的保护作用。

考虑到大部分的模型其实都是卷积神经网络 (这里就不考虑 Transformer、大模型啦),所以其实可以再简单点,只对模型中卷积算子的权重和偏置做一个随机初始化,这样就能够达到上面的目的,

直接上代码:

ini 复制代码
import onnx
import numpy as np
import onnxruntime

# 加载模型
model_path = 'your_model.onnx'
model = onnx.load(model_path)

# 遍历模型中的节点
for node in model.graph.node:
    if node.op_type == 'Conv':
        # 获取卷积层的权重和偏置的名称
        weight_name = node.input[1]
        bias_name = node.input[2] if len(node.input) > 2 else None
        # 查找并修改权重和偏置
        for initializer in model.graph.initializer:
            if initializer.name == weight_name:
                # 生成新的随机值
                new_weights = np.random.randn(*initializer.dims).astype(np.float32)
                initializer.float_data[:] = new_weights.flatten().tolist()
            elif initializer.name == bias_name:
                # 生成新的随机值
                new_biases = np.random.randn(*initializer.dims).astype(np.float32)
                initializer.float_data[:] = new_biases.flatten().tolist()

# 保存修改后的模型到一个新文件中
onnx.save(model, 'modified_model.onnx')

这样保存下来的 modified_model.onnx 模型中的卷积算子的权重和偏置都已经是经过随机初始化过的了,就可以稍微放心一点去对接、去提供了。

当然,上面的代码只是对模型中的卷积算子进行了权重和偏置的初始化,要是实在想更加通用一点,想对一般的算子都进行初始化,可以采用下面的代码,

ini 复制代码
import numpy as np
import onnx

# 加载已有的ONNX模型
onnx_path = "your_model.onnx"
model = onnx.load(onnx_path)

# 随机初始化模型权重
def random_init(model):
    for tensor in model.graph.initializer:
        # 使用 NumPy 生成随机数并重新填充权重
        tensor.float_data[:] = np.random.randn(*tensor.dims).astype(np.float32)

# 对模型进行随机初始化
random_init(model)

# 将带有随机初始化权重的模型保存回ONNX文件
onnx.save(model, "modified_model.onnx")

好了,以上分享了 随机初始化onnx模型权重的方法,希望我的分享能对你的学习有一点帮助。


【公众号传送】

《极智开发 | 随机初始化onnx模型权重的方法》

畅享人工智能的科技魅力,让好玩的AI项目不难玩。邀请您加入我的知识星球, 星球内我精心整备了大量好玩的AI项目,皆以工程源码形式开放使用,涵盖人脸、检测、分割、多模态、AIGC、自动驾驶、工业等。一定会对你学习有所帮助,也一定非常好玩,并持续更新更加有趣的项目。 t.zsxq.com/0aiNxERDq

相关推荐
王者鳜錸10 分钟前
讯飞语音唤醒+语音识别+语音合成+文生图完整集成实战
人工智能·文生图·语音识别·xcode·语音生图
码农小白AI16 分钟前
AI报告文档审核助力排气烟度精准管控:IACheck守护绿色动力环境与合规发展新底线
大数据·人工智能
深圳市快瞳科技有限公司20 分钟前
高精度宠物鼻纹识别算法原理解析:从图像采集到特征匹配
人工智能·计算机视觉·智慧城市
DX_水位流量监测22 分钟前
德希科技在线 pH 传感器
人工智能·科技·水质监测·水质传感器·水质厂家·供水水质监测·污水监测
热点速递25 分钟前
苹果首款AI穿戴硬件“Apple Pin”曝光:配iPhone的“AI眼睛”,能否突破独立局限?
人工智能·业界资讯
Java后端的Ai之路44 分钟前
Milvus 向量数据库从入门到精通:AI 时代的“记忆中枢“实战指南(建议收藏!)
数据库·人工智能·milvus·向量数据库·rag
xixixi7777744 分钟前
AI的“血管”:从大模型需求看6G、高速光纤与智算中心网络的技术变革
人工智能·ai·大模型·算力·通信·光纤·政策
AI科技星1 小时前
光速螺旋量子几何统一场论——基于 v ≡ c 公理的四大基本力全维度求导证明与精准数值验证
c语言·开发语言·人工智能·算法·机器学习·平面
云烟成雨TD1 小时前
Spring AI 1.x 系列【17】函数型工具开发与使用
java·人工智能·spring