赞
踩
博主想对神经网络模型的参数写入 bin
文件,方便在后续创建IP的过程中读取数据进行验证,记录 python
读取 pytorch
的模块参数并进行bin文件写入和读取操作。本文以3x3卷积为例。
本文涉及的模块
struct: 该模块可以执行 Python 值和以 Python bytes
对象表示的 C 结构之间的转换。
pytorch
:神经网络框架
简单示例:
import struct SAVE_DIR = "./conv3x3_pool_relu_outputs" import struct val = -1 a = struct.pack('i', val)# 将 -1 进行二进制打包(4字节), 默认情况下,打包给定 C 结构的结果会包含填充字节以使得所涉及的 C 类型保持正确的对齐 print(a) # b'\xff\xff\xff\xff',确实是-1的二进制补码表示 file = os.path.join(SAVE_DIR, "wt.bin") with open(file, "ab+") as fw: # 二进制追加形式 fw.write(a) with open(file, "rb") as fr: # 二进制读形式 b = struct.unpack('i', fr.read(4)) print(b[0]) # (-1,),返回元组 print(b[0] == val) # true
完整保存参数代码:
# coding:utf-8 """ for generate conv3x3_pool_relu and data for test. """ import os import torch import torch.nn as nn # hyper param Hin = 6 Win = 12 CHin = 16 CHout = 16 step = 0.1 G_SIZE = 8 SAVE_DIR = "./conv3x3_pool_relu_outputs" seed = 2021 torch.random.manual_seed(seed) def format_num(x): """ >0 -> 1, <0 -> -1. switch func. """ return (torch.randn_like(x) > 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。