当前位置:   article > 正文

使用python对bin文件进行操作_python 写bin文件

python 写bin文件

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

完整保存参数代码

# 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/772709
推荐阅读
相关标签
  

闽ICP备14008679号