一层5x1神经网络绘制训练100轮后权重变化的图像
要完成这个任务,我们可以使用Python中的PyTorch库来建立一个简单的神经网络,网络结构只有一个输入层和一个输出层,输入层有5个节点,输出层有1个节点。训练过程中,我们将记录权重的变化,并在训练100轮后绘制出权重变化的图像。以下是步骤和代码的详细解释:
- 构建网络:网络由一个全连接层组成,没有激活函数,因为我们只关注权重的变化。
- 数据准备:随机生成一些输入数据和目标数据用于训练。
- 训练网络:使用均方误差损失和随机梯度下降优化器。
- 记录权重:在每轮训练后记录权重。
- 绘制权重变化图:训练完成后,使用matplotlib绘制权重的变化。
这张图展示了一个简单神经网络中5个权重在100轮训练过程中的变化。每条线代表一个权重值如何随着训练轮次的增加而变化。你可以看到,权重随着训练过程呈现不同程度的变化,这反映了模型在尝试适应数据的过程中权重的更新情况。
在这段代码中,weights_history[:, 0, i] 用于从存储的权重历史记录中提取特定的权重值,以便绘制。下面是这个表达式的详细分析:
-
weights_history是一个记录了每一训练轮次后模型权重的列表,该列表在每次迭代时被转换为一个PyTorch张量。这个张量的形状是[100, 1, 5]:- 第一个维度(100)代表训练轮次的数量。
- 第二个维度(1)代表输出层的节点数,这里是1,因为我们的模型是从5个输入到1个输出的线性层。
- 第三个维度(5)代表输入层的节点数,也就是权重的数量,因为我们的线性层有5个输入。
-
weights_history[:, 0, i]的分解::选择weights_history张量中所有的100个训练轮次。0选择输出层中第一个(也是唯一一个)节点的权重。i这是一个从0到4变化的索引,用于选择5个输入中的一个特定权重。
因此,当你使用 weights_history[:, 0, i],它实际上在每一训练轮次中选取一个特定的输入权重,并跟踪这个权重是如何随着时间变化的。在上面的代码中,这种方式被用来绘制每个输入对应权重随训练轮次变化的图形,展示了每个权重如何随着模型训练进行而更新。
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import numpy as np# 定义一个简单的线性模型
class SimpleLinearModel(nn.Module):def __init__(self):super(SimpleLinearModel, self).__init__()self.linear = nn.Linear(5, 1) # 5个输入节点,1个输出节点def forward(self, x):return self.linear(x)# 生成一些随机数据
inputs = torch.randn(100, 5) # 100个样本,每个样本5个特征
targets = torch.randn(100, 1) # 100个目标值 # 初始化模型
model = SimpleLinearModel()# 损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# 用于记录权重的列表
weights_history = []# 训练模型
for epoch in range(100): # 训练100轮# 前向传播outputs = model(inputs)loss = criterion(outputs, targets)# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()# 记录权重weights_history.append(model.linear.weight.data.numpy().copy())# 转换为numpy数组
weights_history = np.array(weights_history)# 创建subplot
fig, axs = plt.subplots(5, 1, figsize=(10, 15))
for i in range(5): # 对于5个输入特征的每一个权重绘图axs[i].plot(weights_history[:, 0, i], label=f'Weight {i+1}')axs[i].set_title(f'Weight {i+1} Changes Over 100 Epochs')axs[i].set_xlabel('Epoch')axs[i].set_ylabel('Weight Value')axs[i].legend()plt.tight_layout()
plt.savefig("test")
上述代码实现了一个简单的神经网络训练,并绘制了每个输入特征的权重变化。以下是代码的详细步骤分析:
-
导入库:
- 导入了
torch和torch.nn用于神经网络的构建和训练。 - 导入
matplotlib.pyplot用于绘制图像。
- 导入了
-
定义模型:
- 定义了一个简单的线性模型
SimpleLinearModel,包含一个全连接层linear,输入5个特征输出1个值。
- 定义了一个简单的线性模型
-
初始化模型、损失函数和优化器:
- 实例化了模型
model。 - 使用均方误差损失函数
criterion,适合回归问题。 - 使用随机梯度下降优化器
optimizer,学习率设置为0.01。
- 实例化了模型
-
准备数据:
- 生成了随机输入数据
inputs和目标数据targets,分别有100个样本,输入有5个特征,输出有1个目标值。
- 生成了随机输入数据
-
训练过程:
- 创建一个空列表
weights_history用于记录每轮训练后的权重。 - 进行100轮训练,在每轮中:
- 计算模型的输出
outputs。 - 计算损失
loss。 - 清空梯度,进行反向传播,更新权重。
- 记录当前的权重,保存到
weights_history中。
- 计算模型的输出
- 创建一个空列表
-
数据转换和绘图:
- 将
weights_history转换为numpy数组,以便于处理。 - 使用
plt.subplots创建5个子图,每个子图显示一个输入特征的权重变化。 - 遍历每个输入特征的权重数据,绘制在相应的子图上:
axs[i].plot(...)绘制第i个输入特征的权重变化曲线。- 设置子图的标题、坐标轴标签和图例。
- 使用
plt.tight_layout()使子图布局紧凑整齐。 - 显示绘制好的图像。
- 将
每个子图显示了对应输入特征的权重在100轮训练中的变化情况。这种细分展示方法有助于观察每个权重如何随着训练过程逐步调整和收敛。

