PlotNeuralNet + ChatGPT创建专业的神经网络的可视化图形

news2024/11/26 4:33:59

PlotNeuralNet:可以创建任何神经网络的可视化图表,并且这个LaTeX包有Python接口,我们可以方便的调用。

但是他的最大问题是需要我们手动的编写网络的结构,这是一个很麻烦的事情,这时 ChatGPT 就出来了,它可以帮我们生成LaTeX代码。在本文中,我将介绍如何安装和使用PlotNeuralNet,展示一些可视化示例,以及如何使用ChatGPT为我们生成LaTeX代码!

PlotNeuralNet

以下说明取来自PlotNeuralNet的说明,一下是ubuntu版

 #Ubuntu 16.04
 sudo apt-get install texlive-latex-extra
 
 #Ubuntu 18.04.2
 sudo apt-get install texlive-latex-base
 sudo apt-get install texlive-fonts-recommended
 sudo apt-get install texlive-fonts-extra
 sudo apt-get install texlive-latex-extra

windows的话需要下载并安装一个LaTeX编译器,比如MiKTeX。然后还要安装一个bash运行程序,比如Git自带的bash或Cygwin。

安装完成后我们就可以使用官方的样例了:

 cd pyexamples/
 bash ../tikzmake.sh test_simple

在Windows上,你可能会遇到一些错误。

…/tikzmake.sh:第4行:python:命令未找到

这时需要打开tikzmake.sh文件,并根据Python版本在第4行、Python2或Python3上进行修改。

比如我这里要改成python3 $1.py而不是python $1.py。

…/tikzmake.sh:第5行:pdflatex:命令未找到

此错误意味着与MikTeX安装相关的环境变量有问题。需要手动将pdflatex添加到环境变量中。

这个基本示例代码如下,我们简单的解释一下都是什么。

 importsys
 sys.path.append('../')
 frompycore.tikzengimport*
 
 # defined your arch
 arch= [
     to_head( '..' ),
     to_cor(),
     to_begin(),
     to_Conv("conv1", 512, 64, offset="(0,0,0)", to="(0,0,0)", height=64, depth=64, width=2 ),
     to_Pool("pool1", offset="(0,0,0)", to="(conv1-east)"),
     to_Conv("conv2", 128, 64, offset="(1,0,0)", to="(pool1-east)", height=32, depth=32, width=2 ),
     to_connection( "pool1", "conv2"), 
     to_Pool("pool2", offset="(0,0,0)", to="(conv2-east)", height=28, depth=28, width=1),
     to_SoftMax("soft1", 10 ,"(3,0,0)", "(pool1-east)", caption="SOFT"  ),
     to_connection("pool2", "soft1"),    
     to_Sum("sum1", offset="(1.5,0,0)", to="(soft1-east)", radius=2.5, opacity=0.6),
     to_connection("soft1", "sum1"),
     to_end()
     ]
 
 defmain():
     namefile=str(sys.argv[0]).split('.')[0]
     to_generate(arch, namefile+'.tex' )
 
 if__name__=='__main__':
     main()

通过上面定义的结构,会成成tex的文件,LaTeX中的等效程序:

 \pic[shift={(0,0,0)}] at (0,0,0)
     {Box={
         name=conv1,
         caption= ,
         xlabel={{64, }},
         zlabel=512,
         fill=\ConvColor,
         height=64,
         width=2,
         depth=64
         }
     };
 
 \pic[shift={ (0,0,0) }] at (conv1-east)
     {Box={
         name=pool1,
         caption= ,
         fill=\PoolColor,
         opacity=0.5,
         height=32,
         width=1,
         depth=32
         }
     };
 
 \pic[shift={(1,0,0)}] at (pool1-east)
     {Box={
         name=conv2,
         caption= ,
         xlabel={{64, }},
         zlabel=128,
         fill=\ConvColor,
         height=32,
         width=2,
         depth=32
         }
     };
 
 \draw[connection]  (pool1-east)    -- node {\midarrow} (conv2-west);

编译成pdf文件如下:

这个可以根据你对Python或LaTeX的熟悉程度来选择,对我来说python更直观一些,所以我使用MiKTeX从Python指令生成LaTeX代码。

下面我们来看一看PlotNeuralNet生成复杂深度神经网络的可视化样例

1、U-Net

U-Net于图像分割任务。它首先由Olaf Ronneberger、Philipp Fischer和Thomas Brox在2015年的论文U-Net: Convolutional Networks for Biomedical Image Segmentation”中提出。

它的名字来源于它独特的“U”形。它允许更精确的分割。

2、VGG16

VGG16是一个卷积神经网络模型,使用ImageNet数据库中的100多万张图像进行训练。

这个模型是由牛津大学的视觉几何小组开发的。它在2014年ImageNet大规模视觉识别挑战赛(ILSVRC)中获得了图像分类和检测的顶级成绩。

