如何使用 Graphviz 在 Python 中可视化神经网络?

2024 年 12 月 3 日 | 阅读 7 分钟

在本教程中,我们将学习如何使用 Graphviz 在 Python 中绘制(想象)一个大脑网络。Graphviz 是一个开源的图表示编程 Python 模块。它在科学家进行表示方面非常有名。它将主要数据视为概念图和组织图,这意味着您需要根据其拓扑结构提供对图的主要文本描述,它将自动读取并生成图像。

安装

适用于 Windows 终端

适用于 Anaconda 终端

什么是神经网络?

神经网络的构造大致基于人脑的工作方式:许多神经元连接到其他神经元,通过它们的连接传递信息,并在神经元的输入超过特定阈值时触发。我们的人工神经网络将由人工神经元和神经递质组成,信息在它们之间传递。神经递质,即连接,将通过神经元对决定结果的强度进行加权。这些突触权重将经过一个称为反向传播的优化过程。在训练过程的每个周期中,反向传播将用于回溯网络层,并根据它们对神经网络错误的贡献来调整权重。

神经网络是自我改进的函数,可以将输入引导到正确的输出。然后,我们可以将新的输入放入该函数中,它将根据其与训练数据的函数关系来预测输出。

关于 Graphviz

Graphviz 是一个开源的图可视化软件,允许用户创建和渲染结构化图表,特别是以节点和边(图)的形式。它通常用于表示复杂的关系、工作流程、网络以及树和图等数据结构。该软件支持多种图类型,包括有向图和无向图,并且在节点形状、颜色、边样式和布局方面具有高度可定制性。

Graphviz 提供了多种布局引擎,例如用于有向图的“dot”,用于无向图的“neato”,以及为特定可视化需求量身定制的其他引擎。它读取 DOT 语言中简单的文本图描述,DOT 语言既简单又强大。Graphviz 在学术界、软件工程、数据科学和生物信息学领域被广泛用于可视化分层结构、依赖关系和流程。它易于与编程语言集成,并支持生成 PNG、PDF 和 SVG 等格式的输出,使其成为视觉通信的多功能工具。

神经网络的目标

这个神经网络,就像所有神经网络一样,应该学会数据中的重要特征以产生输出。具体来说,这个神经网络将接收一个包含六个样本的输入矩阵,每个样本有三个元素列,仅包含零和一。例如,训练集中的一个样本可能是 [0, 1, 1]。每个样本的输出将是单个的一或零。输出由输入样本的第一个元素列中的数字决定。使用上面的例子,[0, 1, 1] 的输出将是 0,因为第一列包含一个零。下面将提供一个示例图表,以展示每个输入样本的输出。

有两种方法可以在 Python 中创建神经网络

  • 从头开始 - 这可以是一个很好的学习练习,因为它将向您展示神经网络如何从零开始工作。
  • 使用神经网络库 - Keras 和 TensorFlow 等库通过抽象化底层代码来处理神经网络的结构。如果您已经熟悉神经网络的工作原理,这是创建神经网络最快、最简单的方法。

无论您选择哪种方法,使用神经网络进行预测的过程都是相同的

  1. 导入库。例如:import numpy as np
  2. 定义/创建输入数据。例如,使用 numpy 创建数据集和一系列数据值。
  3. 为输入特征添加权重和偏置(如果适用)。这些是可学习的参数,意味着它们可以在训练过程中进行修改。

权重 = 影响输出的输入参数

偏置 = 添加到输出的额外边值。

  1. 针对已知、好的数据训练网络,以找到权重和偏置的正确值。
  2. 使用测试数据集测试网络,以了解其性能。
  3. 使用超参数(用于控制训练过程的参数值)拟合模型,计算准确率,并进行预测。

从头开始创建神经网络

在此示例中,我将使用 Python 代码以及 numpy 和 scipy 库来创建一个具有两个节点的简单神经网络。

以下程序的步骤

  1. 定义网络,导入此示例所需的 Python 库。
  2. 在指定的(有限)范围内生成随机数
  3. 正态分布
  4. 创建“Network”类并定义其参数
  5. 设置每个层的神经元/节点数量并初始化权重矩阵
  6. 初始化神经网络权重矩阵的方法
  7. 需要更多工作来训练网络。
  8. 使用输入向量“input_vector”运行网络。“input_vector”可以是元组、列表或 ndarray,activation_function() 执行核心工作,它是 sigmoid 函数的实现。
  9. 运行网络并获取结果
  10. 实例化该类的实例
  11. 运行 simple_network 以展示、记录和处理形状为 (2) 的元组,并获取结果

输出

 
Output: [[0.40288038]
 [0.6321062 ]]

使用 Graphviz 绘制简单图

方法

  1. 导入模块。
  2. 创建一个新的 Diagraph 对象。
  3. 将 node() 和 edge() 添加到图对象中。
  4. 使用 render() 对象保存源文件。

以下是实现

输出

Graph1.png

How to Visualize a Neural Network in Python using Graphviz

我们可以使用 dot.source 方法检查生成的源代码。

输出

digraph {
    A1 [labels=Alex]
    B1 [labels=Rishu]
    C1 [labels=Mohe]
    D1 [labels=Satyam]
    A1 -> B1
    A1 -> C1
    A1 -> D1
    B1 -> C1 [constraint=false]
    C1 -> D1 [constraint=false]
}

使用 Graphviz 绘制(可视化)神经网络

在这里,我们使用上述模型中找到的源代码进行实现。

让我们讨论一下方法

  • 创建一个有向图对象。
  • 使用 rankdir 定义图的方向。
  • 创建包含以下项的子图
  • 设置颜色。
  • 设置节点属性。
  • 设置子图的级别。
  • 在对象之间创建边(->)。

此源代码应保存在 .txt 文件(myfile.txt)中,并在命令行中运行“dot -Tpng -o myfile.txt”以获取 .png 图形。

示例 1

在终端中运行此命令

输出

How to Visualize a Neural Network in Python using Graphviz

示例 2

输出

How to Visualize a Neural Network in Python using Graphviz
下一主题Python Graphviz