`
wx1568037608
  • 浏览: 34791 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

『PyTorch』第十一弹_torch.optim优化器 每层定制参数

 
阅读更多

一、简化前馈网络LeNet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import torch as t
 
 
class LeNet(t.nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.features = t.nn.Sequential(
            t.nn.Conv2d(365),
            t.nn.ReLU(),
            t.nn.MaxPool2d(22),
            t.nn.Conv2d(6165),
            t.nn.ReLU(),
            t.nn.MaxPool2d(22)
        )
        # 由于调整shape并不是一个class层,
        # 所以在涉及这种操作(非nn.Module操作)需要拆分为多个模型
        self.classifiter = t.nn.Sequential(
            t.nn.Linear(16*5*5120),
            t.nn.ReLU(),
            t.nn.Linear(12084),
            t.nn.ReLU(),
            t.nn.Linear(8410)
        )
 
    def forward(self, x):
        = self.features(x)
        = x.view(-116*5*5)
        = self.classifiter(x)
        return x
 
net = LeNet()

 

二、优化器基本使用方法

  1. 建立优化器实例
  2. 循环:
    1. 清空梯度
    2. 向前传播
    3. 计算Loss
    4. 反向传播
    5. 更新参数
1
2
3
4
5
6
7
8
9
10
11
from torch import optim
 
# 通常的step优化过程
optimizer = optim.SGD(params=net.parameters(), lr=1)
optimizer.zero_grad()  # net.zero_grad()
 
input_ = t.autograd.Variable(t.randn(133232))
output = net(input_)
output.backward(output)
 
optimizer.step()

 

三、网络模块参数定制

为不同的子网络参数不同的学习率,finetune常用,使分类器学习率参数更高,学习速度更快(理论上)。

1.经由构建网络时划分好的模组进行学习率设定,

1
2
3
# # 直接对不同的网络模块制定不同学习率
optimizer = optim.SGD([{'params': net.features.parameters()}, # 默认lr是1e-5
                       {'params': net.classifiter.parameters(), 'lr'1e-2}], lr=1e-5)

 

 2.以网络层对象为单位进行分组,并设定学习率

1
2
3
4
5
6
7
8
9
10
# # 以层为单位,为不同层指定不同的学习率
# ## 提取指定层对象
special_layers = t.nn.ModuleList([net.classifiter[0], net.classifiter[3]])
# ## 获取指定层参数id
special_layers_params = list(map(id, special_layers.parameters()))
print(special_layers_params)
# ## 获取非指定层的参数id
base_params = filter(lambda p: id(p) not in special_layers_params, net.parameters())
optimizer = t.optim.SGD([{'params': base_params},
                         {'params': special_layers.parameters(), 'lr'0.01}], lr=0.001)

 

四、在训练中动态的调整学习率

 

1
2
3
4
5
6
7
8
9
'''调整学习率'''
# 新建optimizer或者修改optimizer.params_groups对应的学习率
# # 新建optimizer更简单也更推荐,optimizer十分轻量级,所以开销很小
# # 但是新的优化器会初始化动量等状态信息,这对于使用动量的优化器(momentum参数的sgd)可能会造成收敛中的震荡
# ## optimizer.param_groups:长度2的list,optimizer.param_groups[0]:长度6的字典
print(optimizer.param_groups[0]['lr'])
old_lr = 0.1
optimizer = optim.SGD([{'params': net.features.parameters()},
                       {'params': net.classifiter.parameters(), 'lr': old_lr*0.1}], lr=1e-5)

 可以看到optimizer.param_groups结构,[{'params','lr', 'momentum', 'dampening', 'weight_decay', 'nesterov'},{……}],集合了优化器的各项参数。

 

分享到:
评论

相关推荐

    关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)

    PyTorch 提供了一个强大的 `torch.optim` 模块,它包含了多种优化算法,如随机梯度下降(SGD)、Adam、RMSprop 等。本文将详细介绍 `torch.optim` 的使用方法,并着重讲解如何根据需求自定义优化器,例如添加 L1 正则...

    pytorch_API_docs.zip

    pytorch API documentation 0.4.1 and 0.1.11 Python API torch torch.nn torch.nn.functional torch.Tensor Tensor Attributes torch.autograd torch.cuda torch.distributed torch.distributions torch...

    浅谈Pytorch torch.optim优化器个性化的使用

    在PyTorch中,`torch.optim` 是一个用于优化神经网络权重的重要库,它提供了多种常用的优化算法,如SGD(随机梯度下降)、Adam、RMSprop等。本篇文章将探讨如何在PyTorch中个性化地使用这些优化器。 首先,我们来看...

    梯度算法大合集——程序实现7种常用的梯度优化算法、5种线搜索方法,并与Pytorch的torch.optim对比结果

    梯度下降法是最著名的优化算法之一,本文基于Python和Pytorch编写了梯度优化程序Gradient_optim,并将结果与Pytorch中自带的梯度优化器torch.optim对比。 1.程序适用于任意维解析函数的无约束优化问题,求解最小值及...

    torch_scatter-2.1.0+pt113cpu-cp39-cp39-linux_x86_64.whl.zip

    在实际使用中,通常会结合torch的其他功能,如torch.nn.Module定义模型结构,torch.optim进行优化,以及torch.utils.data.Dataset和DataLoader进行数据加载和预处理,共同构建复杂的GNN模型。 为了正确安装torch_...

    测试学习率调度器.zip

    使用这些调度器时,需要先创建一个优化器实例,如`torch.optim.SGD`或`torch.optim.Adam`,然后将调度器附加到优化器上,通过`scheduler.step()`在每次迭代后更新学习率。在实际应用中,可以根据模型的复杂性、数据...

    Python库 | torch_optim_sparse-0.1.1-py3-none-any.whl

    `torch_optim_sparse-0.1.1-py3-none-any.whl` 是一个与Python相关的库文件,特别地,它是针对PyTorch框架的一个优化器扩展库。这个库的名称暗示了它可能专注于实现针对稀疏参数的优化算法,这对于处理大规模稀疏...

    PyTorch中的矩阵分解_Python_下载.zip

    在PyTorch中,我们可以使用`torch.Tensor`来表示这些矩阵,并利用优化库如`torch.optim`进行参数更新。以下是一段简单的PyTorch矩阵分解实现的代码框架: ```python import torch from torch import optim # 假设R...

    pytorch_deep.rar

    PyTorch提供了多种优化器,如梯度下降法`optim.SGD`、Adam优化器`optim.Adam`等。优化器负责更新网络参数,以最小化损失函数。在训练过程中,通过调用`optimizer.step()`来执行一次参数更新,`optimizer.zero_grad...

    Pytorch,Torch等深度学习框架

    torch.nn 一个神经网络库与autograd设计了最大的灵活性torch.optim 一种与torch.nn一起使用的优化包,具有标准优化方法,如SGD,RMSProp,LBFGS,Adam等。 torch.multiprocessing python多处理,但是具有魔法内存...

    Python库 | albert_pytorch-0.0.1.7.tar.gz

    PyTorch提供了强大的工具和API,如torch.nn和torch.optim,用于构建和优化深度学习模型。 ALBERT,全称为“A Lite BERT”,是由谷歌研究团队在2019年提出的一种轻量级的BERT变体。BERT(Bidirectional Encoder ...

    torch_scatter-2.0.9-cp310-cp310-macosx_10_15_x86_64.whl.zip

    这个库的版本为2.0.9,专为Python 3.10和macOS 10.15的x86_64架构进行了优化,并且需要与特定版本的torch——1.13.0+cpu一同使用。本文将详细介绍torch_scatter的功能、安装过程以及如何与torch配合工作。 一、...

    pytorch classification的.py_pytorch_pytorch分类_MNISTpytorch_

    在PyTorch中实现MNIST手写体分类是一项基础任务,它可以帮助初学者理解深度学习的基本原理和PyTorch框架的使用。MNIST数据集包含了0到9的手写数字图像,是许多入门级机器学习和深度学习教程的首选数据集。下面我们将...

    PyTorch 神经网络1

    11. torch.legacy 模块 torch.legacy 模块提供了向后兼容性的功能,允许从 Torch 移植来的 legacy 代码。 PyTorch 提供了完整的神经网络实现功能,包括定义网络、损失函数、反向传播、更新权重等。 PyTorch 的工具...

    pytorch及依赖包完整免费下载.zip

    - **优化器**:PyTorch的`optim`模块提供了多种优化算法,如SGD(随机梯度下降)、Adam、RMSprop等,用于更新网络参数。 - **保存和加载模型**:使用`torch.save()`和`torch.load()`可以方便地保存和加载模型权重和...

    torch_swa_examples_SWA_pytorch_

    标题中的"torch_swa_examples"指的是使用PyTorch实现Stochastic Weight Averaging(SWA)的示例代码。SWA是一种优化技术,它在深度学习模型训练的后期阶段平均多个周期的权重,以获得更稳定的解决方案,从而提高模型...

    pytorch_demo.rar

    在PyTorch中,我们可以使用`torch.optim`模块的优化器(如`SGD`或`Adam`)进行梯度下降。同时,我们还需要记录并绘制训练过程中损失(loss)和预测精度的变化,这可以通过`torch.utils.tensorboard`或自定义Python脚本...

Global site tag (gtag.js) - Google Analytics