在 PyTorch 中训练一个简单的神经网络包括以下几个核心步骤:定义模型、准备数据、选择损失函数和优化器、编写训练循环

在 PyTorch 中训练一个简单的神经网络包括以下几个核心步骤:定义模型、准备数据、选择损失函数和优化器、编写训练循环。下面以一个简单的线性回归任务为例,演示完整流程。


✅ 步骤 1:导入必要的库

importtorchimporttorch.nnasnnimporttorch.optimasoptimimportnumpyasnpimportmatplotlib.pyplotasplt

✅ 步骤 2:生成模拟数据

# 真实关系: y = 2x + 1X=np.random.rand(100,1)*10# 输入特征 (100, 1)y=2*X+1+np.random.randn(100,1)*0.1# 加入少量噪声的标签# 转换为 TensorX_tensor=torch.FloatTensor(X)y_tensor=torch.FloatTensor(y)

✅ 步骤 3:定义神经网络模型

classSimpleNN(nn.Module):def__init__(self):super(SimpleNN,self).__init__()self.linear=nn.Linear(1,1)# 一层线性层defforward(self,x):returnself.linear(x)model=SimpleNN()print(model)

输出:

SimpleNN( (linear): Linear(in_features=1, out_features=1, bias=True) )

✅ 步骤 4:定义损失函数和优化器

criterion=nn.MSELoss()# 均方误差损失optimizer=optim.SGD(model.parameters(),lr=0.01)# 随机梯度下降

✅ 步骤 5:训练模型(主循环)

epochs=100forepochinrange(epochs):model.train()# 训练模式optimizer.zero_grad()# 梯度清零# 前向传播outputs=model(X_tensor)loss=criterion(outputs,y_tensor)# 反向传播 + 更新参数loss.backward()optimizer.step()# 打印日志if(epoch+1)%20==0:print(f'Epoch [{epoch+1}/{epochs}], Loss:{loss.item():.6f}')

✅ 步骤 6:查看训练结果

# 提取权重和偏置w=model.linear.weight.item()b=model.linear.bias.item()print(f'\n训练得到的模型: y ={w:.2f}x +{b:.2f}')print('真实模型: y = 2x + 1')

✅ (可选)可视化拟合效果

plt.scatter(X,y,label='真实数据',alpha=0.6)plt.plot(X,w*X+b,color='red',label=f'拟合直线 y={w:.2f}x+{b:.2f}',linewidth=2)plt.legend()plt.title("PyTorch 简单神经网络拟合结果")plt.show()

🧠 小结:关键组件说明

组件作用
nn.Module定义神经网络结构基类
forward()定义前向传播逻辑
nn.Linear全连接层
nn.MSELoss回归任务常用损失函数
optim.SGD优化器,用于更新参数
zero_grad()清除上一步梯度,避免累积

🔁 此流程是所有深度学习任务的基础模板,后续扩展到分类、CNN、RNN 等只需替换模型结构和损失函数即可。

在 PyTorch 中实现一个二分类任务,通常使用带有Sigmoid 激活函数 + 二元交叉熵损失(BCELoss)或直接使用nn.BCEWithLogitsLoss(推荐),它将 Sigmoid 和损失计算合并,更稳定。

下面是一个完整的示例:用简单神经网络对二维数据进行二分类。


✅ 步骤 1:导入所需库

importtorchimporttorch.nnasnnimporttorch.optimasoptimimportnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.datasetsimportmake_circles

✅ 步骤 2:生成二分类数据(同心圆)

# 使用 scikit-learn 生成非线性可分的二分类数据X,y=make_circles(n_samples=400,noise=0.05,factor=0.5,random_state=42)# 转换为 TensorX_tensor=torch.FloatTensor(X)y_tensor=torch.FloatTensor(y).view(-1,1)# reshape 为列向量

✅ 步骤 3:定义模型(单层全连接网络)

