没有合适的资源?快使用搜索试试~ 我知道了~
首页关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2.3k 浏览量
更新于2023-05-27
评论 1
收藏 55KB PDF 举报
今天小编就为大家分享一篇关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
资源详情
资源评论
资源推荐

关于关于torch.optim的灵活使用详解的灵活使用详解(包括重写包括重写SGD,加上加上L1正则正则)
今天小编就为大家分享一篇关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则),具有很好的参考价
值,希望对大家有所帮助。一起跟随小编过来看看吧
torch.optim的灵活使用详解
1. 基本用法:基本用法:
要构建一个优化器Optimizer,必须给它一个包含参数的迭代器来优化,然后,我们可以指定特定的优化选项,
例如学习速率,重量衰减值等。
注:注:如果要把model放在GPU中,需要在构建一个Optimizer之前就执行model.cuda(),确保优化器里面的参数也是在GPU
中。
例子:
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9)
2. 灵活的设置各层的学习率灵活的设置各层的学习率
将model中需要进行BP的层的参数送到torch.optim中,这些层不一定是连续的。
这个时候,Optimizer的参数不是一个可迭代的变量,而是一个可迭代的字典
(字典的key必须包含'params'(查看源码可以得知optimizer通过'params'访问parameters),
其他的key就是optimizer可以接受的,比如说'lr','weight_decay'),可以将这些字典构成一个list,
这样就是一个可迭代的字典了。
注:注:这个时候,可以在optimizer设置选项作为关键字参数传递,这时它们将被认为是默认值(当字典里面没有这个关键字参数
key-value对时,就使用这个默认的参数)
This is useful when you only want to vary a single option, while keeping all others consistent between parameter
groups.
例子:
optimizer = SGD([
{'params': model.features12.parameters(), 'lr': 1e-2},
{'params': model.features22.parameters()},
{'params': model.features32.parameters()},
{'params': model.features42.parameters()},
{'params': model.features52.parameters()},
], weight_decay1=5e-4, lr=1e-1, momentum=0.9)
上面创建的optim.SGD类型的Optimizer,lr默认值为1e-1,momentum默认值为0.9。features12的参数学习率为1e-2。
灵活更改各层的学习率灵活更改各层的学习率
torch.optim.optimizer.Optimizer的初始化函数如下:
__init__(self, params, lr=<object object>, momentum=0, dampening=0, weight_decay=0, nesterov=False)
params (iterable): iterable of parameters to optimize or dicts defining parameter groups (params可以是可迭代的参数,或者
一个定义参数组的字典,如上所示,字典的键值包括:params,lr,momentum,dampening,weight_decay,nesterov)
想要改变各层的学习率,可以访问optimizer的param_groups属性。type(optimizer.param_groups) -> list
optimizer.param_groups[0].keys()
Out[21]: ['dampening', 'nesterov', 'params', 'lr', 'weight_decay', 'momentum']
因此,想要更改某层参数的学习率,可以访问optimizer.param_groups,指定某个索引更改'lr'参数就可以。
def adjust_learning_rate(optimizer, decay_rate=0.9):
for para in optimizer.param_groups:
para['lr'] = para['lr']*decay_rate
重写重写torch.optim,加上,加上L1正则正则
查看torch.optim.SGD等Optimizer的源码,发现没有L1正则的选项,而L1正则更容易得到稀疏解。













安全验证
文档复制为VIP权益,开通VIP直接复制

评论0