囚徒5.4_基于texlive的PlotNeuralNet画深度学习框架图

news/2025/3/16 22:35:58/文章来源:https://www.cnblogs.com/qt-pyq/p/18233614

首先下载并安装texlive

连接如下texlive安装教程

接着下载PlotNeuralNet项目

下载链接PlotNeuralNet

下载

对PlotNeuralNet的一些解释

  1. 它其实是基于texlive语言,然后通过python语言按照texlive的语法格式进行拼接生成tex文档之后使用pdflatex命令生成pdf.
  2. PlotNeuralNet中有一系列的写好的函数,主要注意layers、pycore、pyexamples三个文件夹。
    • 其中pyexamples文件夹中存放的是我们用于生成tex、进行生成pdf的python画图文件,这个是我们自己写的python文件放在这里(其实放在哪里都行,只是该路径的事而已)。
    • pycore文件夹中存放的是它写好的一些用于画图的函数,放在tikzeng.py和blocks.py中。对这俩解释一下这俩文件中的函数它的本质就是按照texlive的语法,根据你的输入参数进行拼接,他就是组合成texlive命令生成tex文件,然后通过texlive生成pdf。这里面的函数你可以自己定义,在你学习了texlive语言后,你可以随便按照自己的需求进行定义函数。
    • layers文件夹 其中有一个init.tex文件,它的作用是调用三个sty文件
    • 需要注意的是在你画图时tikzeng.py中to_head、to_cor、to_begin三个函数时必须添加的,时必不可少的,一个时添加init.tex的引用路径,一个时添加层颜色定义,最后一个是文档的开头
  3. 关于路径问题
    • draw_network.py,中要把pycore中的tikzeng.py中的函数导入,这需要添加路径,它官方用的sys库添加路径,我不知道为什么在我的电脑上添加后还是找不到。我换了一下用的os库
    • 第二个路径问题是关于layers文件夹中的init.tex导入,这个是基于你生成的tex文件的路径的,它修改的地方有两处,一个是tikzeng.py中的to_hand函数中,一个是在你使用函数输入参数时,根据你最后tex生成在哪,你选择性修改,如果你不是时常用可以直接在tex文件中修改。
    • 最后我在画图的python文档后面添加了直接生成pdf的命令,并删除附带文件的命令
    • 代码如下

import sys
import os# 确保 pycore 目录在 Python 路径中
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'pycore')))# 导入 tikzeng 模块
try:from tikzeng import *print("Module imported successfully.")
except ImportError as e:print("Error importing module:", e)sys.exit(1)# 定义网络结构
arch = [to_head( ''),to_cor(),to_begin(),to_input_p('image/MH.jpg', width=10, height=10, name="input",caption="Input"),#block-001to_Conv(name='conv1', s_filer=3, n_filer=512, offset="(0,0,0)", to="(0,0,0)", width=4, height=40, depth=40, caption="Block1"),to_BN(name='bn1', offset="(0,0,0)", to="(conv1-east)", width=1, height=40, depth=40, caption=""),to_Relu(name='relu1', offset="(0,0,0)", to="(bn1-east)", width=1, height=40, depth=40, caption=""),to_Pool(name="pool1", offset="(0,0,0)", to="(relu1-east)", width=1, height=20, depth=20, opacity=0.5, caption="MaxPool1"),#block-002to_Conv(name='conv2', s_filer=3, n_filer=512, offset="(2,0,0)", to="(pool1-east)", width=2, height=20, depth=20, caption="Block2"),to_BN(name='bn2', offset="(0,0,0)", to="(conv2-east)", width=1, height=20, depth=20, caption=""),to_Relu(name='relu2', offset="(0,0,0)", to="(bn2-east)", width=1, height=20, depth=20, caption=""),to_Pool(name="pool2", offset="(0,0,0)", to="(relu2-east)", width=1, height=10, depth=10, opacity=0.5, caption="MaxPool2"),to_connection( "pool1", "conv2"),#block-003to_Conv(name='conv3', s_filer=3, n_filer=512, offset="(2,0,0)", to="(pool2-east)", width=1, height=10, depth=10, caption="Block3"),to_BN(name='bn3', offset="(0,0,0)", to="(conv3-east)", width=1, height=10, depth=10, caption=""),to_Relu(name='relu3', offset="(0,0,0)", to="(bn3-east)", width=1, height=10, depth=10, caption=""),to_connection( "pool2", "conv3"),#block-004to_Conv(name='conv4', s_filer=3, n_filer=1024, offset="(2,0,0)", to="(relu3-east)", width=1, height=10, depth=10, caption="Block4"),to_BN(name='bn4', offset="(0,0,0)", to="(conv4-east)", width=1, height=10, depth=10, caption=""),to_Relu(name='relu4', offset="(0,0,0)", to="(bn4-east)", width=1, height=10, depth=10, caption=""),to_connection( "relu3", "conv4"),#block-005to_Conv(name='conv5', s_filer=3, n_filer=1024, offset="(2,0,0)", to="(relu4-east)", width=2, height=10, depth=10, caption="Block5"),to_BN(name='bn5', offset="(0,0,0)", to="(conv5-east)", width=1, height=10, depth=10, caption=""),to_Relu(name='relu5', offset="(0,0,0)", to="(bn5-east)", width=1, height=10, depth=10, caption=""),to_connection( "relu4", "conv5"),to_Flatten(name='flatten', offset="(2,0,0)", to="(relu5-east)", width=1, height=1, depth=128, caption="Flatten"),to_connection( "relu5", "flatten"),to_FullyConnected(name="fc1", s_filer=1, n_filer=1024, offset="(2,0,0)", to="(flatten-east)", width=2, height=1, depth=128, caption="FC1"),to_connection( "flatten", "fc1"),to_Dropout(name="dropout", s_filer=0.3, n_filer=1024, offset="(1,0,0)", to="(fc1-east)", width=2, height=1, depth=128, caption="Dropout"),to_connection( "fc1", "dropout"),to_FullyConnected(name="fc2", s_filer=1, n_filer=1, offset="(2,0,0)", to="(dropout-east)", width=1, height=1, depth=1, caption="FC2"),to_connection( "dropout", "fc2"),to_SoftMax(name="softmax", s_filer=1, offset="(1,0,0)", to="(fc2-east)", width=1, height=1, depth=1, caption="Output"),to_connection( "fc2", "softmax"),to_end()
]# 绘制网络结构图
def main():filename = os.path.basename(__file__).split('.')[0]  # 获取当前脚本的文件名(不含扩展名)to_generate(arch, filename + '.tex')  # 生成 LaTeX 文件os.system('pdflatex ' + filename + '.tex')  # 调用 pdflatex 命令编译 LaTeX 文件,tex文件生成在项目目录下os.remove(filename + '.log')  # 删除 .log 文件os.remove(filename + '.aux')  # 删除 .aux 文件os.remove(filename + '.tex')  # 删除 .tex 文件if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/720494.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二次大作业BLOG心得

