pytorch 神经网络 Optimizer 优化器(SGD,Momentum,RMSprop,Adam)

要点

几种优化器的讲解, 请看莫烦的讲解(SGD,Momentum,RMSprop,Adam)
这一篇主要讲解 SGD,Momentum,RMSprop,Adam的实战

下图就是这节内容对比各种优化器的效果:
在这里插入图片描述

伪数据

import torch
import torch.utils.data as Data
import torch.nn.functional as F
from torch.autograd import Variable
import matplotlib.pyplot as plt

# 超参数定义
LR = 0.01  #学习率
BATCH_SIZE = 32 #一次要将多少个数据扔进模型去训练
EPOCH = 12 #训练集中的全部样本都在训练模型中走了一遍,并返回一次(有去有回),为一个epoch。

# torch.unsqueeze 对数据维度进行扩充。dim=1给第2个位置加上维数为一的维度
x = torch.unsqueeze(torch.linspace(-1,1,1000),dim=1)
y = x.pow(2) + 0.1*torch.normal(torch.zeros(x.size()))

# 创建数据集
# batch_size设置为5
# shuffle=True每一次epoch打乱数据顺序,False代表每次epoch的数据顺序是一样的
# num_workers= 2使用2个子进程
# batchsize:简单点说,就是我们一次要将多少个数据扔进模型去训练,这个值介于1和训练样本总个数之间。
torch_dataset = Data.TensorDataset(x,y)
loader = Data.DataLoader(
    dataset=torch_dataset,
    batch_size=BATCH_SIZE,
    shuffle=True,
    num_workers=2
)

最开始需要定义3个参数
LR = 0.01 学习率定为0.01
BATCH_SIZE = 32 这是批处理的数量,表示一次要将32个数据扔进模型去训练
EPOCH = 12 这里表示全部样本都在训练模型中走了12遍,并返回12次(有去有回)

x = torch.unsqueeze(torch.linspace(-1,1,1000),dim=1)
torch.linspace这个表示从-1到1被分为1000个等距离的数据torch.unsqueeze 对数据维度进行扩充。dim=1给第2个位置加上维数为一的维度

y = x.pow(2) + 0.1torch.normal(torch.zeros(x.size()))*
torch.normal表示里离散正态分布,目的是产生干扰数据

torch_dataset = Data.TensorDataset(x,y)
这里表示创建tensor的数据集

loader = Data.DataLoader(
dataset=torch_dataset,
batch_size=BATCH_SIZE,
shuffle=True,
num_workers=2
)
这里的信息量稍微大了一点
DataLoader 是一个迭代器,方便我们去多线程地读取数据
batch_size 设置为5
shuffle=True 每一次epoch打乱数据顺序,False代表每次epoch的数据顺序是一样的
num_workers= 2 使用2个子进程

每个优化器优化一个神经网络

为了对比每一种优化器, 我们给他们各自创建一个神经网络, 但这个神经网络都来自同一个 Net 形式.

#定义4个不同的神经网络,这四个神经网络使用不同的优化器优化
net_SGD = Net()
net_Momentum = Net()
net_RMSprop = Net()
net_Adam = Net()

# 将四个不同的神经网络放在一起,使用for循环将其提取出来
nets = [net_SGD, net_Momentum, net_RMSprop, net_Adam]

上面的代码定义了四个神经网络,然后把这四个神经网络放在一个nets中

优化器 Optimizer

接下来在创建不同的优化器, 用来训练不同的网络. 并创建一个 loss_func 用来计算误差. 我们用几种常见的优化器, SGD, Momentum, RMSprop, Adam.

# 定义四个不同的优化器
opt_SGD = torch.optim.SGD(net_SGD.parameters(), lr=LR)
opt_Momentum = torch.optim.SGD(net_Momentum.parameters(),lr=LR, momentum=0.8)
opt_RMSprop = torch.optim.RMSprop(net_Adam.parameters(), lr=LR, alpha=0.9)
opt_Adam = torch.optim.Adam(net_Adam.parameters(), lr=LR, betas=(0.9,0.99))