classBinaryClassifier(nn.Module):def__init__(self):super(BinaryClassifier,self).__init__()self.model=nn.Sequential(nn.Linear(2,16),# 输入维度 2 (x1, x2)nn.ReLU(),nn.Linear(16,1),# 输出 1 维 logit# 不加 Sigmoid,因为 loss 会包含)defforward(self,x):returnself.model(x)model=BinaryClassifier()

🔁 注意:我们不显式添加 Sigmoid,而是使用nn.BCEWithLogitsLoss,它内部自动处理。


✅ 步骤 4:定义损失函数和优化器

criterion=nn.BCEWithLogitsLoss()# 包含 sigmoid 的二元交叉熵optimizer=optim.Adam(model.parameters(),lr=0.01)

✅ 步骤 5:训练循环

epochs=1000forepochinrange(epochs):model.train()optimizer.zero_grad()# 前向传播outputs=model(X_tensor)# 输出是 logitsloss=criterion(outputs,y_tensor)# 反向传播loss.backward()optimizer.step()# 打印日志if(epoch+1)%200==0:print(f'Epoch [{epoch+1}/{epochs}], Loss:{loss.item():.6f}')

✅ 步骤 6:评估与可视化

model.eval()withtorch.no_grad():y_pred_logits=model(X_tensor)y_pred=torch.sigmoid(y_pred_logits)# 转换为概率y_pred_class=(y_pred>0.5).float()# 阈值化为 0/1accuracy=(y_pred_class.eq(y_tensor).sum().item())/len(y_tensor)print(f'\n准确率:{accuracy*100:.2f}%')

✅ (可选)绘制决策边界

h=0.01x_min,x_max=X[:,0].min()-1,X[:,0].max()+1y_min,y_max=X[:,1].min()-1,X[:,1].max()+1xx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))grid_tensor=torch.FloatTensor(np.c_[xx.ravel(),yy.ravel()])withtorch.no_grad():Z_logits=model(grid_tensor)Z_prob=torch.sigmoid(Z_logits)Z=(Z_prob>0.5).numpy()Z=Z.reshape(xx.shape)plt.contourf(xx,yy,Z,alpha=0.4,cmap=plt.cm.RdYlBu)plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.RdYlBu,edgecolors='k')plt.title("PyTorch 二分类决策边界")plt.show()

🧠 关键点总结

技术说明
nn.BCEWithLogitsLoss()推荐用于二分类,数值更稳定
torch.sigmoid()将输出转为 [0,1] 概率
(prob > 0.5).float()获得预测类别
torch.no_grad()推理时禁用梯度以提升效率

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

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

相关文章

协议十年演进

下面给你一条从工程系统、平台化与自治治理视角出发的 「协议十年演进路线(2025–2035)」。 这里的“协议”不只是通信格式,而是系统之间如何理解彼此、约束彼此、协同运行的根本机制。一、核心判断(一句话)未来十年&a…

Go(又称Golang)是一种由Google开发的静态类型、编译型编程语言,设计初衷是解决大规模软件工程中的效率与协作问题

Go(又称Golang)是一种由Google开发的静态类型、编译型编程语言,设计初衷是解决大规模软件工程中的效率与协作问题。其核心优势在于高性能、高并发支持、语法简洁,并具备高效的垃圾回收机制和强大的标准库。 特性与应用场景&#x…

ZYNQ MPSOC VCU介绍

关注、星标公众号,精彩内容每日送达 来源:网络素材1 什么是VCU?VCU 的全称是 Video Codec Unit,即视频编解码单元, Zynq UltraScale MPSoC 系列产品分为三种类型,分别是 CG 型器件、 EG 型器件和 EV 型器件&#xff0…

硬核解析:英伟达机器人的技术内核与落地场景全攻略硬核解析:英伟达机器人的技术内核与落地场景全攻略

2026年CES展会上,英伟达Reachy Mini机器人(酷似“瓦力”)的流畅互动惊艳全场,这背后并非单纯的设计创新,而是其“全栈技术体系多元场景适配”的实力彰显。作为AI与机器人领域的核心玩家,英伟达正通过一套从…

监控十年演进

下面给你一条从工程实践、系统复杂度与自治运维视角出发的 「监控十年演进路线(2025–2035)」。 这里的“监控”不只是看指标,而是系统如何被理解、被约束、被治理。一、核心判断(一句话)未来十年,监控将从…

如何测试生成式AI?ChatGPT类应用的质量保障

生成式AI测试的必要性与挑战 生成式AI(如基于大型语言模型的ChatGPT类应用)正迅速改变人机交互方式,但也带来了前所未有的测试复杂性。与传统软件不同,生成式AI的输出具有高度不确定性、语境依赖性和伦理敏感性。2026年&#xff…

人工智能应用-机器视觉:车牌识别(5)

字符识别 一、分割识别方法 传统方法一般采用“先切割,再识别”的策略,即先对车牌图像进行字符分割,然后将每个字符输入一个分类器进行识别。例如,在下图 3.2.12 中,首先将车牌图片分成“渝”“A”“J”“I”“2”“2…

孤胆枪手下载安装教程(2026 最新版)|下载 + 安装 + 运行配置全流程图文详解