(1)前言: 知识点: ①ArrayLsit的知识点: ArrayList 是 Java 中的动态数组实现,它提供了自动调整大小的功能,可以根据需要动态增长或收缩。 ArrayList 可以存储任意类型的对象,并支持随机访问,即可以通过索引快速访问列表中的元素。 ArrayList 内部通过数组实现,当元素…

python 函数 形参前带*或者两个星** 收集元组或者字典,实参前带星*或者两个星** 解开序列或者字典

函数的形参前面带一个星*,代表着不定长参数,实际上是收集了不定长的实参,作为一个元组。 形参前面带两个星**,代表可以接收不定长参数,并且调用该函数时实参要指定参数名,实际上是收集了一个不定键个数的字典。 实参前带一个星*,表示解开当前的序列,再做为参数传递。 实…

Address localhost:1099 is already in use

端口号被占用 netstat -ano查出占用这个端口号的进程 在任务管理器里终止

作业总结

这学期才接触java,面向对象以前只在C里面用过一点,所以一开始对于怎么写,以及java语法有点不太适应。 个人体会: ​ 关于类: 1、类似C中的struct,构造函数、内置方法(函数 )都比较相似 2、但是无法重载运算符,这是比较难受的一点。 3、尽量避免代码的重复,把private和p…

TCP概述

概述 TPC:传输控制协议,TCP协议是面向连接的、可以实现端对端通信的可靠的协议。 TCP协议传输数据时会为每个字节分配一个序列号,通过这个序列号就可以判断数据是否重复到达以及数据是否丢失,还可以通过序列号对数据进行排序。 报首格式TCP建立连接的三次握手过程TCP三次挥手…

基于毫米波雷达的手势识别算法

摘要 基于毫米波的手势识别技术提供了良好的人机交互体验。先前的工作专注于近距离手势识别,但在范围扩展方面不够,即他们无法识别距离相当大的噪声运动超过一米的手势。在本文中,我们利用一种新的数据处理方法和定制的人工卷积神经网络(CNN)设计了一个远程手势识别模型。…

POSTGRESQL中时间戳的奥秘timestamptz

哈喽,大家好,我是木头左!一、前言 在日常的数据库操作中,经常会遇到各种时间相关的数据类型,如DATE、TIME、TIMESTAMP等。这些时间类型的处理方式和精度差异,直接影响到对数据的查询和分析结果。今天,就来深入探讨一下POSTGRESQL中的两个重要时间戳类型:timestamp和tim…

6.5数组--模拟、偏移量-螺旋矩阵

6.5打卡M:59.螺旋矩阵II 题意描述给你一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1:输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2: 输入:n = 1 输出:[[1]]提示:1 <= n <= 20思路这道题目…

【Java】JVM字节码分析

Java 字节码是Java源代码编译生成的中间形式,赋予Java跨平台特性,通过对字节码的分析,可以迅速找到代码的性能瓶颈。一、功能 1、工作原理2、解释和运行 jvm本质上是运行在计算机上的程序,负责运行java字节码文件 对字节码文件中的指令,实时的解释成机器码,供计算机执行 …

23柏鹭杯-misc

我记得比赛的时候,misc都是0解。 怎么不算另类的1血呢? help_me实在不会,arm看不了一点消失的钥匙 先看验证逻辑,能够看到generateZipPassword和decryptFlag这两个方法内容不见了通过在apk中寻找半年,找到一个时间不对的classes3.dex,查看hex发现是gz压缩导出解压一下,拿…

云原生时代:从 Jenkins 到 Argo Workflows,构建高效 CI Pipeline

ACK One Serverless Argo 工作流作为全托管的 Argo 工作流服务,可以帮助您实现更大规模、具有更快的运行速度、及更低成本的 CI Pipeline,与 ACK One GitOps[8](Argo CD)、Argo Event 等事件驱动架构可以构建完整的自动化 CI/CD Pipeline。作者:蔡靖 Argo Workflows Argo …