如下我们定义一个简单的网络:
import torch
import torch.nn as nn
from torch.autograd import Variable
class net(nn.Module):
def __init__(self):
super(net, self).__init__()
self.input=2
self.output=1
self.linear=nn.Linear(self.input,self.output)
def forward(self,x):
return self.linear(x)
x=Variable(torch.ones([2,2]))
Net=net()
Net_optimizer=torch.optim.Adam(Net.parameters(),lr=0.001)
我们定义其学习率是0.001,如果在训练过程中我们想改变学习率,那么就要使用优化器的参数组param_groups来进行改变,我们先看看优化器的参数组param_groups包含什么参数:
print(Net_optimizer.param_groups)
输出:
[{'params': [Parameter containing:
tensor([[0.4828, 0.2699]], requires_grad=True), Parameter containing:
tensor([-0.4522], requires_grad=True)], 'lr': 0.001, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False}]
可以看见输出的是一个list,长度为1,包含的是一个字典,第一个key是“params”,其值是网络的权重向量和偏置,第二个key是“lr”也就是我们希望改变的学习率。
因此我们想改变这个学习率就可以直接是用key来改变。具体如下:
Net_optimizer.param_groups[0]["lr"]=0.004
print(Net_optimizer.param_groups)
输出:
[{'params': [Parameter containing:
tensor([[-0.6499, -0.2123]], requires_grad=True), Parameter containing:
tensor([-0.3835], requires_grad=True)], 'lr': 0.004, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False}]
这就把学习率改变了。