Python绘制神经网络模型图

python,绘制,神经网络,模型 · 浏览次数 : 974

小编点评

**神经网络结构可视化方法介绍** 本文介绍了使用 Python 和 `ann_visualizer` 模块对神经网络模型进行可视化绘图的方法。 **步骤:** 1. **安装必要的模块:** - 使用 `pip` 安装 `ann_visualizer` 模块:`pip install ann_visualizer` 2. **可视化神经网络模型:** - 使用 `ann_viz()` 函数对神经网络模型进行可视化: ```python ann_viz(DNNModel, view=True, filename='G:/CropYield/02_CodeAndMap/01_SavedPicture/MyANN.gv', title='ANN') ``` 3. **选择可视化格式:** - 可选择 PDF 和图片格式保存绘图结果。 **示例代码:** ```python # 导入模块 import ann_visualizer # 建立神经网络模型 model = keras.Sequential([ # 模型层 ]) # 可视化模型 ann_viz(model, view=True, filename='G:/CropYield/02_CodeAndMap/01_SavedPicture/MyANN.gv', title='ANN') ``` **注意:** - `DNNModel` 是一个神经网络模型的实例。 - `view=True` 参数允许您在代码执行后直接显示绘图结果。 - `filename` 参数指定绘图结果的保存位置。 - `title` 参数设置绘图标题。

正文

  本文介绍基于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这一第三方库进行绘图。

  至此,大功告成。

与Python绘制神经网络模型图相似的内容:

Python绘制神经网络模型图

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

Python 潮流周刊#51:用 Python 绘制美观的图表

本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。 本期周刊分享了 12 篇文章,12 个开源项目,赠书 5 本《图解IT基础设施》,

多变量两两相互关系联合分布图的Python绘制

本文介绍基于Python中seaborn模块,实现联合分布图绘制的方法~

Python批量绘制遥感影像数据的直方图

本文介绍基于Python中gdal模块,实现对大量栅格图像批量绘制直方图的方法~

如何使用Python和Plotly绘制3D图形

本文分享自华为云社区《Plotly绘制3D图形》 ,作者:柠檬味拥抱。 在数据可视化领域,三维图形是一种强大的工具,可以展示数据之间的复杂关系和结构。Python语言拥有丰富的数据可视化库,其中Plotly是一款流行的工具,提供了绘制高质量三维图形的功能。本文将介绍如何使用Python和Plotly

[python] 基于PyWaffle库绘制华夫饼图

华夫饼图Waffle chart是一种独特而直观的图表,用于表示分类数据。它采用网格状排列的等大小方格或矩形,每个方格或矩形分配不同的颜色或阴影来表示不同的类别。这种可视化方法有效地传达了每个类别在整个数据集中的相对比例。本文介绍如何使用基于Python的PyWaffle库绘制华夫饼图。PyWaff

Python从零到壹丨带你了解图像直方图理论知识和绘制实现

摘要:本文将从OpenCV和Matplotlib两个方面介绍如何绘制直方图,这将为图像处理像素对比提供有效支撑。 本文分享自华为云社区《[Python从零到壹] 五十.图像增强及运算篇之图像直方图理论知识和绘制实现》,作者:eastmount。 一.图像直方图理论知识 灰度直方图是灰度级的函数,描述

Python批量读取HDF多波段栅格数据并绘制像元直方图

本文介绍基于Python语言gdal模块,实现多波段HDF栅格图像文件的读取、处理与像元值可视化(直方图绘制)等操作~

Python按条件筛选、剔除表格数据并绘制剔除前后的直方图

本文介绍基于Python语言,读取Excel表格文件数据,以其中某一列数据的值为标准,对于这一列数据处于指定范围的所有行,再用其他几列数据的数值,加以数据筛选与剔除;同时,对筛选前、后的数据分别绘制若干直方图,并将结果数据导出保存为一个新的Excel表格文件的方法~

全网最适合入门的面向对象编程教程:18 类和对象的 Python 实现-多重继承与 PyQtGraph 串口数据绘制曲线图

本文主要介绍了Python中创建自定义类时如何使用多重继承、菱形继承的概念和易错点,同时讲解了如何使用PyQtGraph库对串口接收的数据进行绘图。