首页 > 编程语言 >Python绘制神经网络模型图

Python绘制神经网络模型图

时间:2023-02-20 14:23:05浏览次数:46  
标签:keras Python ann 神经网络 可视化 模块 绘图 绘制

  本文介绍基于Python语言,对神经网络模型的结构进行可视化绘图的方法。

  最近需要进行神经网络结构模型的可视化绘图工作。查阅多种方法后,看到很多方法都比较麻烦,例如单纯利用graphviz模块,就需要手动用DOT语言进行图片描述,比较花时间;最终,发现利用第三方的ann_visualizer模块,可以实现对已有神经网络的直接可视化,过程较为方便,本文对此加以详细介绍。

  此外,如果需要在MATLAB中实现神经网络构建与简单的可视化,大家可以查看MATLAB人工神经网络ANN代码;如果要借助软件或在线工具进行不需要代码的神经网络可视化,可以查看我们后期的博客。

  相关环境的版本信息:Anaconda Navigator1.10.0Python3.8.5

  首先,下载与安装必要的模块ann_visualizer。打开Anaconda Prompt (Soft)

  在弹出的界面中输入:

pip install ann_visualizer

  即可完成ann_visualizer模块的安装。

  接下来,我们就可以借助以下仅仅一句代码对神经网络模型进行可视化了。

ann_viz(DNNModel,view=True,filename='G:/CropYield/02_CodeAndMap/01_SavedPicture/MyANN.gv',title='ANN')

  其中,DNNModel就是我们已经建立好的神经网络模型,任意神经网络模型均可——可以是一个简单的浅层人工神经网络,也可以是一个相对复杂的全连接深度神经网络view表示是否在代码执行后直接显示绘图结果;filename是绘图结果的保存位置,需要以.gv结尾;title就是神经网络图片的名称。

  在这里,我就直接以Python TensorFlow深度神经网络回归:keras.Sequential中介绍并建立的深度神经网络加以可视化。

  第一次运行代码时发现,出现以下报错:

  报错提示我没有安装graphviz模块,但其实之前在进行随机森林决策树的可视化(也就是Python实现随机森林RF并对比自变量的重要性)时,早已经将这一模块安装过了,并且当时用到graphviz这一模块的代码也没有报错。通过查阅,发现这里需要重新安装一下python-graphviz这个新的模块。因此我们打开Anaconda Prompt (Soft),输入代码:

conda install python-graphviz

  如下图所示:

  安装之后这里就不报错啦~

  结果紧接着又报出了新的错误,说我的keras模块没有安装:

  这就不对了,明明在进行深度神经网络构建时都没有出现问题,甚至在这一句报错的下方连深度神经网络的误差绘制曲线都能显示(误差曲线的精度的确很差,大家不用在意~因为这里我们仅仅是做一个示范,所以Epoch次数就调得很小),说明keras模块应该是没问题的。

  随后考虑到,这里报错的keras是在ann_visualizer的文件环境下,可能是环境不同导致的。打开Anaconda Navigator,在base (root)环境下确实找不到keras

  那么我这里就图方便,直接在base (root)环境下再安装一个keras。安装方法同上,输入代码即可:

pip install keras

  然后这里就不报错啦~

  接下来,经过多次尝试发现,这一方法进行神经网络可视化时,一是不能存在正则化层与BatchNormalization层;二是LeakyReLU层与Dropout层的总数量不能过多,否则绘图结果会出现问题——这就显得这一可视化方法稍微有点鸡肋了,但是其对于基本的神经网络绘图而言其实也已经很不错了。因此,我就将Python TensorFlow深度神经网络回归:keras.Sequential中的神经网络上述对应的层删除或注释掉。

  如下图,首先,将当初我的代码对应的LeakyReLU层与Dropout层注释掉:

  然后执行代码,即可进行神经网络的可视化。且绘制出的图将会自动打开在PDF阅读软件中,如下图(版面有限,这里就只是绘图结果的一部分)。

  还是很不错的~我们还可以直接将其转换为图片格式,看起来就更直观了:

  如果再取消Dropout层的注释,即绘图时加上Dropout层,也还是很不错的:

  如果我们再加上LeakyReLU层,就成了这个乱七八糟、不太正确的样子(原图实在太大了,就只给大家截取图片的一部分):

  可以看到,这样的话就有些问题了。

  最后,我们看一下这个ann_visualizer第三方库的源代码,可以看到该库支持绘图的不同种类神经网络层;如果大家的神经网络包含这些层,就可以用ann_visualizer这一第三方库进行绘图。

  至此,大功告成。

标签:keras,Python,ann,神经网络,可视化,模块,绘图,绘制
From: https://www.cnblogs.com/fkxxgis/p/17137210.html

相关文章

  • python 学习
    www.pythonthree.compytubePytube是一个小型的、无依赖性的Python模块,用于从Internet访问视频,必须先安装它才能使用它。当你有pip时,安装很简单。要使用pip安装Py......
  • Python__26--文件操作
    1文件编码格式设定程序开头#encoding=gbk(编码格式)2文件的读写原理Python操作文件>打开或新建文件>读写文件>关闭资源解释器运行py文件使用操作系统资源对硬盘中......
  • 使用python实现渔网创建
    使用python实现渔网创建fromshapely.geometryimportPolygonimportgeopandasasgpddefFishnet(boundary,cell_height,cell_width)->None:#渔网多边形......
  • 01Python变量的使用
    Python变量变量的定义变量:在程序运行过程中,值会发生变化的量把程序运算的中间结果临时存到内存里,以备后面的代码继续调用,这几个名字的学名就叫做“变量”。变量的作......
  • python系列 - 异常处理
    错误与异常通常来说,程序中的错误至少包含两种:一种是语法错误,另一种则是异常语法错误:代码不符合编程规范,无法被识别与执行异常:程序语法正确且可以被执行,但执行过程中遇到......
  • Python爬虫通用代码框架代码示例
    刚开始入门学习python爬虫会遇到各种各样的问题,如果以当时的学识想必处理起来也十分困难,那么,如果你拥有良好的编程习惯会让你轻松很多。当我们在使用Requests库时经常遇到......
  • Python正则替换请求头格式代码
    有时候请求网站的时候需要携带请求头,从浏览器扒下来的请求头手动操作很不方便,代码类似如下:Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,......
  • python 二分查找算法
    python二分查找算法 楔子如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做?l=[2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,......
  • Python爬虫Scrapy框架是什么?
    之前我们有谈到过有关爬虫的两种爬虫方式,一种是静态的利用Requests+bs4,而另一种就是利用Scrapy框架来进行的专业级的数据抓取。一、什么是Scrapy框架?那么什么是Scrapy框......
  • Pycharm cannot set up a python SDK
    一、问题背景进入Pycharm后,打开之前的项目,打开Pycharm→file→settings→projectinterpreter,按照下图1选择配置之后,点击【OK】会出现报错,如图2我的环境上有很多之前的包......