它也是一个经典的网络

3、Alexnet

AlexNet是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton于2012年推出。它在2012年ImageNet大规模视觉识别挑战赛(ILSVRC)中以15.3%的错误率赢得前5名后声名大噪。事实上,这是第一个证明深度卷积神经网络对图像分类有效性的模型。

对于那些熟悉由Yann LeCun[4]提出的LeNet架构的人来说,AlexNet的架构是类似的。它只是每个卷积层和堆叠的卷积层有更多的过滤器。论文中还介绍了ReLU激活函数和dropout正则化的使用。

在PlotNeuralNet存储库中还有许多更复杂的示例(HED、SoftMaxLoss、FCN32……),这里就不一一介绍了。

ChatGPT

我们可以看到,在从Python脚本生成的LaTeX代码示例中,各个指令都是非常精确的,所以在开始编写代码之前,都需要对深度神经网络有一个非常清晰的概念。

但是如果我们不知道呢?那么就要靠ChatGPT来帮助我们生成Python或LaTeX代码。

1、ChatGPT生成LaTeX代码

ChatGPT知道LaTeX,但是在给出一个工作示例之前,它在生成代码时遇到了麻烦。所以为了让他生成可视化结构,我首先需要给了他FCN32或FCN8代码。

Here is some LaTeX code to generate an FCN 32 Network using the PlotNeuralNet latex package : […]

然后让他使用上面给出的例子来生成一个新的可视化。

Inspire yourself from this code and generate the LaTeX code to visualize a simple Convolutional Neural Network

根据chatgpt返回的代码,可视化效果如下

与官方例子中给出的FCN32作为示例相比,连接缺失了。并且在这个可视化过程中还缺少一些东西。

不知道是什么原因,ChatGPT犯了一个错误,它们的x_labels没有正确显示。

它生成了x_label={32}而不是x_label={“32”,“32”}。

需要我们手动修复它,会得到下面的可视化结果。

上面的图还手动改变了一些层的宽度。

使用ChatGPT来为我们生成一个工作原型还是可以的。但是还是需要我们去手动修改一些细节。

对于我们的理解而言,Python代码要比LaTeX多很多,能够让他生成Python代码呢?这个经过测试也不太现实,因为Python接口包含非常有限的层数:

  • Input layers
  • Dense (fully connected) layers
  • Convolutional layers
  • Pooling layers
  • Unpooling layers
  • Activations layers (ReLu, Softmax)
  • Skip-Layer connections
  • Residual layers
  • Sum / Add layers
  • Output layers

所以一些特殊层还是需要LaTeX版本。

总结

PlotNeuralNet十分强大,ChatGPT也很强大,使用ChatGPT可以让我们的任务更容易,虽然ChatGPT有局限性。但它可以被用作生成原型的工具,然后可以根据需要进行调整。

最后我们再总结一下提示:

I started writing LaTeX code to visualize a CNN please finish it : […]

这样就ok了

https://avoid.overfit.cn/post/3c080832c52d4929a3bfd38ca8b0a0fd

作者:Clément Delteil

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript学习笔记(3.0)

数组是一种特殊类型的对象。在JavaScript中对数组使用typeof运算符会返回“object”。 但是&#xff0c;JavaScript数组最好以数组来描述。 数组使用数字来访问其“元素”。比如person[0]访问person数组中的第一个元素。 <!DOCTYPE html> <html> <body>&l…

【JavaEE进阶】——第一节.Maven国内源配置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 操作步骤 1.打开项目配置界面&#xff08;当前项目配置&#xff09; 2.检查并配置国内源 3.再次打开项目配置界面&#xff08;新项目配置&#xff09; 4…

Android RecyclerView的notify方法和动画的刷新详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 前言&#xff1a; 本篇讲解了RecyclerView关于通知列表刷新的常用的notify方法。和Recy…

综合练习7 摄氏度转华氏温度(“\t“的使用,循环语句)

综合练习7 摄氏度转华氏温度 使用do…while循环&#xff0c;在控制台输入摄氏温度与华氏温度的对照表。 对照表从摄氏温度-30℃到50℃&#xff0c;每行间隔10℃&#xff0c;运行如下&#xff1a; 摄氏温度&#xff1a;-30℃ 华氏温度&#xff1a;-22.0℉ 摄氏温度&#xff1a;…

【专项训练】动态规划-3

动态规划:状态转移方程、找重复性和最优子结构 分治 + 记忆化搜索,可以过度到动态规划(动态递推) function DP():# DP状态定义# 需要经验,需把现实问题定义为一个数组,一维、二维、三维……dp =[][] # 二维情况for i = 0...M:

自动化测试的定位及一些思考

大家对自动化的理解&#xff0c;首先是想到Web UI自动化&#xff0c;这就为什么我一说自动化&#xff0c;公司一般就会有很多人反对&#xff0c;因为自动化的成本实在太高了&#xff0c;其实自动化是分为三个层面的&#xff08;UI层自动化、接口自动化、单元测试&#xff09;&a…

