如何在 Python 中可视化神经网络架构

使用 Jupyter 或 Google Colab 创建神经网络图解表示的快速指南

图片来源 — 由作者使用 Visualkeras 和 Jupyter Notebook 开发。

通常,在使用人工神经网络或其他变体(例如卷积神经网络或递归神经网络)时,我们希望可视化并创建编译模型的图形表示。这可以解决两个目的:

  1. 在定义和训练多个模型时,我们可以可视化模型的深度并比较不同的层以及它们是如何按顺序放置的。
  2. 可以更好地理解模型结构、每层使用的激活函数、每层的形状(神经元数量)以及需要训练的参数

Python 中有一些现成的包可以创建神经网络模型的可视化表示。 前三个包甚至可以在模型训练之前使用(仅需要定义和编译模型);然而,Tensor Boards 要求用户在架构可视化之前使用准确的数据训练模型。

  1. 人工神经网络可视化工具
  2. 视觉 Keras
  3. Keras 模型图
  4. 张量板
点安装visualkeraspip 安装 ann_visualizerpip 安装 graphviz

我们不需要单独安装“Tensor Board”和“Keras Model Plot”。这将随 Tensorflow 和 Keras 的初始安装一起提供。

我们可能只使用下面列出的一些库。 大多数库都可以将 TensorFlow 模型转换为图表,而无需对数据进行显式训练。 您可以将其视为单一事实来源。一些库,如 Pandas、Skimage 和 OpenCV,在读取结构化数据或图像时会派上用场。

# 导入必要的库将熊猫作为pd导入import numpy as np # 导入 numpyfrom skimage import data, io # 导入 skimage 库(数据 - 测试图像和示例数据。# io - 读取、保存和显示图像。)从 skimage.color 导入 rgb2grayimport matplotlib.pyplot as plt # 导入 matplotlib.pyplot (Python 中的绘图框架。)%matplotlib 内联import os # 该模块提供了一种使用操作系统相关功能的可移植方式。os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'进口警告# 抑制警告warnings.filterwarnings('忽略')从 IPython.display 导入显示将 cv2 导入为 cv
从sklearn.metrics导入confusion_matrix
从sklearn.model_selection导入train_test_split从tensorflow.keras导入utils从tensorflow.keras.models导入顺序,load_model从tensorflow.keras.layers导入Dense、Dropout、Flatten、Conv2D、MaxPool2D、BatchNormalization从 tensorflow.keras.optimizers 导入 Adam将tensorflow作为tf导入将seaborn导入为sns

一些有用的链接,可帮助您从头开始探索有关 ANN 和 CNN 的更多内容。

我们将使用不同的超参数定义三种不同的 CNN 模型。理想情况下,在现实世界中,考虑到我们正在为多类别分类任务构建模型,我们的目标是实现不同的架构以最大限度地提高准确性或任何相关指标。我们对问题类型的选择不会对如何使用可视化包产生任何影响。

我们创建了用户定义的函数来分别构建具有不同数量的 CNN 层、最大池化层和密集层的三个不同模型。

4.1 – 架构 1 – 浅 CNN 层 + ANN 层

def 构造模型():模型=顺序()model.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 1), 激活='relu'))model.add(Conv2D(filters=64, kernel_size=(3, 3),activation='relu'))model.add(MaxPool2D((2, 2)))模型.添加(展平())model.add(密集(256,激活='relu'))model.add(密集(12,激活='softmax'))model.compile(loss='categorical_crossentropy', 优化器='adam', 指标=['accuracy'])返回模型

4.2 — 架构 2 — 深层 CNN + 浅层 ANN 层

