pytorch 网络可视化(七):PlotNeuralNet

PlotNeuralNet 介绍

PlotNeuralNet 是 github 上做神经网络可视化的一个工具,利用 python 将 .py 文件中定义的网络结构转换成 .tex 文件,最后通过 TeXworks 等工具可以将其转换为 .pdf 等形式来显示网络结构。

1. 安装 Texlive

点击 http://www.tug.org/texlive/ 进入下载链接,选择 on DVD。

在这里插入图片描述
选择 downloading the TeX Live ISO image and burning your own DVD。

在这里插入图片描述
选择 downloading from a nearby CTAN mirror。

在这里插入图片描述
选择 texlive2021.iso 进行下载

在这里插入图片描述

下载得到一个 iso 映像文件,双击打开,再双击 install-tl-windows.bat 文件进入安装向导,注意修改安装路径,勾选安装 TeXworks 前端选项,然后就是漫长的等待安装过程。

在这里插入图片描述

2. 下载 PlotNeuralNet 工具包

github 链接:https://github.com/HarisIqbal88/PlotNeuralNet

3. 运行自带测试代码

用 pycharm 或者别的 python 编辑器打开 PlotNeuralNet 工程,进入到 pyexamples 路径下,打开 unet.py 文件直接运行。此时会在当前路径下生成一个 unet.tex 文件。

在这里插入图片描述
打开 TeXworks editor 软件,选择文件打开刚开路径下的 unet.tex 文件。

在这里插入图片描述
点击绿色箭头运行,会直接生成并打开一个 unet.pdf 文件,如果显示不完整可以点击适应页面或者将窗口放大,结果如下。

在这里插入图片描述
可以看出输出的网络图非常好看,每一层的 H,W,C 也都是自己可以定义的。

4. 运行自定义测试代码

PlotNeuralNet 的一个弊端就是它是用户利用代码来直接生成并定义的,操作难度较高,其实也不大实用,但在制作论文插图的时候是比较好的。下来通过一个自定义的测试代码来简单介绍使用方法(类似 U-Net):

import sys
sys.path.append('../')
from pycore.tikzeng import *
# 自定义一个网络结构
arch = [
    to_head('..'),
    to_cor(),
    to_begin(),

    # 写入网络结构,其他代码不要改动
    to_Conv("conv1", 64, 3, offset="(0,0,0)", to="(0,0,0)", height=128, depth=128, width=3),
    # 参数列表:名字;左下角数字大小和厚度;相对于上一幅图的 x,y,z 坐标;对应放在 conv1 的 东(右边)边;高度;宽度;厚度
    to_Conv("conv2", 64, 32, offset="(5,0,0)", to="(conv1-east)", height=64, depth=64, width=32),
    to_Conv("conv3", 64, 32, offset="(5,0,0)", to="(conv2-east)", height=32, depth=32, width=64),
    to_Conv("conv4", 64, 32, offset="(5,0,0)", to="(conv3-east)", height=16, depth=16, width=128),
    to_Conv("conv5", 64, 32, offset="(5,0,0)", to="(conv4-east)", height=16, depth=16, width=128),
    to_Conv("conv6", 64, 32, offset="(5,0,0)", to="(conv5-east)", height=32, depth=32, width=64),
    to_Conv("conv7", 64, 32, offset="(5,0,0)", to="(conv6-east)", height=64, depth=64, width=32),
    to_Conv("conv8", 64, 3, offset="(5,0,0)", to="(conv7-east)", height=128, depth=128, width=3),
    # 箭头连接
    to_connection("conv1", "conv2"),
    to_connection("conv2", "conv3"),
    to_connection("conv3", "conv4"),
    to_connection("conv4", "conv5"),
    to_connection("conv5", "conv6"),
    to_connection("conv6", "conv7"),
    to_connection("conv7", "conv8"),
    # 跳跃连接
    to_skip("conv2", "conv7"),

    to_end()
    ]


def main():
    namefile = str(sys.argv[0]).split('.')[0]
    to_generate(arch, namefile + '.tex')


if __name__ == '__main__':
    main()

运行结果:

在这里插入图片描述

5. 结语

  • 一般情况下我们查看自定义网络的结构,主要还是查看一些模块间连接方式,特征图变化,参数变化等,而 PlotNeuralNet 是一种完全脱离实际现有网络的工具,其中的一切参数都是自定义的。
  • 虽然 PlotNeuralNet 出的神经网络结构图相比其他工具要好看一些,但它上手的难度比较大,而且只有一些简单的连接等操作,遇到相对复杂的网络花费的时间远大于直接用作图软件画的时间。
  • 只能说可以在做论文插图的时候尝试一下,其他情况完全没必要,相信肯定有一些软件能画比 PlotNeuralNet 更漂亮的神经网络图。