井字棋--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

实例2&#xff1a;井字棋 井字棋是一种在3 * 3格子上进行的连珠游戏&#xff0c;又称井字游戏。井字棋的游戏有两名玩家&#xff0c;其中一个玩家画圈&#xff0c;另一个玩家画叉&#xff0c;轮流在3 * 3格子上画上自己的符号&#xff0c;最先在横向、纵向、或斜线方向连成一条…

【Leetcode】【简单】35. 搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入:…

MSP430F5529单片机入门学习笔记1

本笔记整理自B站教程MSP430F5529单片机学习视频汇总基于库函数的开发—GPIO库函数右边部分写错了&#xff0c;看的时候注意基于库函数的开发—GPIO实践操作LED交替闪烁#include <msp430.h> /** EXP-GPIO-01.C** Created on: 2023年3月10日* Author: ASUS*/#include…

webRtc概念

webRtc概念 以下的文档整理来自此链接 文档整理了一系列实现web通用接口的ECMAScript APIs &#xff0c;这些接口是为了支持浏览器或者一些其他实现了实时交换协议的设备进行媒体信息和程序数据交换。 1、实现点对点通信的规范&#xff1a; NAT穿透实现与远端节点链接比如&a…

WebRTC开源库内部调用abort函数引发程序发生闪退问题的排查

目录 1、初始问题描述 2、使用Process Explorer工具查看到处理音视频业务的rtcmpdll.dll模块没有加载起来 3、使用Dependency Walker工具查看到rtcmpdll.dll依赖的库有问题 4、更新库之后Debug程序启动时就发生异常&#xff0c;程序闪退 5、VS调试时看不到有效的函数调用堆…

hashmap存储方式 hash碰撞及其解决方式

1.Map的存储特点 在Map这个结构中&#xff0c;数据是以键值对&#xff08;key-value&#xff09;的形式进行存储的&#xff0c;每一个存储进map的数据都是一一对应的。 创建一个Map结构可以使用new HashMap()以及new TreeMap()两种方式&#xff0c;两者之间的区别是&#xff1a…

TVS和稳压管的相同点和不同点

大家好,我是记得诚。 文章目录 介绍相同点不同点介绍 TVS和稳压管都是电路中很常用的电子元器件,都是二极管的一个种类。 TVS二极管全称是Transient voltage suppression diode,也叫瞬态电压抑制二极管。 稳压二极管英文名字Zener diode,又叫齐纳二极管。 关于稳压二极…

Jenkins从下载到部署项目的流程

Jenkins安装配置1.1 Jenkins介绍Jenkins 是一款流行的开源持续集成&#xff08;Continuous Integration&#xff09;工具&#xff0c;广泛用于项目开发&#xff0c;具有自动化构建、测试和部署等功能。官网&#xff1a; http://jenkins-ci.org/。Jenkins的特征&#xff1a;开源…

谷粒学院开发(三):统一日志、异常及前端准备工作

特定异常处理 ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) // 指定出现什么异常会被处理ResponseBody // 为了能够返回数据public R error(Exception e) {e.printStackTrace();return R.error().message("执行了全局异常…

Linux--磁盘存储管理 分区工具 fdisk 分区实操 详解~

上一篇文章介绍了 fdisk 的各个菜单功能&#xff0c;这篇&#xff0c;我们直接实操 管理磁盘 fdisk :分区 &#xff1a; 我们上一篇文章里讲过&#xff0c;上篇文章的 磁盘 /dev/nvme0n1 空间已经满了因此 &#xff0c; 又重新添加了一块儿硬盘~&#xff01;&#xff01;>&g…

传统图像处理之颜色特征

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

UML时序图速查——架构设计必备技能

目录 一、时序图概述 二、时序图元素 1. Actor&#xff08;角色&#xff09;& Object&#xff08;对象&#xff09; 2. Lifeline&#xff08;生命线&#xff09; 3. Message&#xff08;消息&#xff09; 4. Combined Fragment&#xff08;组合片段&#xff09; 5. …

【Linux】多线程---线程控制

进程在前面已经讲过了&#xff0c;所以这次我们来讨论一下多线程。前言&#xff1a;线程的背景进程是Linux中资源及事物管理的基本单位&#xff0c;是系统进行资源分配和调度的一个独立单位。但是实现进程间通信需要借助操作系统中专门的通信机制&#xff0c;但是只这些机制将占…

java并发入门(一)共享模型—Synchronized、Wait/Notify、pack/unpack

一、共享模型—管程 1、共享存在的问题 1.1 共享变量案例 package com.yyds.juc.monitor;import lombok.extern.slf4j.Slf4j;Slf4j(topic "c.MTest1") public class MTest1 {static int counter 0;public static void main(String[] args) throws InterruptedEx…