iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >pytorch中的优化器optimizer.param_groups用法
  • 447
分享到

pytorch中的优化器optimizer.param_groups用法

2024-04-02 19:04:59 447人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

optimizer.param_groups: 是长度为2的list,其中的元素是2个字典; optimizer.param_groups[0]: 长度为6的字典,包括[‘amsgr

optimizer.param_groups: 是长度为2的list,其中的元素是2个字典;

optimizer.param_groups[0]: 长度为6的字典,包括[‘amsgrad', ‘params', ‘lr', ‘betas', ‘weight_decay', ‘eps']这6个参数;

optimizer.param_groups[1]: 好像是表示优化器的状态的一个字典;


import torch
import torch.optim as optimh2
w1 = torch.randn(3, 3)
w1.requires_grad = True
w2 = torch.randn(3, 3)
w2.requires_grad = True
o = optim.Adam([w1])
print(o.param_groups)

[{'amsgrad': False,
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'lr': 0.001,
  'params': [tensor([[ 2.9064, -0.2141, -0.4037],
           [-0.5718,  1.0375, -0.6862],
           [-0.8372,  0.4380, -0.1572]])],
  'weight_decay': 0}]

Per the docs, the add_param_group method accepts a param_group parameter that is a dict. Example of use:h2import torch
import torch.optim as optimh2
w1 = torch.randn(3, 3)
w1.requires_grad = True
w2 = torch.randn(3, 3)
w2.requires_grad = True
o = optim.Adam([w1])
print(o.param_groups)
givesh2[{'amsgrad': False,
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'lr': 0.001,
  'params': [tensor([[ 2.9064, -0.2141, -0.4037],
           [-0.5718,  1.0375, -0.6862],
           [-0.8372,  0.4380, -0.1572]])],
  'weight_decay': 0}]
nowh2o.add_param_group({'params': w2})
print(o.param_groups)

[{'amsgrad': False,
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'lr': 0.001,
  'params': [tensor([[ 2.9064, -0.2141, -0.4037],
           [-0.5718,  1.0375, -0.6862],
           [-0.8372,  0.4380, -0.1572]])],
  'weight_decay': 0},
 {'amsgrad': False,
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'lr': 0.001,
  'params': [tensor([[-0.0560,  0.4585, -0.7589],
           [-0.1994,  0.4557,  0.5648],
           [-0.1280, -0.0333, -1.1886]])],
  'weight_decay': 0}]

# 动态修改学习率
for param_group in optimizer.param_groups:
    param_group["lr"] = lr 
# 得到学习率optimizer.param_groups[0]["lr"] h2# print('查看optimizer.param_groups结构:')
# i_list=[i for i in optimizer.param_groups[0].keys()]
# print(i_list)    
['amsgrad', 'params', 'lr', 'betas', 'weight_decay', 'eps']

补充:pytorch中的优化器总结

以SGD优化器为例:


# -*- coding: utf-8 -*-
#@Time    :2019/7/3 22:31
#@Author  :XiaoMa
 
from torch import nn as nn
import torch as t
from torch.autograd import Variable as V
#定义一个LeNet网络
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.features=nn.Sequential(
            nn.Conv2d(3,6,5),
            nn.ReLU(),
            nn.MaxPool2d(2,2),
            nn.Conv2d(6,16,5),
            nn.ReLU(),
            nn.MaxPool2d(2,3)
        )
        
        self.classifier=nn.Sequential(\
            nn.Linear(16*5*5,120),
            nn.ReLU(),
            nn.Linear(120,84),
            nn.ReLU(),
            nn.Linear(84,10)
            )
    def forward(self, x):
        x=self.features(x)
        x=x.view(-1,16*5*5)
        x=self.classifier(x)
        return x
net=Net()
 
from torch import optim #优化器
optimizer=optim.SGD(params=net.parameters(),lr=1)
optimizer.zero_grad()   #梯度清零,相当于net.zero_grad()
 
input=V(t.randn(1,3,32,32))
output=net(input)
output.backward(output)     #fake backward
optimizer.step()    #执行优化
 
#为不同子网络设置不同的学习率,在finetune中经常用到
#如果对某个参数不指定学习率,就使用默认学习率
optimizer=optim.SGD(
    [{'param':net.features.parameters()},    #学习率为1e-5
    {'param':net.classifier.parameters(),'lr':1e-2}],lr=1e-5
)
 
#只为两个全连接层设置较大的学习率,其余层的学习率较小
special_layers=nn.ModuleList([net.classifier[0],net.classifier[3]])
special_layers_params=list(map(id,special_layers.parameters()))
base_params=filter(lambda p:id(p) not in special_layers_params,net.parameters())
 
optimizer=t.optim.SGD([
    {'param':base_params},
    {'param':special_layers.parameters(),'lr':0.01}
],lr=0.001)

调整学习率主要有两种做法。

一种是修改optimizer.param_groups中对应的学习率,另一种是新建优化器(更简单也是更推荐的做法),由于optimizer十分轻量级,构建开销很小,故可以构建新的optimizer。

但是新建优化器会重新初始化动量等状态信息,这对使用动量的优化器来说(如自带的momentum的sgd),可能会造成损失函数在收敛过程中出现震荡。

如:


#调整学习率,新建一个optimizer
old_lr=0.1
optimizer=optim.SGD([
                {'param':net.features.parameters()},
                {'param':net.classifiers.parameters(),'lr':old_lr*0.5}],lr=1e-5)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: pytorch中的优化器optimizer.param_groups用法

本文链接: https://www.lsjlt.com/news/127228.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • pytorch中的优化器optimizer.param_groups用法
    optimizer.param_groups: 是长度为2的list,其中的元素是2个字典; optimizer.param_groups[0]: 长度为6的字典,包括[‘amsgr...
    99+
    2024-04-02
  • pytorch中优化器optimizer.param_groups用法的示例分析
    小编给大家分享一下pytorch中优化器optimizer.param_groups用法的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!optimizer.param_groups: 是长度为2的list,其中的元...
    99+
    2023-06-15
  • PyTorch中怎么选择合适的优化器
    在PyTorch中,选择合适的优化器取决于您的模型和训练任务。以下是一些常用的优化器及其适用场景: SGD(随机梯度下降):SG...
    99+
    2024-03-05
    PyTorch
  • Pytorch/Python中item()的用法
    前言 在使用Pytorch训练模型时,用到python中的item()函数,如: train_loss += loss.item() 现对item()函数用法做出总结。item()函数的作用是从包含单...
    99+
    2023-09-20
    python pytorch 深度学习
  • PyTorch中可视化工具的使用
    目录一、网络结构的可视化1.1 通过HiddenLayer可视化网络 1.2 通过PyTorchViz可视化网络 二、训练过程可视化 2.1 通过ten...
    99+
    2023-05-15
    PyTorch 可视化工具
  • MySQL中优化的方法
    这篇文章主要介绍MySQL中优化的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!优化方向SQL优化sql优化分析索引优化优化数据库对象优化表的数据类型表拆分(水平、垂直)反范式使...
    99+
    2024-04-02
  • pytorch中的dataset用法详解
    目录1.torch.utils.data 里面的dataset使用方法2.torchvision.datasets的使用方法用法1:使用官方数据集用法2:ImageFolder通用的...
    99+
    2024-04-02
  • Pytorch中的gather使用方法
    官方说明 gather可以对一个Tensor进行聚合,声明为:torch.gather(input, dim, index, out=None) → Tensor 一般来说有三个参数...
    99+
    2024-04-02
  • pytorch中[..., 0]的用法说明
    在看程序的时候看到了x[…, 0]的语句不是很理解,后来自己做实验略微了解,以此记录方便自己查看。 b=torch.Tensor([[[[10,2],[4,5],[7,8]],[...
    99+
    2024-04-02
  • Pytorch梯度下降优化的示例分析
    这篇文章主要介绍了Pytorch梯度下降优化的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、激活函数1.Sigmoid函数函数图像以及表达式如下:通过该函数,可以...
    99+
    2023-06-25
  • Pytorch中的数据集划分&正则化方法
    1.训练集&验证集&测试集 训练集:训练数据 验证集:验证不同算法(比如利用网格搜索对超参数进行调整等),检验哪种更有效 测试集:正确评估分类器的性能 正常流程:验证...
    99+
    2024-04-02
  • 在jupyternotebook中使用pytorch的方法
    笔者刚开始学习pytorch时便遇到了无法在jupyter notebook使用anaconda配置的环境的问题,当时尝试了各种方法:卸载重装anaconda、pytorch环境、j...
    99+
    2024-04-02
  • pytorch中with torch.no_grad():的用法实例
    目录1.关于with2.关于withtorch.no_grad():附:pytorch使用模型测试使用withtorch.no_grad():总结1.关于with with是pyth...
    99+
    2024-04-02
  • 常用的MySQL 优化方法
    数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷。   本文我们来...
    99+
    2023-09-02
    mysql 数据库 sql
  • jQuery中优化Web应用程序的方法
    这篇文章给大家介绍jQuery中优化Web应用程序的方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。jQuery让编写基于JavaScript的良好Web应用程序变得简单明了,但是要...
    99+
    2024-04-02
  • Torch中常用的优化算法有哪些
    在Torch中常用的优化算法包括: 随机梯度下降(SGD) Adam优化算法 Adagrad优化算法 RMSprop优化算法 Ad...
    99+
    2024-03-14
    Torch
  • pytorch中的numel函数用法说明
    获取tensor中一共包含多少个元素 import torch x = torch.randn(3,3) print("number elements of x is ",x.n...
    99+
    2024-04-02
  • 聊聊pytorch中Optimizer与optimizer.step()的用法
    当我们想指定每一层的学习率时: optim.SGD([ {'params': model.base.parameters()}, ...
    99+
    2024-04-02
  • Pytorch中DataLoader的使用方法详解
    目录一:dataset类构建。二:DataLoader使用三:举例前言加载数据datasetdataloader在Pytorch中,torch.utils.data中的Dataset...
    99+
    2024-04-02
  • PyTorch中permute的基本用法示例
    目录permute(dims)附:permute(多维数组,[维数的组合])总结permute(dims) 将tensor的维度换位。 参数:参数是一系列的整数,代表原来张量的维度。...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作