optimizers = [opt_SGD, opt_Momentum, opt_RMSprop, opt_Adam]

误差的计算

#误差计算
loss_func = torch.nn.MSELoss()
# 误差记录
losses_his = [[],[],[],[]]

训练/出图

接下来训练和 loss 画图.

#训练集中的全部样本都在训练模型中走了一遍,并返回一次(有去有回),为一个epoch。
for epoch in range(EPOCH):
    print(epoch)
    for step, (batch_x,batch_y) in enumerate(loader):
        #要把传入的数据从tensor的形式转化为variavle
        b_x = Variable(batch_x)
        b_y = Variable(batch_y)
        
        #把不同的神经网络一个个拿出来训练
        for net, opt, l_his in zip(nets, optimizers, losses_his):
            output = net(b_x) #得到每一个网络的输出
            loss = loss_func(output, b_y) #计算每一个网络的误差
            
            opt.zero_grad() #为下一次训练清空梯度
            loss.backward() #反向传播,计算梯度
            opt.step() #更新权重参数
            

            l_his.append(loss.item()) #记录误差

解释以下 zip() 函数
zip用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

a = [1,2,3]
b = [4,5,6]
zip(a,b)

zip的输出值:

[(1, 4), (2, 5), (3, 6)]

另外,在莫烦的代码里有这一行,

 l_his.append(loss.data[0]) 

这里会报错
IndexError: invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python number
改为:

 l_his.append(loss.item())

画图

# 画图
labels = ['SGD', 'Momentum', 'RMSprop', 'Adam']
for i, l_his in enumerate(losses_his):
    plt.plot(l_his, label=labels[i])
plt.legend(loc='best')
plt.xlabel('Steps')
plt.ylabel('Loss')
plt.ylim(0,0.2)   #限制绘制的上下限
plt.show()

在这里插入图片描述
SGD 是最普通的优化器, 也可以说没有加速效果, 而 MomentumSGD 的改良版, 它加入了动量原则. 后面的 RMSprop 又是 Momentum 的升级版. 而 Adam 又是 RMSprop 的升级版. 不过从这个结果中我们看到, Adam 的效果似乎比 RMSprop 要差一点. 所以说并不是越先进的优化器, 结果越佳. 我们在自己的试验中可以尝试不同的优化器, 找到那个最适合你数据/网络的优化器.