def sconstruct_model():smodel = 顺序()smodel.add(Conv2D(filters=64, kernel_size=(3, 3), input_shape=(128, 128, 3), 激活='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(压平())smodel.add(密集(256,激活='relu'))smodel.add(密集(12,激活='softmax'))#优化器=亚当(lr=0.001)smodel.compile(损失='categorical_crossentropy',优化器='adam',指标=['准确性'])#model.summary()返回模型

4.3 — 架构 3 — 深层 CNN 和 ANN 层

def cconstruct_model(学习率):smodel = 顺序()smodel.add(Conv2D(filters=32, kernel_size=(3, 3), input_shape=(128, 128, 1), 激活='relu'))smodel.add(Conv2D(filters=32, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=64, kernel_size=(3, 3),activation='relu'))smodel.add(Conv2D(filters=64, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(Conv2D(filters=128, kernel_size=(3, 3),activation='relu'))smodel.add(MaxPool2D((2, 2)))smodel.add(压平())smodel.add(密集(256,激活='relu'))smodel.add(密集(256,激活='relu'))smodel.add(密集(12,激活='softmax'))优化器 = Adam(lr=学习率)smodel.compile(损失='categorical_crossentropy',优化器=优化器,指标=['准确性'])smodel.summary()返回模型模型=cconstruct_model(0.001)

名为 ANN Visualizer 的 Python 模块可以通过几行代码可视化人工神经网络(Gheorghiu,2022)。它使用 Keras 和 Python 的 Graphviz 模块来生成整洁且吸引人的神经网络图。您可以灵活地可视化整个深度学习网络或仅可视化您在深度学习进步的推动下创建的卷积神经网络(Shah,2018)。

使用下面的结构生成神经网络的 pdf 表示。不过,在此之前,我们需要编译上述模型。

模型=construct_model()

ann_viz(模型,视图= True,文件名=“network.gv”,标题=“MyNeural Network”)

  • 模型 - Keras 的序列模型
  • 看法 - 调用 ann_viz() 后可视化图形
  • 文件名 - 文件名
  • 标题 - 表示图表的任何特定标题
从 ann_visualizer.visualize 导入 ann_vizann_viz(model, view=True, filename=”cconstruct_model”, title=”CNN — 模型 1 — 简单架构”)
图 1:使用 ANN Visualizer 创建的construct_model() 的快照。图片来源:作者使用 Jupyter Notebook 开发的图像。原始输出太大,无法作为图像放在这里,因此这里使用底层的快照。

名为 Visualkeras 的 Python 工具可以更轻松地查看 Keras 神经网络设计(单独或作为 TensorFlow 的一部分)。可以轻松满足大多数造型需求。卷积神经网络 (CNN) 从开发分层式架构中受益匪浅。大多数模型,包括简单的前馈网络,都极大地受益于该模块支持的图式架构的生成(Gavrikov,2022)。

模型1=construct_model()model2=sconstruct_model()model3=cconstruct_model(0.009)导入视觉keras从 PIL 导入 ImageFontVisualkeras.layered_view(model1, legend=True)Visualkeras.layered_view(model2, legend=True)Visualkeras.layered_view(model3, legend=True)
图 2. 展示了三种不同模型架构的图示。图片来源:作者使用 Jupyter Notebook 开发的图像。

keras.utils.plot_model 提供内置函数来绘制使用 Graphviz 和 pydot 包通过 Keras 定义和编译的模型。从图形上看,它不如上面使用的包直观,但它概述了顺序模型(Team,nd)的基本架构。

tf.keras.utils.plot_model(型号1,to_file="模型.png",show_shapes=真,show_dtype=False,show_layer_names=真,排名目录=“TB”,Expand_nested=真,分辨率=96,层范围=无,show_layer_activations=真,)

需要考虑的几个超参数:

  1. 模型: Keras 编译模型或模型对象的实例
  2. 到文件: 图像的文件名
  3. 显示形状: 显示神经网络中各层的维度和形状
  4. 显示层激活: 显示神经元内使用的激活函数
图 3. 说明了 tf.keras.utils.plot_model() 的输出。图片来源:作者使用 Jupyter Notebook 开发的图像。

TensorBoard 是一个仪表板界面,允许用户可视化不同模型运行的日志。日志的范围可以从跟踪不同时期的准确性、召回率、RMSE、MAPE 和 MSE 等任何模型验证度量,到创建模型架构的概念图。它是一个强大的工具,可以可视化预期模型是否与预期设计匹配,同时推动如何使用操作级图更改模型的见解。

要利用此功能,我们需要首先加载 TensorBoard,然后创建一个日志目录。

%load_ext 张量板从datetime导入datetime从张量流导入 keras# 定义 Keras TensorBoard 回调。logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

创建 Keras TensorBoard 回调并在训练前指定日志目录。您可以通过向 model.fit() 提供此回调来确保记录 TensorBoard 可视化的图形数据。调用 TensorBoard 后,可能需要几分钟的时间来加载。

模型.拟合(X2_列车,Y2_列车,批量大小=64,纪元=5,回调=[tensorboard_callback])

注意:X2_train和Y2_train是上面代码中未反映的训练数据集。您可以将其替换为您自己的任何训练数据。

TensorBoard 默认情况下始终显示操作级图。 (“默认”标签在左侧突出显示。)与代码相比,该图是上下颠倒的,因为数据从下到上流动。但正如您所看到的,该图大致类似于 Keras 模型的描述,具有通向其他计算节点的附加边(Tensorflow,2022)。

图 4. 说明了 TensorBoard 的输出。图片来源:作者使用 Jupyter Notebook 开发的图像。

有关如何使用 TensorBoard 的更多上下文可以在参考下找到。

从商业角度来看,用户必须向一组利益相关者展示他们的分析,这些图表增加了讨论的复杂性。它们可能不是一个极端的附加值。然而,从学术和学习的角度来看,利用这些包来展示这些深度学习架构是有好处的。对我来说,ANN 可视化工具比其他可视化工具脱颖而出,因为它很容易理解图表,而 TensorBoard 的图表输出需要更多的技术细节才能使用结果。

Gavrikov, P.(2022 年,13 月 XNUMX 日)。 用于 Keras / TensorFlow 的 Visualkeras。 GitHub。 https://github.com/paulgavrikov/visualkeras

Gheorghiu, T.(2022 年,21 月 XNUMX 日)。 人工神经网络可视化工具。 GitHub。 https://github.com/RedaOps/ann-visualizer

沙阿,A.(2018 年,28 月 XNUMX 日)。 只需一行代码即可可视化人工神经网络 (ANN)。 中等的。 https://towardsdatascience.com/visualizing-artificial-neural-networks-anns-with-just-one-line-of-code-b4233607209e

堆栈溢出。 (nd)。 机器学习——如何可视化神经网络架构? 数据科学堆栈交换。 29 年 2022 月 XNUMX 日检索自 https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures

团队,K.(nd)。 Keras 文档:模型绘图实用程序。 Keras.io。 29 年 2022 月 XNUMX 日检索自 https://keras.io/api/utils/model_plotting_utils/#modeltodot-function

张量流。 (2022 年 6 月 XNUMX 日)。 检查 TensorFlow 图 |张量板。 TensorFlow。 https://www.tensorflow.org/tensorboard/graphs

如何在 Python 中可视化神经网络架构 从来源重新发布 https://towardsdatascience.com/how-to-visualize-neural-network-architectures-in-python-567cd2aa6d62?source=rss—-7f60cf5620c9—4 通过 https://走向datascience.com/feed

–>

时间戳记:

更多来自 区块链顾问