相关文章:
一层5x1神经网络绘制训练100轮后权重变化的图像
要完成这个任务,我们可以使用Python中的PyTorch库来建立一个简单的神经网络,网络结构只有一个输入层和一个输出层,输入层有5个节点,输出层有1个节点。训练过程中,我们将记录权重的变化,并在训练100轮后绘制…...
Project #0 - C++ Primer
知识点 1.pragma once C和C中的一个非标准但广泛支持的预处理指令,用于使当前源文件在单次编译中只被包含一次。 #pragma once class F {}; // 不管被导入多少次,只处理他一次2.explicit C中的一个关键字,它用来修饰只有一个参数的类构造函…...
git提交commit信息规范,fix,feat
可以确保团体合作中,从你的提交记录可以识别出你的动作 feat:新功能(featuer)fix: 修补bugdocs: 文档(documentation)style:格式(修改样式,不影响代码运行的…...
服务器 Linux 的文件系统初探
好久没更新文章了,最近心血来潮,重新开始知识的累计,做出知识的沉淀~ 万事万物皆文件 文件系统:操作系统如何管理文件,内部定义了一些规则或者定义所以在 Linux 中所有的东西都是以文件的方式进行操作在 Linux 中&am…...
关于Unity转微信小程序的流程记录
1.准备工作 1.unity微信小程序转换工具,minigame插件,导入后工具栏出现“微信小游戏" 2.微信开发者工具稳定版 3.MP微信公众平台申请微信小游戏,获得游戏appid 4.unity转webgl开发平台,Player Setting->Other Setting…...
AI入门指南:什么是人工智能、机器学习、神经网络、深度学习?
文章目录 一、前言二、人工智能(AI)是什么?起源概念人工智能分类人工智能应用 三、机器学习是什么?概念机器学习常见算法机器学习分类机器学习与人工智能的关系 四、神经网络是什么?概念神经网络组成部分神经网络模型神经网络和机器学习的关系…...
网络安全中的IOC是指的什么?
网络安全中的IOC(Indicators of Compromise)指的是威胁指标,是网络安全领域中的一个重要概念。它指的是可以用来识别计算机系统、网络或应用程序中已经受到攻击或遭受威胁的特定特征。这些特征可以是恶意文件、恶意域名、已知攻击工具等&…...
掌握AJAX技术:从基础到实战
文章目录 **引言****1. 什么是AJAX?****2. AJAX的工作原理**AJAX 示例使用 Fetch API 实现 AJAX **3. 如何在项目中使用AJAX****4. 处理AJAX请求的常见问题****5. AJAX与JSON的结合****6. 使用AJAX框架和库****7. 实战:创建一个动态表单****8. AJAX中的事…...
Unity UGUI 实战学习笔记(6)
仅作学习,不做任何商业用途 不是源码,不是源码! 是我通过"照虎画猫"写的,可能有些小修改 不提供素材,所以应该不算是盗版资源,侵权删 因为注册和登录面板的逻辑与数据存储方面已经相对完善 服务器面板逻辑…...
iOS面试之属性关键字(二):常见面试题
Q:ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些? 对应基本数据类型默认关键字是:atomic,readwrite,assign 对于普通的 Objective-C 对象:atomic,readwrite,strong Q:atomic 修饰的属性是怎么样保存线程安全的&#x…...
java开发设计模式详解
目录 一、概述 1. 创建型模式(5种) 2. 结构型模式(7种) 3. 行为型模式(11种) 二、代码示例说明 1.单例模式(Singleton) 2.工厂方法模式(Factory Method) 3.抽象工厂模式(Abstract Factory) 4.建造者模式(Builder) 5.原型模式 (Prototype) 6.适…...
windows中node版本的切换(nvm管理工具),解决项目兼容问题 node版本管理、国内npm源镜像切换(保姆级教程,值得收藏)
前言 在工作中,我们可能同时在进行2个或者多个不同的项目开发,每个项目的需求不同,进而不同项目必须依赖不同版本的NodeJS运行环境,这种情况下,对于维护多个版本的node将会是一件非常麻烦的事情,nvm就是为…...
测试面试宝典(四十四)—— APP测试和web测试有什么区别?
一、系统架构和运行环境 APP 测试需要考虑不同的操作系统(如 iOS、Android 等)、设备型号和屏幕尺寸,以及各种网络连接状态(如 2G、3G、4G、WiFi 等)。而 Web 测试主要针对不同的浏览器(如 Chrome、Firefo…...
力扣高频SQL 50题(基础版)第三十七题
文章目录 力扣高频SQL 50题(基础版)第三十七题176.第二高的薪水题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题(基础版)第三十七题 176.第二高的薪水 题目说明 Employee 表: ----------------- …...
web基础之CSS
web基础之CSS 文章目录 web基础之CSS一、CSS简介二、基本用法2、CSS应用方式2.1 行内样式2.2内部样式2.3外部样式 三、选择器1、标签选择器2、类选择器3、ID选择器4、选择器的优先级 四、常见的CSS属性1、字体属性2、文本属性3、背景属性4、表格属性5、盒子模型的属性6、定位 总…...
全球轻型卡车胎市场规划预测:2030年市场规模将接近1153亿元,未来六年CAGR为2.0%
一、引言 随着全球物流行业的持续发展,轻型卡车胎作为物流运输的关键消耗品,其市场重要性日益凸显。本文旨在探索轻型卡车胎行业的发展趋势、潜在商机及其未来展望。 二、市场趋势 全球轻型卡车胎市场的增长主要受全球物流行业增加、消费者对轮胎性能要…...
8.2 数据结构王道复习 2.3.3 2.3.7选择题错题review
王道中这章主讲了线性表的定义、基本操作、顺序表示、链式表示。下方内容主分了文字部分和代码部分,便于记忆和整理。 在901中这章的要求集中在链表的基础操作中,应用题大概会出问答题。 【当前每一小节的应用题待做,先把选择题过完ÿ…...
【DL】神经网络与机器学习基础知识介绍(二)【附程序】
原文:https://mengwoods.github.io/post/dl/009-dl-fundamental-2/ 文章目录 激活函数卷积神经网络超参数其他程序 激活函数 激活函数的目的是在模型中引入非线性,使网络能够学习和表示数据中的复杂模式。列出常见的激活函数。 线性函数: y…...
6万字嵌入式最全八股文面试题大全及参考答案(持续更新)
目录 冒泡排序算法的平均时间复杂度和最坏时间复杂度分别是多少?在什么情况下使用冒泡排序较为合适? 选择排序算法是稳定的排序算法吗?为什么? 插入排序在近乎有序的数组中表现如何?为什么? 快速排序的基本思想是什么?它在最坏情况下的时间复杂度是多少? 归并排序…...
iceberg 用户文档(持续更新)
iceberg 用户文档 表 Schema 变更查看表的元数据信息表参数变更 表 Schema 变更 Iceberg 支持使用 Alter table … alter column 语法对 Schema 进行变更,示例如下 -- spark sql -- 更改字段类型 ALTER TABLE prod.db.sample ALTER COLUMN measurement TYPE doubl…...
别再只懂RAID了!用Minio纠删码在4台Linux服务器上搭建高可用对象存储(附Nginx负载均衡配置)
分布式存储新范式:Minio纠删码实战指南与负载均衡优化 在数据爆炸式增长的时代,企业存储架构正面临前所未有的挑战。传统RAID技术虽然成熟稳定,但在处理海量非结构化数据时逐渐暴露出扩展性差、硬件利用率低等瓶颈。而对象存储凭借其天然的分…...
LeetCode 树状数组与线段树对比题解
LeetCode 树状数组与线段树对比题解 题目描述 对比树状数组和线段树的优缺点。 树状数组 vs 线段树 树状数组的优点 实现简单代码量少空间复杂度低常数时间小 树状数组的缺点 功能有限不能高效处理区间修改和区间查询 线段树的优点 功能强大可以处理区间修改和区间查询适用范围…...
免费开源质谱数据分析工具MZmine:从原始数据到科学发现的完整解决方案
免费开源质谱数据分析工具MZmine:从原始数据到科学发现的完整解决方案 【免费下载链接】mzmine3 mzmine source code repository 项目地址: https://gitcode.com/gh_mirrors/mz/mzmine3 你是否曾为昂贵的商业质谱分析软件而烦恼?是否在寻找一款功…...
如何处理SQL空值填充_利用IFNULL函数保证数据完整性
IFNULL函数用于MySQL中处理NULL值,接受两个参数:第一个为可能为NULL的表达式,第二个为替代值;需确保类型一致,避免隐式转换错误,且不跨数据库兼容。IFNULL 函数在 MySQL 中怎么用才不踩空IFNULL 只接受两个…...
响应式编程-Flux 背压机制与操作符链式调用源码剖析
1. Flux背压机制的核心原理 背压(Backpressure)是响应式编程中最重要的流量控制机制之一。想象一下自来水管和水龙头的关系:当水龙头开得太大而下水道排水速度跟不上时,水槽就会溢出。Flux的背压机制就像这个系统中的智能调节阀&…...
从课堂作业到项目复盘:用Proteus仿真四人抢答器,我踩过的那些‘坑’
从课堂作业到项目复盘:用Proteus仿真四人抢答器,我踩过的那些‘坑’ 第一次在Proteus里搭建四人抢答器时,我以为只要按教科书上的电路图连线就能轻松完成。直到LED灯在上电瞬间诡异地闪烁、计数器在临界值跳变时卡死、抢答信号被误判为违规……...
FDS火灾模拟实战指南:从物理原理到工程决策
FDS火灾模拟实战指南:从物理原理到工程决策 【免费下载链接】fds Fire Dynamics Simulator 项目地址: https://gitcode.com/gh_mirrors/fd/fds 当面对复杂建筑空间的火灾安全设计时,你是否曾困惑于如何选择合适的模拟工具?如何验证消防…...
Python实战:利用pymodbus构建工业数据采集与监控系统
1. 工业数据采集为什么需要Modbus? 在工厂车间里,你可能见过各种钢铁巨兽般的设备——数控机床、PLC控制器、温度传感器。这些设备每天都在产生海量数据,但如何让这些"哑巴设备"开口说话?Modbus协议就是它们的通用语言。…...
VideoRAG框架解析:基于知识图谱的超长视频理解与对话系统
1. 项目概述:当视频太长,AI也“看”不过来时,我们做了什么作为一名长期混迹在AI和多媒体技术交叉领域的开发者,我经常遇到一个头疼的问题:现在的多模态大模型(MLLM)处理图片、理解短视频都挺溜&…...
4G/5G EPS会话管理机制与QoS优化实践
1. EPS会话管理核心机制解析在4G/5G移动通信系统中,EPS(演进分组系统)的会话管理架构通过多层抽象实现了精细化的业务流控制。这套机制的核心价值在于:用标准化的方式将不同QoS需求的业务流映射到对应的传输通道上,同时…...
