一层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…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
CppCon 2015 学习:REFLECTION TECHNIQUES IN C++
关于 Reflection(反射) 这个概念,总结一下: Reflection(反射)是什么? 反射是对类型的自我检查能力(Introspection) 可以查看类的成员变量、成员函数等信息。反射允许枚…...