手把手教你用Python绘制神经网络图

在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 接下来教大家如何使用 Python 中的 networkx 库,绘制美观且标准的神经网络。
  • 会根据指定的层和节点数量,绘制不同结构的神经网络。

networkx 库可以用来创建和操作图类型的数据结构,其中包括无向图、有向图、带权图等等。
神经网络可以看做是一种图数据结构,因此可以使用networkx库创建,并进行可视化的操作。


简单示例:绘制一个2层的神经网络

在这里插入图片描述

  1. 首先,需提前安装好networkx库,然后在代码中导入 networkxmatplotlib。然后使用 DiGraph 创建一个有向图G。

  2. 我们要绘制的网络,包括了5个节点,第1层的节点编号为1、2,第2层的是3、4、5,我们使用add_edge,从1向3、4、5,从2向3、4、5,连接一条边。

  3. 为了让绘制的图像看起来像一个神经网络,我们需要为这5个节点设置坐标。创建字典pos,字典的key是节点的名称,字典的value,是节点所在位置。

  4. 最后使用nx.draw函数进行绘制。
    其中G是要绘制的图,
    pos是图中节点的坐标,
    with_labels = True,代表绘制节点的名称
    node_color和edgecolor是节点和边的颜色
    linewidths和width是节点和边的粗细
    node_size是节点的大小

