基于pytorch的优化(torch.optim)

1、直接调用optim内置优化(Adam()和SGD())

optimizer = torch.optim.SGD(model.parameters(), lr = 0.001,betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
Adam()参数描述
parameters()待优化参数的iterable
lr=学习率(默认:1e-3)
betas (Tuple[float, float])用于计算梯度以及梯度平方的运行平均值的系数
weight_decay (float)权重衰减(L2惩罚)
eps (float)增加数值计算的稳定性
SGD()参数描述
parameters()待优化参数的iterable
lr=学习率(默认:1e-3)
momentum冲量
weight_decay (float)权重衰减(L2惩罚)

2、为每层单独设置参数

	import torch.nn as nn
import torch
class NetWord(nn.Module):
    def __init__(self):
        super(NetWord,self).__init__()
        self.main_1 = nn.Sequential(
            nn.Linear(28 * 28,512),
            nn.LeakyReLU(),  #如果x>0输出0,如果x小于0 输出a*x a表示很小的斜率 比如0.1

        )
        self.main_2 = nn.Sequential(
            nn.Linear(512, 256),
            nn.LeakyReLU(),
            nn.Linear(256, 1),
            nn.Sigmoid()
        )
    def forward(self,x):
        x = x.view(-1,28*28)
        x = self.main_1(x)
        x = self.main_2(x)
        return x
#模型初始化
model = NetWord()
#优化
optimizer = torch.optim.SGD([
                {'params': model.main_1.parameters()},
                {'params': model.main_2.parameters(), 'lr': 1e-3}
            ], lr=1e-2, momentum=0.9)

print(optimizer)
# input = torch.randn((28,28))
# output = model(input)
# loss = nn.L1Loss() #定义损失函数
# loss_1 = loss(output, output*0.9) #传入损失函数  output*0.9是真实数据
#optimizer.zero_grad() # 梯度清零
# loss_1.backward()
# optimizer.step()
# print(loss_1.item())

输出:

Parameter Group 0
dampening: 0
differentiable: False
foreach: None
lr: 0.01
maximize: False
momentum: 0.9
nesterov: False
weight_decay: 0

Parameter Group 1
dampening: 0
differentiable: False
foreach: None
lr: 0.001
maximize: False
momentum: 0.9
nesterov: False
weight_decay: 0
)

3、学习率衰减

StepLR、ExponentialLR、MultiStepLR和ReduceLROnPlateau

import torch
scheduler =  torch.optim.lr_scheduler.StepLR(optimizer, gamma=0.9) #StepLR 阶梯式衰减
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer,milestones=[20,80],gamma = 0.9) #多阶梯式衰减
scheduler =  torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.9 ) #指数连续衰减
torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0.0001, eps=1e-08)
scheduler.step()
ReduceLROnPlateau参数触发条件
mode'min’模式检测metric是否不再减小,'max’模式检测metric是否不再增大
factor触发条件后lr*=factor
patience不再减小(或增大)的累计次数
verbose触发条件后输出
threshold只关注超过阈值的显著变化
threshold_mode‘rel’参数:max模式下如果超过best(1+threshold)为显著,min模式下如果低于best(1-threshold)为显著;‘abs’参数:max模式下如果超过best+threshold为显著,min模式下如果低于best-threshold为显著
cooldown触发条件后,等待一定的epoch,减缓lr下降速度
min_lr最小的允许lr
eps如果新旧lr之间的差异小于1e-08,则忽略此次更新
PyTorch是一个基于Python的科学计算库,主要针对深度学习任务。在PyTorch中,torch.nn是一个用于构建神经网络模型的模块。 torch.nn模块提供了一系列神经网络层和函数,方便用户构建自定义的神经网络。用户可以通过继承torch.nn.Module类来定义自己的神经网络模型。torch.nn模块中常用的类包括各种层(例如全连接层、卷积层、池化层和循环层等)、非线性激活函数和损失函数等。 在使用torch.nn模块构建神经网络时,用户需要实现模型的前向传播函数forward()。该函数定义了输入数据在神经网络中的流动方式,即通过层和函数的组合计算输出。在forward()函数中,用户可以使用已定义的层和函数进行计算,也可以实现自定义的操作。 torch.nn模块中的另一个重要概念是参数(parameter)。参数是模型中需要学习的变量,例如网络层的权重和偏置项。用户可以通过在模型中定义torch.nn.Parameter对象来创建参数,并在forward()函数中进行使用。 除了torch.nn模块外,PyTorch还提供了其他的工具和模块来辅助神经网络的训练和优化过程。例如torch.optim模块包含了各种优化算法,如随机梯度下降(SGD)、Adam等,用于更新模型中的参数。torch.utils.data模块提供了数据处理和加载的工具,方便用户使用自己的数据训练模型。 总之,torch.nn模块是PyTorch中用于构建神经网络模型的重要组成部分。通过使用torch.nn的各种类和函数,用户可以方便地创建自己想要的神经网络结构,并利用PyTorch强大的计算能力和优化算法来训练和优化模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值