<think>好的,我现在需要解决用户的问题,即如何通过批处理(.bat)脚本来删除或清理HEX文件中多余的FF填充数据。首先,我要回忆一下之前用户提供的引用内容,看看有没有相关的信息。 用户提到使用Vector的HexView工具,并且引用[3]和[4]都涉及到使用HexView的命令行接口来处理HEX文件。特别是引用[4]中提到了剪切数据的功能,使用/CR参数来移除特定地址范围的数据。但用户现在的问题是要删除连续的FF填充数据,而不是某个固定地址范围的数据。所以可能需要更灵活的方法。 HexView工具是否有检测连续FF并删除的功能呢?我需要查阅一下HexView的文档或者用户提供的引用。引用[3]提到HexView支持增删改查HEX文件,并且有填充的功能。可能填充是用特定的值填充,但如何删除已有的填充呢? 用户之前的问题中,引用[4]中的/CR参数是剪切指定地址范围的数据,但需要知道具体的地址范围。如果FF填充分布在不同的地址段,可能需要先识别这些地址,然后逐一剪切。但手动指定每个地址范围不现实,尤其是当文件较大时。 或许可以结合HexView的其他功能,比如查找连续FF的区域,并生成对应的地址范围,再用/CR参数处理。不过,目前引用的内容中没有提到HexView是否有自动检测连续FF的功能。因此,可能需要编写一个脚本,先解析HEX文件,找到所有连续FF的地址范围,然后生成对应的HexView命令进行剪切。 不过,这样的脚本可能会比较复杂,需要解析HEX文件的格式,识别连续的FF数据块。可能超出了批处理脚本的能力范围,需要借助其他工具或者HexView自身的功能。 或者,是否有HexView的命令可以直接删除所有连续的FF数据?例如,使用某种替换功能,将连续超过一定长度的FF替换为空。但引用中并没有提到这样的功能,可能需要查看HexView的文档。 另一个思路是,如果这些FF填充位于文件的末尾或者特定的未使用区域,可以通过指定地址范围来删除。例如,假设从地址0x1000到0x1FFF都是FF,那么可以用/CR参数剪切这个范围。但用户的问题可能是指任意位置的连续FF,而不仅仅是特定区域。 在这种情况下,可能需要分步骤处理:首先使用HexView将HEX文件转换为二进制(BIN),然后用其他工具处理BIN文件,删除连续的FF,再转换回HEX。但用户希望用.bat脚本集成HexView,所以可能需要HexView本身的功能。 或者,用户提到的引用[5]中的签名和加密功能可能不相关,但引用[3]中的填充操作可能相关,例如,填充时可以用特定值填充,但如何删除已有的填充呢? 可能需要进一步分析HexView的命令行参数。根据引用[4],/CR参数可以剪切指定的地址范围,但需要知道这些地址范围。因此,解决方案可能需要先用HexView生成一个地址范围列表,然后逐一剪切。 或者,是否存在HexView的选项可以直接删除所有连续的FF数据?例如,使用类似“删除所有连续的FF超过N字节”的功能。如果HexView支持正则表达式或模式匹配,可能可以实现。但根据现有引用,没有明确提到这样的功能。 因此,可能的步骤是: 1. 使用HexView将HEX文件转换为二进制(BIN)文件。 2. 使用其他工具或自定义脚本处理BIN文件,识别并删除连续的FF数据块。 3. 将处理后的BIN文件转换回HEX格式。 但用户希望全部通过批处理脚本和HexView完成,可能需要HexView本身支持这样的操作。假设HexView没有直接支持,可能需要结合其他工具,如使用Python或PowerShell脚本处理BIN文件,再在.bat中调用这些脚本。 不过,用户明确要求使用.bat脚本,所以可能需要寻找纯HexView的方法。或者,是否有HexView的命令可以逐段检查并删除连续的FF? 另一个可能的方法是使用HexView的填充功能,将特定的地址范围填充为空白(即删除),但需要先确定哪些地址范围是连续的FF。这又回到了如何确定这些地址的问题。 总结来说,可能的解决方案步骤: 1. 解析原始HEX文件,找到所有连续FF的地址范围。 2. 生成对应的HexView命令,使用/CR参数剪切这些地址范围。 3. 执行HexView命令处理HEX文件。 但如何解析HEX文件并找到连续FF的地址范围呢?这可能需要编写额外的脚本,或者使用HexView本身的某些功能。例如,HexView是否有导出数据为某个格式,可以分析数据内容? 如果没有,可能需要分两步: a. 使用HexView的导出功能将HEX文件转换为二进制BIN文件。 b. 分析BIN文件,找到所有连续FF的区域的起始和结束地址。 c. 将这些地址范围作为参数传递给HexView的/CR命令,剪切这些区域。 但这个过程需要额外的工具来分析BIN文件,可能超出了批处理脚本的能力,需要借助其他编程语言如Python。不过用户可能希望仅使用批处理和HexView。 如果HexView可以输出文件的地址范围和数据,可能可以编写一个批处理脚本来处理输出,识别连续FF的区域。例如,HexView是否有命令可以按地址输出数据,然后批处理脚本逐行分析,记录连续FF的起始和结束地址。 不过,这可能比较复杂,尤其是处理大文件时。此外,批处理脚本处理二进制数据可能不太方便,可能需要HexView提供某种文本格式的输出。 另一种可能:HexView的某个命令可以直接删除所有连续的FF数据。例如,使用替换命令将连续的FF替换为空,但需要确保替换操作不会破坏文件结构。但根据现有引用,没有提到这样的功能。 综上所述,最可行的办法可能是结合HexView的剪切命令和外部脚本分析HEX文件,生成需要剪切的地址范围列表,然后在批处理脚本中调用HexView进行处理。 不过,由于用户可能没有其他工具,只能使用HexView和批处理脚本,可能需要另一种方式。例如,如果HexView支持脚本输入,可以编写一个HexView脚本文件,其中包含多个/CR命令来剪切所有连续FF的区域。 因此,最终的步骤可能如下: 1. 使用HexView将HEX文件转换为二进制(BIN)文件。 2. 使用自定义脚本(如Python)分析BIN文件,找出所有连续FF的地址范围。 3. 生成一个包含多个/CR参数的HexView命令,剪切这些地址范围。 4. 执行HexView命令处理原始HEX文件,生成清理后的HEX文件。 但用户可能希望整个过程在.bat中完成,无需其他脚本语言。这时候,可能需要寻找HexView自身的功能来识别这些区域,或者接受手动指定地址范围。 如果用户知道需要删除的地址范围,可以直接在批处理脚本中使用HexView的/CR参数。例如: ``` hexview.exe /CR:0x1000-0x1FFF input.hex output.hex ``` 但如果不知道具体地址,就需要自动化识别。这时候可能需要结合其他工具,或者HexView的某些高级功能。 假设用户无法使用其他工具,只能使用HexView和批处理脚本,可能的解决方案是: - 编写一个批处理脚本,调用HexView多次,每次处理一个地址范围,但这些地址范围需要提前确定。 因此,可能无法完全自动化,除非HexView有某种检测功能。 经过上述思考,可能的结论是:使用HexView的剪切命令,但需要知道具体的地址范围。如果用户无法提供这些地址范围,就需要其他工具辅助分析HEX文件,找到连续FF的区域,然后生成对应的HexView命令。 因此,在回答中需要说明这个步骤,并给出示例脚本,结合HexView和可能的其他工具(如PowerShell或Python)来识别地址范围,然后调用HexView进行处理。如果用户只能使用HexView和批处理,可能需要手动处理,或者建议使用HexView的其他功能。</think>通过Vector HexView工具的命令行功能,可以使用以下步骤实现HEX文件连续FF数据的清理: 1. **识别有效数据范围** 使用HexView的地址范围分析功能,结合/CR剪切参数清理无效区域。假设有效数据范围为0x1000-0x7FFF,其余区域为FF填充: ```bat hexview.exe input.hex /CR:0x0-0xFFF /CR:0x8000-0xFFFF /OUT:output.hex ``` 2. **动态检测填充区域(需自定义逻辑)** 若需自动化检测连续FF区域,需编写辅助脚本生成地址范围列表。例如使用Python解析HEX文件后生成批处理命令: ```python # find_ff_ranges.py 示例代码 with open("input.hex", "rb") as f: data = f.read() # 检测连续FF的逻辑(伪代码) ranges = detect_ff_ranges(data) with open("cut_commands.bat", "w") as bat: bat.write("hexview.exe input.hex " + " ".join([f"/CR:{r}" for r in ranges]) + " /OUT:output.hex") ``` 3. **集成到批处理脚本** 将上述逻辑封装为可执行流程: ```bat @echo off :: Step1: 转换HEX为BIN以便分析 hexview.exe input.hex /BIN:temp.bin :: Step2: 调用Python脚本检测连续FF区域 python find_ff_ranges.py :: Step3: 执行生成的剪切命令 call cut_commands.bat :: 清理临时文件 del temp.bin ```
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听 风、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值