# 在代码中导入networkx 和 matplotlib
import networkx as nx
import matplotlib.pyplot as pltG = nx.DiGraph()  # 使用DiGraph创建一个有向图G# 网络包括了5个节点
# 第一层的节点编号为1、2,第2层的是3、4、5
G.add_edge(1, 3)  # 从1到3
G.add_edge(1, 4)  # 从1到4
G.add_edge(1, 5)  # 从1到5
G.add_edge(2, 3)  # 从2到3
G.add_edge(2, 4)  # 从2到4
G.add_edge(2, 5)  # 从2到5# 创建字典pos,字典的key是节点的名称
# 字典的value,是节点所在位置# 1号和2号节点在一列
# 3、4、5在一列
# 因此设置1和2的x坐标为0;3、4、5的为1# 同一组中的节点,可以均匀的分布在同一列上
# 所以我们将1和2的y坐标,设置为0.25和0.75
# 3、4、5的y坐标0.2、0.5、0.8# {节点名称:(节点x坐标,节点y坐标)}
pos = {1: (0, 0.25),  # 节点1的坐标(0,0.25)2: (0, 0.75),  # 节点2的坐标(0,0.75)3: (1, 0.2),  # 节点3的坐标(1, 0.2)4: (1, 0.5),  # 节点4的坐标(1, 0.5)5: (1, 0.8),  # 节点5的坐标(1, 0.8)
}# 使用nx.draw函数进行绘制
nx.draw(G,  # 要绘制的图pos,  # 图中节点的坐标with_labels=True,  # 绘制节点的名称node_color='white',  # 节点的颜色edgecolors='black',  # 边的颜色linewidths=3,  # 节点的粗细width=2,  # 边的粗细node_size=1000  # 节点的大小)plt.show()  # 使用show方法显示图形

自定义函数,根据参数自由绘制神经网络

在这里插入图片描述在这里插入图片描述在这里插入图片描述
# 在代码中导入networkx 和 matplotlib
import networkx as nx
import matplotlib.pyplot as pltG = nx.DiGraph()  # 使用DiGraph创建一个有向图G# 网络包括了5个节点
# 第一层的节点编号为1、2,第2层的是3、4、5
G.add_edge(1, 3)  # 从1到3
G.add_edge(1, 4)  # 从1到4
G.add_edge(1, 5)  # 从1到5
G.add_edge(2, 3)  # 从2到3
G.add_edge(2, 4)  # 从2到4
G.add_edge(2, 5)  # 从2到5# 创建字典pos,字典的key是节点的名称
# 字典的value,是节点所在位置# 1号和2号节点在一列
# 3、4、5在一列
# 因此设置1和2的x坐标为0;3、4、5的为1# 同一组中的节点,可以均匀的分布在同一列上
# 所以我们将1和2的y坐标,设置为0.25和0.75
# 3、4、5的y坐标0.2、0.5、0.8# {节点名称:(节点x坐标,节点y坐标)}
pos = {1: (0, 0.25),  # 节点1的坐标(0,0.25)2: (0, 0.75),  # 节点2的坐标(0,0.75)3: (1, 0.2),  # 节点3的坐标(1, 0.2)4: (1, 0.5),  # 节点4的坐标(1, 0.5)5: (1, 0.8),  # 节点5的坐标(1, 0.8)
}# 使用nx.draw函数进行绘制
nx.draw(G,  # 要绘制的图pos,  # 图中节点的坐标with_labels=True,  # 绘制节点的名称node_color='white',  # 节点的颜色edgecolors='black',  # 边的颜色linewidths=3,  # 节点的粗细width=2,  # 边的粗细node_size=1000  # 节点的大小)plt.show()# 根据传入的输入层、隐含层、输出层的神经元数量,绘制对应的神经网络
def draw_network_digraph(input_num, hidden_num, output_num):G = nx.DiGraph()  # 创建一个图G# 连接输入层和隐含层之间的边for i in range(input_num):for j in range(hidden_num):G.add_edge(i, input_num + j)# 连接隐含层和输出层之间的边for i in range(hidden_num):for j in range(output_num):G.add_edge(input_num + i, input_num + hidden_num + j)pos = dict()  # 计算每个节点的坐标pos# 节点的坐标,(x,y)设置为:# (0,i-input_num/2)# (1,i-hidden_num)/2)# (2,i-output_num/2)# 根据每一层的节点数量,将节点从中间,向两边分布for i in range(0, input_num):pos[i] = (0, i - input_num / 2)for i in range(0, hidden_num):hidden = i + input_numpos[hidden] = (1, i - hidden_num / 2)for i in range(0, output_num):output = i + input_num + hidden_numpos[output] = (2, i - output_num / 2)# 调用 nx.draw 绘制神经网络nx.draw(G,  # 要绘制的图pos,  # 图中节点的坐标with_labels=False,  # 绘制节点的名称node_color='white',  # 节点的颜色edgecolors='black',  # 边的颜色linewidths=3,  # 节点的粗细width=2,  # 边的粗细node_size=1000  # 节点的大小)if __name__ == '__main__':#   尝试多组参数,绘制不同结构的神经网络draw_network_digraph(3, 5, 2)plt.show()draw_network_digraph(5, 2, 6)plt.show()draw_network_digraph(1, 10, 1)plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

柔性数组(C语言)

文章目录 1. 柔性数组的定义2. 柔性数组的特点3. 柔性数组的使用4. 柔性数组的好处 也许你从来没有听说过 柔性数组这个概念,但是它确实是存在的。柔性数组是C语言中一种特殊的结构,它允许在结构体的末尾定义一个可变长度的数组。 1. 柔性数组的定义 柔…

数学建模——平稳时间序列分析方法

目录 1、平稳性的Daniel检验 (1)Spearman相关系数假设检验 (2)时间序列平稳性的Danniel假设检验 案例 【模型分析】 1、原始数据at的平稳性检验 2、一阶差分序列的平稳性检验 3、二阶差分序列的平稳性检验 4、建立AR&#…

ChatGPT生产力|实用指令(prompt)

GPT已经成为一个不可或缺的科研生产力了,但是大多数人只知晓采用直接提问、持续追问以及细节展开的方式来查阅相关资料,本文侧重于探讨“限定场景限定角色限定主题”、“可持续追问细节展开”等多种方式来获取更多信息,帮人们解决更多问题。 …

二叉树的层序遍历

利用队列的先进先出,把根的节点的指针存到队列中,然后再出队列,在出队列时再把他的左右子树的节点指针带进去,循环到队列为空(树也就遍历完了) void LevelOrder(BTNode* root)//层序遍历 {Queue L;//定义…

Docker Compose命令讲解+文件编写

docker compose的用处是对 Docker 容器集群的快速编排。(源码) 一个 Dockerfile 可以定义一个单独的应用容器。但我们经常碰到需要多个容器相互配合来完成某项任务的情况(如实现一个 Web 项目,需要服务器、数据库、redis等&#…

Unity角色或摄像机移动和旋转的控制脚本

该脚本挂载到需要被移动、旋转控制的物体身上,也可以之间挂在到摄像机上! 挂载到摄像机上可以实现第一人称视角控制! 挂载到物体身上,配合摄像机跟踪脚本可以实现,第三人称视角控制! 第一人称视角 将角…

【微服务】微服务初步认识 - 微服务技术如何学习 · 认识微服务架构

微服务(1) 文章目录 【微服务】(1)1. 微服务相关技术栈2. 微服务学习路线3. 认识微服务架构3.1 单体架构3.2 分布式架构3.3 微服务(架构)3.4 微服务(架构)治理落实相关的SpringCloud、SpringCloudAlibaba和阿里巴巴的Dubbo提供的服…

【MySql】6- 实践篇(四)

文章目录 1. 为何SQL语句逻辑相同,性能却差异巨大1.1 性能差异大的SQL语句问题1.1.1 案例一:条件字段函数操作1.1.2 案例二:隐式类型转换1.1.3 案例三:隐式字符编码转换 2. 为何只查询一行的SQL执行很慢2.1 场景一:查询长时间不返回2.1.1 等MDL锁2.1.2 等 flush2.1.…

TCP/IP(八)TCP的连接管理(五)四次握手

一 tcp连接断开 每一个TCP报文的超时重传都由一个特定的内核参数来控制 ① 四次握手的过程 遗留: 谁先发送FIN包,一定是client吗? --> upload和download补充: 主动和被动断开连接的场景 "四次握手过程描述" F --> FIN --> F…

车载电子电器架构 —— 国产基础软件现在与未来

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…

飞书应用机器人文件上传

背景: 接上一篇 flask_apscheduler实现定时推送飞书消息,当检查出的异常结果比较多的时候,群里会有很多推送消息,一条条检查工作量会比较大,且容易出现遗漏。   现在需要将定时任务执行的结果记录到文件,…

使用EasyDarwin+ffmpeg+EasyPlayerPro完成rtsp的推流操作和拉流操作

本文分享在做视频类测试过程中所用到的工具EasyDarwinffmpegEasyPlayerPro 首先说一下EasyDarwin,简单来讲,它就是个推流和拉流及系统消耗的监测软件,具体使用方法我会写在下方。 EasyDarwin 1、解压下载好的EasyDarwin压缩包,并找到EasyD…

后端:推荐 2 个 .NET 操作的 Redis 客户端类库

目录 Redis特点 Redis场景 1. StackExchange.Redis 2. FreeRedis 🚀 快速入门 🎣 Master-Slave (读写分离) 💻 Pipeline (管道)示例 🌌 Redis Cluster (集群) Redis ,是一个高性能(NOSQL)的key-value数据库,Re…

【TensorFlow2 之014】在 TF 2.0 中实现 LeNet-5

一、说明 在这篇文章中,我们将展示如何在 TensorFlow 中实现像 \(LeNet-5\) 这样的基础卷积神经网络。LeNet-5 架构由 Yann LeCun 于 1998 年发明,是第一个卷积神经网络。 数据黑客变种rs 深度学习 机器学习 TensorFlow 2020 年 2 月 29 日 | 0 …

GB28181平台简介

产品简介 LiveMedia视频中间件是支持部署到本地服务器或者云服务器的纯软件服务,也提供服务器、GPU一体机全包服务,提供视频设备管理、无插件、跨平台的实时视频、历史回放、语音对讲、设备控制等基础功能,支持视频协议有海康、大华私有协议…

竞赛 深度学习LSTM新冠数据预测

文章目录 0 前言1 课题简介2 预测算法2.1 Logistic回归模型2.2 基于动力学SEIR模型改进的SEITR模型2.3 LSTM神经网络模型 3 预测效果3.1 Logistic回归模型3.2 SEITR模型3.3 LSTM神经网络模型 4 结论5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 …

Idea创建springboot工程的时候,发现pom文件没有带<parent>标签

今天创建springboot工程,加载maven的时候报错: 这个问题以前遇到过,这是因为 mysql-connector-j 没有带版本号的原因,但是springboot的依赖的版本号不是都统一交给spring-boot-starter-parent管理了吗,为什么还会报错&…

华为云云耀云服务器L实例评测|华为云耀云服务器L实例评测用例(五)

六、华为云耀云服务器L实例评测用例: “兵马未动,粮草先行”,随着企业业务的快速发展,服务器在数字化建设体系至关重要,为了保证服务器的稳定性、可靠性,需要对服务器进行评测,以确保服务器能够…

kafka详解(三)

2.2 Kafka命令行操作 2.2.1 主题命令行操作 1)查看操作主题命令参数 [aahadoop102 kafka]$ bin/kafka-topics.sh2)查看当前服务器中的所有topic (配置了环境变量不需要写bin/) [aahadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop10…

Linux gcc和make学习

文章目录 GCCgcc的安装gcc的工作流程 makefilemakefile的规则工作原理自动生成makefile的变量自定义变量预定义变量自动变量 模式匹配函数wildcard函数patsubst函数 伪声明 GCC gcc全程是(GNU compiler collection CNU编译器套件),是由GNU开发…