P23_ 优化器(一)

news/2025/11/23 12:02:15/文章来源:https://www.cnblogs.com/Samar-blog/p/19260091

P23_ 优化器(一)

23.1打开官网:torch.optim

1.优化器的使用

(1)构造优化器

放入模型参数、学习速率

(2)调用优化器的step方法

optimizer.zero_grad()一定要写

(3)优化器算法

params:参数,lr:学习速率(learning rate)

23.2代码实战:

1.复制nn_loss_network的代码

(1)前面:

加载数据集dataset,将其转成tensor数据类型,用dataloader进行加载,创建相应的网络,并计算出loss,再搭建了相应的网络:

现在:设置优化器

(2)随机梯度下降SGD

optim = torch.optim.SGD(dyl_seq.parameters(),lr = 0.01)

2.优化器SGD的使用

(1)输入代码
点击查看代码
import torch
import torchvision.transforms
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential#定义数据集
from torch.utils.data import DataLoaderdataset = torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset,batch_size=1)#定义神经网络
class DYL_seq(nn.Module):def __init__(self):super(DYL_seq, self).__init__()self.model1 = Sequential(Conv2d(in_channels=3, out_channels=32, kernel_size=5, padding=2),MaxPool2d(kernel_size=2),Conv2d(32, 32, 5, padding=2),MaxPool2d(kernel_size=2),Conv2d(32, 64, 5, padding=2),MaxPool2d(kernel_size=2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self,x):x = self.model1(x)return xloss = nn.CrossEntropyLoss()#创建网络
dyl_seq = DYL_seq()#创建优化器
optim = torch.optim.SGD(dyl_seq.parameters(),lr = 0.01)#从dataloader去取数据
for data in dataloader:imgs,targets = data#再把数据送到网络当中:outputs = dyl_seq(imgs)#计算出网络的输出和真实的target的差距result_loss = loss(outputs,targets)#梯度调为0optim.zero_grad()#反向传播:得到每一个可调节参数的对应的梯度result_loss.backward()#对每一个参数进行调优optim.step()print(result_loss)
(2)运行结果
点击查看代码
Files already downloaded and verified
tensor(2.2236, grad_fn=<NllLossBackward0>)
tensor(2.1527, grad_fn=<NllLossBackward0>)
tensor(2.0960, grad_fn=<NllLossBackward0>)
tensor(2.4661, grad_fn=<NllLossBackward0>)
tensor(2.3052, grad_fn=<NllLossBackward0>)
......

运行结果是在每个节点上的loss的变化,但是loss似乎并没有减小:

因为dataloader就是在网络模型对数据只看了一遍,现在看到的数据对于下次看到数据预测的影响不大

解决方法:
对数据进行多轮学习,在for循环外再套一层循环:epoch

3.多轮学习的设置

(1)外层嵌套轮次的for循环
点击查看代码
for epoch in range(20):running_loss = 0.0#从dataloader去取数据for data in dataloader:imgs,targets = data#再把数据送到网络当中:outputs = dyl_seq(imgs)#计算出网络的输出和真实的target的差距result_loss = loss(outputs,targets)#梯度调为0optim.zero_grad()#反向传播:得到每一个可调节参数的对应的梯度result_loss.backward()#对每一个参数进行调优optim.step()running_loss = running_loss + result_lossprint(running_loss)
(2)整体流程
点击查看代码
对于每一个轮次 (Epoch):①初始化总损失为 0。②对于数据集中的每一个批次 (Batch):a. 取出一个批次的图片和标签。b. 将图片输入模型,得到模型的预测输出。(前向传播)c. 用损失函数计算预测输出和真实标签的差距。d. 清空上一次的梯度。e. 反向传播,计算出每个参数的梯度。f. 根据梯度,更新模型的所有参数。(优化器.step ())g. 将这个批次的损失累加到总损失上。③一轮结束后:a. 打印出本轮的总损失。
(3)每一轮学习过程中

外层循环:控制训练的轮次

内层循环:遍历整个数据集

①for epoch in range(20):

模型会把整个 CIFAR-10 测试集看 20 遍

【因为只看一遍数据,模型学不会复杂的模式。它需要反复地观察、学习,才能不断调整内部的参数(权重和偏置),从而提高预测的准确率。】

②解包数据:imgs, targets = data

把 data 元组里的两个部分分开,分别赋值给 imgs 和 targets

其中:
imgs: PyTorch 的张量(Tensor),设置其形状是 [1, 3, 32, 32],即 “1 张 3 通道(RGB)的32x32 像素的图片”;
targets:这也是一个张量,形状是 [batch_size]。对于 CIFAR-10,它的值是一个 0 到 9 之间的整数,表示这张图片对应的类别(比如 0 是飞机,1 是汽车等);

③前向传播:outputs = dyl_seq(imgs)
④反向传播
点击查看代码
optim.zero_grad()       # 1. 清空之前的梯度
result_loss.backward()  # 2. 计算梯度
result_loss.backward:它会从损失函数的结果 result_loss 开始,自动计算出模型中每一个可训练参数(权重 W,偏置 b)对损失的梯度(d(Loss)/d(W), d(Loss)/d(b))。 【可以把梯度想象成一个 “指示信号”,它告诉我们:“要想让损失变小,这个参数应该往哪个方向调整,调整多少?”】
⑤参数更新:optim.step()
⑥累加损失:running_loss = running_loss + result_loss

在每一轮(epoch)开始时,我们把变量running_loss初始化为 0;对于每一个批次,我们都把这个批次的损失 result_loss 加到 running_loss 上;
这样,当整个 epoch 结束时,running_loss 就等于这个轮次中所有图片的损失之和。

打印它可以让我们直观地看到,随着训练轮次的增加,模型的总损失是不是在下降,从而判断训练是否有效。

(4)print打印结果
点击查看代码
Files already downloaded and verified
tensor(18790.3555, grad_fn=<AddBackward0>)
tensor(16177.8945, grad_fn=<AddBackward0>)
tensor(15394.5410, grad_fn=<AddBackward0>)
tensor(15897.9082, grad_fn=<AddBackward0>)
tensor(17882.6699, grad_fn=<AddBackward0>)
tensor(20084.4277, grad_fn=<AddBackward0>)
tensor(22518.1348, grad_fn=<AddBackward0>)
tensor(23672.5508, grad_fn=<AddBackward0>)
tensor(24243.7734, grad_fn=<AddBackward0>)
tensor(25187.7676, grad_fn=<AddBackward0>)
tensor(25525.9375, grad_fn=<AddBackward0>)
tensor(26094.1387, grad_fn=<AddBackward0>)
tensor(26918.0039, grad_fn=<AddBackward0>)
tensor(27612.7695, grad_fn=<AddBackward0>)
tensor(29427.4512, grad_fn=<AddBackward0>)
tensor(30726.7402, grad_fn=<AddBackward0>)
tensor(nan, grad_fn=<AddBackward0>)
tensor(nan, grad_fn=<AddBackward0>)
tensor(nan, grad_fn=<AddBackward0>)
tensor(nan, grad_fn=<AddBackward0>)进程已结束,退出代码0

可见,核心问题是梯度爆炸
①前几轮:损失在下降,模型正常学习。
②中间轮次:损失开始回升并剧烈震荡,说明梯度已经开始不稳定。
③最后几轮:损失值变成 nan(Not a Number,不是一个数字),训练彻底崩溃。
④如何解决?
使用训练集进行训练:train=True;
增大 batch_size:例如 batch_size=64;
添加激活函数:在每个卷积层和全连接层后添加 nn.ReLU();
降低学习率:例如 lr=0.001;
使用动量(Momentum):momentum=0.9,帮助稳定训练;

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

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

相关文章

2025年评价高的光通信检测仪器实力厂家TOP推荐榜

2025年评价高的光通信检测仪器实力厂家TOP推荐榜行业背景与市场趋势随着5G网络全面商用、数据中心大规模建设以及AI算力需求的爆发式增长,全球光通信行业正迎来新一轮发展高峰。据LightCounting最新报告显示,2025年全…

2025年质量好的学校团餐配送最新用户口碑榜供应公司

2025年质量好的学校团餐配送最新用户口碑榜供应公司行业背景与市场趋势随着我国教育事业的蓬勃发展和家长对校园食品安全关注度的持续提升,学校团餐配送行业迎来了前所未有的发展机遇。根据中国餐饮协会最新发布的《2…

可重入程序是通过 减少对换数量 来改善系统性能的

目录首先,什么是“对换”?可重入程序:一份代码,同时服务魔法所在:如何“减少对换数量”?一个生动的比喻除了减少对换,还有更多好处结论作为一名开发者,我们总是在追求更高的性能、更快的响应。当我们谈论优化时…

2025年热门的孤独症特教设备厂家最新实力排行

2025年热门的孤独症特教设备厂家最新实力排行行业背景与市场趋势孤独症谱系障碍(ASD)作为一种神经发育性疾病,近年来在全球范围内发病率持续攀升。根据世界卫生组织最新统计数据显示,2025年全球孤独症患者数量预计…

2025年评价高的平替进口品牌三段力缓冲铰链优质厂家推荐榜单

2025年评价高的平替进口品牌三段力缓冲铰链优质厂家推荐榜单行业背景与市场趋势随着中国家居五金行业的快速发展,国产五金配件在品质和技术上已逐步达到甚至超越国际水平。据中国五金制品协会2024年数据显示,国内铰链…

英语_阅读_textbooks vs. computers_待读

①The debate on “==” has been going on for years. How much technology is enough in the classroom? Should textbooks be replaced by computers? “课本与计算机”之间的辩论已经持续多年。在课堂上,多少科…

2025年靠谱的履带旋喷钻机厂家最新用户好评榜

2025年靠谱的履带旋喷钻机厂家最新用户好评榜行业背景与市场趋势随着我国基础设施建设的持续深入和地下空间开发的加速推进,履带旋喷钻机作为地基处理的关键设备,市场需求呈现稳定增长态势。据中国工程机械工业协会最…

2025年质量好的珍珠棉厂家最新权威实力榜

2025年质量好的珍珠棉厂家最新权威实力榜一、 行业背景与市场趋势珍珠棉(EPE),又称聚乙烯发泡棉,是一种新型环保包装材料,因其具有轻质、缓冲性能好、防震防潮、可回收等优点,被广泛应用于电子产品、家电、家具、…

英语_阅读_Mona Lisa_待读

It was August in Paris. Most people were out of the city, enjoying their summer holiday. The streets were empty and restaurants were closed. 那是巴黎的八月。大多数人都不在城市里,享受他们的暑假。街道空…

2025年口碑好的贴片盖子行业内知名厂家排行榜

2025年口碑好的贴片盖子行业内知名厂家排行榜行业背景与市场趋势贴片盖子作为电子元器件的重要组成部分,在汽车电子、新能源、通信电子、智能家居等领域发挥着关键作用。随着全球电子制造业的持续发展,贴片盖子市场规…

段式管理提供了“程序视角”的内存视图

目录什么是“程序视角”?段式管理如何体现这一视角?与“机器视角”的对比这种“程序视角”带来的好处总结什么是“程序视角”? 程序员(以及编译器)在思考和编写代码时,自然地将程序看作是由不同功能模块组成的集…

解决hosts文件无权修改问题

使用管理员权限修改打开“运行”对话框(按下Win + R键)。 输入notepad,然后按住Ctrl + Shift + Enter键,以管理员身份打开记事本。 在记事本中,选择“文件” > “打开”,然后导航到 C:\Windows\System32\driv…

2025年热门的热电偶温度计行业内口碑厂家排行榜

2025年热门的热电偶温度计行业内口碑厂家排行榜行业背景与市场趋势热电偶温度计作为工业测温领域的重要工具,近年来随着智能制造、新能源等产业的快速发展,市场需求持续增长。据中国仪器仪表行业协会最新统计数据显示…

“段式存储”中的“段”是什么?

目录一个生动的比喻:一本书的章节“段”的技术性定义和核心特征“段”在内存中是如何存在的?总结简单来说,“段”就是一个程序在逻辑上的一个完整组成部分。 它不是物理上硬性划分的内存块,而是按程序的逻辑意义自…

2025年热门的新疆长绒棉棉被厂家推荐及采购指南

2025年热门的新疆长绒棉棉被厂家推荐及采购指南行业背景与市场趋势新疆长绒棉作为全球公认的优质棉花品种,以其纤维长、强度高、色泽好、弹性佳等特点享誉国内外。根据中国棉花协会2024年发布的行业报告显示,新疆棉花…

2025年靠谱的新能源设备固态继电器实力厂家TOP推荐榜

2025年靠谱的新能源设备固态继电器实力厂家TOP推荐榜 行业背景与市场趋势 随着全球新能源产业的快速发展,光伏、风电、储能及电动汽车等领域对高可靠性电气元件的需求激增。固态继电器(SSR)作为关键控制部件,凭…

2025年热门的南网机构限位防水微动开关行业内知名厂家排行榜

2025年热门的南网机构限位防水微动开关行业内知名厂家排行榜行业背景与市场趋势随着中国南方电网等大型能源机构对电力设备安全性要求的不断提升,限位防水微动开关作为关键控制元件,其市场需求呈现稳定增长态势。据《…

2025年知名的热镀锌电缆桥架厂家最新用户好评榜

2025年知名的热镀锌电缆桥架厂家最新用户好评榜行业背景与市场趋势随着全球基础设施建设的持续升温,电缆桥架作为电力、通信等领域不可或缺的配套产品,市场需求呈现稳定增长态势。根据最新发布的《2024-2029全球电缆…

2025年热门的烤漆龙骨TOP实力厂家推荐榜

2025年热门的烤漆龙骨TOP实力厂家推荐榜行业背景与市场趋势随着全球建筑行业的持续发展,轻钢龙骨作为现代建筑装饰的重要材料,市场需求呈现稳定增长态势。根据《2024-2029年全球轻钢龙骨市场研究报告》显示,2023年全…

2025年靠谱的凹油墨厂家推荐及选购参考榜

2025年靠谱的凹油墨厂家推荐及选购参考榜行业背景与市场趋势凹版印刷油墨作为印刷行业的重要耗材,近年来随着环保政策的趋严和印刷技术的升级,市场规模持续扩大。根据中国油墨行业协会发布的《2024年中国油墨行业发展…