CSPhD-winston-杨帆
关注 关注
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch优化算法:torch.optim.SGD的参数详解和应用
weixin_51659315的博客
01-19 6527
torch.optim.SGDPyTorch 中用于实现随机梯度下降(Stochastic Gradient Descent,SGD)优化算法的类。示例中,创建了一个线性模型,使用均方误差损失,并使用 torch.optim.SGD 作为优化器。它是一个正数,控制每次参数更新的步长。(默认值为 0): 动量(momentum)是一个用于加速 SGD 收敛的参数。(默认值为 0): 阻尼项,用于减缓动量的速度。(必须参数): 这是一个包含了需要优化的参数(张量)的迭代器,例如模型的参数。
pytorch 自定义损失函数、优化器Optimizer)和学习率策略(Scheduler)
zhaohongfei_358的博客
07-14 7669
梯度下降回顾 Pytorch 实现梯度下降与参数更新 自定义损失函数 自定义优化器 自定义学习率策略 使用 `LambdaLR` 实现简单的学习率策略 通过继承 `_LRScheduler` 实现自定义的学习率策略 通过手动更新Optimizer中的学习率来自定义学习策略......
Pytorch常用的函数(八)常见优化器SGD,Adagrad,RMSprop,Adam,AdamW总结
qq_44665283的博客
04-23 2206
Pytorch常用的函数(八)常见优化器SGD,Adagrad,RMSprop,Adam,AdamW总结
Pytorch优化器全总结(一)SGD、ASGD、Rprop、Adagrad
xian0710830114的专栏
09-06 6万+
这是一个系列,以Pytorch为例,介绍所有主流的优化器,如果都搞明白了,对优化器算法的掌握也就差不多了。作为系列的第一篇文章,本文介绍Pytorch中的SGD、ASGD、Rprop、Adagrad,其中主要介绍SGDAdagrad。因为这四个优化器出现的比较早,都存在一些硬伤,而作为现在主流优化器的基础又跳不过,所以作为开端吧。
pytorchoptimizer(优化器)的使用详解
学渣的博客
10-26 2万+
本文介绍包常见的 torch.optim 的使用方法和使用技巧。
pytorch优化器详解:SGD
weixin_39228381的博客
08-31 5万+
说明 模型每次反向传导都会给各个可学习的参数p计算出一个偏导数,用于更新对应的参数p。通常偏导数不会直接作用到对应的参数p上,而是通过优化器做一下处理,得到一个新的值,计算过程用函数F表示(不同的优化器对应的F的内容不同),即,然后和学习率lr一起作用于可学习参数p,即。 SGD参数 SGD是随机梯度下降(stochastic gradient descent)的首字母。 torch.optim.SGD(params, lr=<required paramet
pytorch_pytorch_卷积神经网络_
09-29
最后,定义损失函数(如交叉熵损失)和优化器(如SGD),并进行模型训练: ```python model = SimpleCNN() criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) ...
Pytorch构建神经网络进行分类
10-07
总结,通过PyTorch构建神经网络进行分类涉及网络结构设计、数据加载与处理、损失函数选择、优化器设置以及模型训练与评估等多个环节。理解并掌握这些知识点,将有助于你在实际项目中灵活应用PyTorch进行深度学习任务...
PyTorch实现卷积神经网络解决FashionMNIST分类挑战
最新发布
05-07
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9) ``` 最后,训练和测试模型: ```python num_epochs = 10 for epoch in range(num_epochs): running_loss = 0.0 for i, data in ...
详解PyTorch批训练及优化器比较.pdf
04-15
深度学习领域,PyTorch 是一个非常流行的框架,它提供了强大的灵活性和易用性,使得研究人员和开发者能够快速构建和训练神经网络模型。本文主要关注PyTorch中的批处理训练(Batch Training)以及优化器的选择与...
net_pytorch_卷积神经网络实现_
10-01
在这个项目中,我们将探讨如何使用PyTorch实现一个基本的卷积神经网络。 首先,我们需要导入必要的库,包括`torch`、`torch.nn`和`torch.optim`。`torch.nn`包含了构建神经网络结构所需的模块,而`torch.optim`则...
pytorch 正则化公式推导+实现+Adam优化器源码以及weight decay的设置
goodgoodstudy___的博客
11-15 1万+
1.为什么要进行正则化?怎么正则化? pytorch —— 正则化之weight_decay 上文简述: 误差可分解为偏差,方差与噪声之和,即 误差=偏差+方差+噪声 之和; 偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力; 方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响; 噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界; 正则化策略的目的就是降低方差,减小过拟合的发生。 对于L2norm: 因为公式中存在 因
python torch.optim.SGD
热门推荐
Florence_Janie的博客
04-13 8万+
[torch]optim.sgd学习参数 torch入门笔记14:Torch中optimsgd(Stochastic gradient descent)方法的实现细节 pytorch中使用torch.optim优化神经网络以及优化器的选择 神经网络优化器,主要是为了优化我们的神经网络,使他在我们的训练过程中快起来,节省社交网络训练的时间。在pytorch中提供了torch.optim方法优...
pytorch 优化器
qq_40107571的博客
09-02 3314
优化器
PyTorch 学习日记(2)——优化器
qq_40726937的博客
04-05 397
1、优化器Optim 优化器用通俗的话来说就是一种算法,是一种计算导数的算法。各种优化器的目的和发明它们的初衷其实就是能让用户选择一种适合自己场景的优化器优化器的最主要的衡量指标就是优化曲线的平稳度,最好的优化器就是每一轮样本数据的优化都让权重参数匀速的接近目标值,而不是忽上忽下的跳跃的变化。因此损失值的平稳下降对于一个深度学习模型来说是一个非常重要的衡量指标。 pytorch优化器都放在to...
pytorch学习(六)——优化器
ifhuke的博客
10-28 1876
pytorch 中的优化器简要介绍
pytorchSGD/Momentum/RMSprop/Adam优化器的简单比较
Troublemaker丶的博客
03-30 3884
SGD是比较普通的优化器(其实SDG也挺好的) MomentumSGD的升级版,代码里可看到和SGD用的也是同一个函数,只是加了动量 RMSprop是Momentum的升级版 Adam是RMSprop的升级版 设置超参,准备数据 利用之前的回归来实现 # 超参数 LR = 0.01 batch_size = 10 epoches = 3 torch.manual_seed(15) # 准备...
PyTorch学习之十种优化函数
mingo_敏
01-01 1万+
1 使用 2 基类 Optimizer torch.optim.Optimizer(params, defaults) params (iterable) —— Variable 或者 dict的iterable。指定了什么参数应当被优化。 defaults —— (dict):包含了优化选项默认值的字典(一个参数组没有指定的参数选项将会使用默认值)。 load_state_dict(stat...
PyTorch】4.3 优化器Optimizer(一)
尊新必威的博客
06-30 587
目录一、复习:机器学习模型训练步骤二、什么是优化器三、Optimizer基本属性三、Optimizer基本方法 任务简介: 学习优化器optimizer的基本属性、基本方法和作用。 详细说明: 本节学习优化器的基本概念,了解pytorchoptimizer的基本属性和方法 一、复习:机器学习模型训练步骤 二、什么是优化器 梯度指向的是当前点函数值增加最快的方向,梯度下降是指沿着负梯度的方向函数值减少最快。故梯度下降法可以使loss的值逐步减小。 三、Optimizer基本属性 三、Optimiz
在多分类任务实验中实现momentumrmsprop、adam优化器
07-24
在多分类任务实验中,可以使用以下代码实现momentumrmsprop和adam优化器: 1. Momentum优化器: ```python import torch import torch.nn as nn import torch.optim as optim # 定义模型 model = YourModel() # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9) # 在训练过程中使用优化器 for inputs, labels in dataloader: # 正向传播 outputs = model(inputs) loss = criterion(outputs, labels) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() ``` 2. RMSprop优化器: ```python import torch import torch.nn as nn import torch.optim as optim # 定义模型 model = YourModel() # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.RMSprop(model.parameters(), lr=0.001, alpha=0.99) # 在训练过程中使用优化器 for inputs, labels in dataloader: # 正向传播 outputs = model(inputs) loss = criterion(outputs, labels) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() ``` 3. Adam优化器: ```python import torch import torch.nn as nn import torch.optim as optim # 定义模型 model = YourModel() # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 在训练过程中使用优化器 for inputs, labels in dataloader: # 正向传播 outputs = model(inputs) loss = criterion(outputs, labels) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() ``` 以上代码展示了如何使用PyTorch库中的SGDRMSprop和Adam优化器来进行多分类任务的训练。请确保将`YourModel`替换为您实际使用的模型,并根据实际情况调整学习率(lr)和其他超参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • pytorch 池化层——最大值池化nn.MaxPool2d() nn.MaxPool1d() 34311
  • 自定义ava数据集及训练与测试 完整版 时空动作/行为 视频数据集制作 yolov5, deep sort, VIA MMAction, SlowFast 29591
  • 【slowfast 训练自己的数据集】自定义动作,制作自己的数据集,使用预训练模型进行训练,并检测其结果 28469
  • Pytorch-view的用法 torch.view(参数a,参数b,...) 有的时候会出现torch.view(-1)或者torch.view(参数a,-1)这种情况。 26473
  • 【SlowFast复现】SlowFast Networks for Video Recognition复现代码 使用自己的视频进行demo检测 24378

分类专栏

  • 论文翻译 8篇
  • 暨大-博士-作业 6篇
  • 智慧教育 1篇
  • 论文阅读 3篇
  • pytorch 7篇
  • mmacion2 1篇
  • slowfast 1篇
  • mmaction
  • 卷积神经网络 13篇
  • yolo 9篇
  • 机械臂 2篇
  • 机器人 6篇
  • ros 16篇
  • moveit 2篇
  • gazebo 7篇
  • python 10篇
  • format 2篇
  • view 1篇
  • nn.Linear 1篇
  • 池化层 1篇
  • nn.MaxPool 1篇
  • nn.MaxPool1d
  • nn.conv1d 1篇
  • nn.conv2d 1篇
  • kolourpaint 1篇
  • variable 1篇
  • tensor 1篇
  • 神经网络 1篇
  • yolov3 1篇
  • 目标检测 2篇
  • fcn 1篇
  • 算法 2篇

最新评论

  • 2023 安装 facebookresearch slowfast 自定义数据集训练 yolo数据集转ava数据集

    一个小小双子座: 作者这个项目是你的吧:https://github.com/Whiffe/SCB-dataset,是的话麻烦添加一下连接

  • 2023 安装 facebookresearch slowfast 自定义数据集训练 yolo数据集转ava数据集

    c_r_f: 他是按照yolo格式转化过去的

  • 论文阅读:Explainability for Large Language Models: A Survey

    CSDN-Ada助手: 你好,CSDN 开始提供 #论文阅读# 的列表服务了。请看:https://blog.csdn.net/nav/advanced-technology/paper-reading?utm_source=csdn_ai_ada_blog_reply 。如果你有更多需求,请来这里 https://gitcode.net/csdn/csdn-tags/-/issues/34?utm_source=csdn_ai_ada_blog_reply 给我们提。

  • 论文阅读:Automated Assessment of Fidelity and Interpretability: An Evaluation Framework for Large Langua

    CSDN-Ada助手: 你好,CSDN 开始提供 #论文阅读# 的列表服务了。请看:https://blog.csdn.net/nav/advanced-technology/paper-reading?utm_source=csdn_ai_ada_blog_reply 。如果你有更多需求,请来这里 https://gitcode.net/csdn/csdn-tags/-/issues/34?utm_source=csdn_ai_ada_blog_reply 给我们提。

  • 2023 安装 facebookresearch slowfast 自定义数据集训练 yolo数据集转ava数据集

    搬码工人: 有一点我没搞懂,就是为什么没有对每个具体框的行为进行标注

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 论文翻译:Hallucination Detection: Robustly Discerning Reliable Answers in Large Language Models
  • Week 7-杨帆-学习总结
  • 论文翻译:Can LLM Replace Stack Overflow? A Study on Robustness and Reliability of Large Language
2024
07月 26篇
06月 5篇
05月 4篇
03月 3篇
01月 2篇
2023年20篇
2022年33篇
2021年55篇
2020年89篇
2019年1篇
2018年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码坂田网络推广南联百搜标王惠州营销网站东莞设计网站光明英文网站建设爱联模板推广大鹏SEO按天收费惠州百度网站优化石岩网站排名优化龙岗seo排名布吉企业网站建设荷坳百度网站优化排名荷坳至尊标王坪地网站推广双龙推广网站横岗设计公司网站龙岗seo优化荷坳网站优化软件木棉湾SEO按天计费大鹏企业网站建设龙华外贸网站制作平湖模板网站建设大浪百度标王松岗网站推广系统永湖模板网站建设宝安网站制作爱联网站设计盐田模板推广盐田SEO按效果付费深圳网站推广系统歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化