</h1>
<div class="clear"></div>
<div class="postBody">
有的时候需要我们通过一定机制来调整学习率,这个时候可以借助于torch.optim.lr_scheduler类来进行调整;一般地有下面两种调整策略:(通过两个例子来展示一下)
两种机制:LambdaLR机制和StepLR机制;
(1)LambdaLR机制:
optimizer_G = torch.optim.Adam([{'params' : optimizer_G.parameters() , 'initial_lr' : train_opt.lr}] , lr = train_opt.lr , betas = (train_opt.betal , 0.999))
lambda_G = lambda epoch : 0.5 ** (epoch // 30)
schduler_G = torch.optim.lr_scheduler.LambdaLR(optimizer_G.parameters() , lambda_G , last_epoch = 29);
scheduler.step()
lr = schduler.get_lr()[0]; //这里记得加一个[0]的索引!
for param_group in optimizer_G.param_groups():
param_group['lr'] = lr
解释:last_epoch是开始的前一个epoch的索引值,这里为29表示从epoch = 30开始(其中scheduler类中的epoch从last_epoch + 1开始,每次step操作epoch加1),学习率调整为lr * (0.5 ** (epoch // 30));另外注意的是:定义optimizer_G类时,需要写成上述那种形式,不要写成以前常见的“optimizer_G = torch.optim.Adam(params = optimizer_G.parameters()...)”,要像这里一样写成字典形式;否则lr_scheduler类会报“没有initial_lr的错误”
(2)StepLR机制:
schduler_G = torch.optim.lr_scheduler.StepLR(optimizer_G.parameters() , step_size = 30 , gamma = 0.1 , last_epoch = 29)
其他的和上面类似,这里的调整策略如下:
<div id="blog_post_info">
<div class="clear"></div>
<div id="post_next_prev">
<a href="https://www.cnblogs.com/zf-blog/p/11242712.html" class="p_n_p_prefix">« </a> 上一篇: <a href="https://www.cnblogs.com/zf-blog/p/11242712.html" title="发布于 2019-07-25 10:37">pix2pix&Cycle GAN&pix2pix HD</a>
<br>
<a href="https://www.cnblogs.com/zf-blog/p/11360557.html" class="p_n_p_prefix">» </a> 下一篇: <a href="https://www.cnblogs.com/zf-blog/p/11360557.html" title="发布于 2019-08-15 21:06">pytorch 中Dataloader中的collate_fn参数</a>