一、前言:为什么现在还需要孤胆枪手下载安装教程 《孤胆枪手(Alien Shooter)》是一款经典的俯视角射击游戏,以极高的爽快度和密集怪物数量著称。 即便发布多年,依然有大量玩家希望在新电脑上重温这款作品。 但在 Win…

人工智能应用-机器视觉:车牌识别(6)

一、端到端序列识别方法 更先进的方法利用循环神经网络(RNN)的序列建模能力,不需要对字符进行逐一切割,而是对车牌图像中的字符串做整体识别。如下图 24.14所示:首先利用卷积神经网络(CNN)对输入…

Vidu 的短剧制作能力分析

短剧行业真正需要的从来不是“会不会拍”,而是“能不能稳定地、低成本地、按节奏产出”。在这种工业逻辑下,任何一款视频生成工具的价值都不取决于它能生成多惊艳的一段视频,而取决于它能否进入短剧生产链条,成为可复用、可交付、…

ThreadX的CMSIS-RTOS V2封装层升级至V1.4.0(2026-01-14)

https://github.com/STMicroelectronics/stm32-mw-cmsis-rtos-tx CMSIS-RTOS v2(简称 CMSIS-RTOS2)为基于 Arm Cortex 处理器的设备提供了通用的实时操作系统接口。它为需要实时操作系统功能的软件组件提供了标准化 API,从而为用户和软件行业…

6个最好实践指导您快速部署YashanDB

数据库技术在现代信息系统中扮演着核心角色,面对性能瓶颈、数据一致性和高可用性等普遍挑战,选择一款高效、稳定且易管理的数据库方案显得尤为重要。YashanDB凭借其灵活的部署架构和强大的功能组件,成为满足多样业务需求的理想选择。本文将系…

数据编织创新脉络:知识图谱在科技成果转化中的应用与价值探索

科易网AI技术转移与科技成果转化研究院在当今科技创新日新月异的时代,科技成果的转化与应用已成为衡量一个地区乃至国家创新能力的重要标尺。然而,科技成果转化路径复杂、信息不对称、资源匹配难等问题,长期制约着创新链与产业链的有效对接。…

【挖掘Windows这三个隐藏工具】

挖掘Windows这三个隐藏工具,解决90%的疑难杂症 当系统出问题时,多数人会重启或重装。但掌握下面三个工具,你能像专业工程师一样精准定位和修复问题。 1. 可靠性监视器:系统健康的“时间胶囊” 你肯定用过事件查看器,但…

阿西米尼Asciminib治疗慢性髓系白血病的深度分子学反应与疗程依赖性分析

慢性髓系白血病(CML)作为一种骨髓增殖性肿瘤,其治疗一直是血液学领域的重点。阿西米尼(Asciminib)作为全球首个STAMP抑制剂,通过靶向ABL肉豆蔻酰口袋抑制BCR-ABL1激酶活性,为CML患者提供了新的治…

机器人质量与成本控制十年演进

下面给你一条从工程系统、产业落地与长期治理出发的 「机器人质量与成本控制十年演进路线(2025–2035)」。 我会把重点放在**“控制”如何演进**,而不是单纯的质量或成本指标。一、核心判断(一句话)未来十年&#xff0…

7大关键因素保障YashanDB数据库的稳定性

在现代业务环境中,数据库的稳定性对于保障服务的连续性和数据的正确性至关重要。如何确保数据库系统的稳定运行,避免性能瓶颈、数据丢失以及故障中断,是企业数据库管理的重要课题。本文基于行业技术实践,从YashanDB数据库的架构与…

2026短剧业务研判

2026短剧业务研判一、核心结论(给管理层/负责人看的 1 页版信息密度) 结论1:2026短剧的胜负手从“押题材”转向“做系统”。 题材仍重要,但不会再是决定性变量。决定性变量是:你能否把短剧当成一套可复制的工程——内容…

数据编织创新网络:知识图谱如何重塑技术转移的生态新格局

科易网AI技术转移与科技成果转化研究院 在科技创新浪潮奔涌的时代,技术转移作为科技成果转化为现实生产力的关键环节,其效率与质量直接关系到创新生态的活力与协同水平。然而,科技成果转化长期面临供需匹配难、信息不对称、转化路径不清晰等…

7大关键指标评估YashanDB性能表现与资源优化策略

现代数据库系统面临的普遍挑战包括性能瓶颈、资源的合理利用以及数据的一致性保障。针对这些问题,YashanDB通过其架构设计、存储管理及优化机制,提供了高性能且稳定的数据库服务。本文面向数据库管理员、系统架构师及开发人员,深入解析评价Ya…