有的时候需要我们通过一定机制来调整学习率,这个时候可以借助于torch.optim.lrschedulertorch.optim.lr_schedulertorch.optim.lrscheduler类来进行调整;torch.optim.lr_scheduler模块提供了一些根据epoch训练次数来调整学习率(learning rate)的方法。一般情况下我们会设置随着epoch的增大而逐渐减小学习率从而达到更好的训练效果。
下面介绍了一种调整策略机制:StepLR机制;
(随着epochepochepoch的增大而逐渐减小学习率从而达到更好的训练效果。
class torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)
import torch
import torch.nn as nn
from torch.optim.lr_scheduler import StepLR
import itertoolsinitial_lr = 0.1class model(nn.Module):def __init__(self):super().__init__()self.conv1 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3)def forward(self, x):passnet_1 = model()optimizer_1 = torch.optim.Adam(net_1.parameters(), lr = initial_lr)
scheduler_1 = StepLR(optimizer_1, step_size=3, gamma=0.1)print("初始化的学习率:", optimizer_1.defaults['lr'])for epoch in range(1, 11):# trainoptimizer_1.zero_grad()optimizer_1.step()print("第%d个epoch的学习率:%f" % (epoch, optimizer_1.param_groups[0]['lr']))scheduler_1.step()
初始化的学习率: 0.1
第1个epoch的学习率:0.100000
第2个epoch的学习率:0.100000
第3个epoch的学习率:0.100000
第4个epoch的学习率:0.010000
第5个epoch的学习率:0.010000
第6个epoch的学习率:0.010000
第7个epoch的学习率:0.001000
第8个epoch的学习率:0.001000
第9个epoch的学习率:0.001000
第10个epoch的学习率:0.000100
谩骂的将各种框架及其结构啥的全部都将其搞清楚,研究彻底,
会自己敲打代码,会自己将其搞定都行啦的样子与打算。
下一篇:计算机网络——数据链路层