python对bin文件操作的步骤
背景
博主想对神经网络模型的参数写入 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