torch.optim的灵活使用(包括重写SGD,加上L1正则)

2024-07-01

torch.optim的灵活使用

1. 基本用法:

 

注:如果要把model放在GPU中,需要在构建一个Optimizer之前就执行model.cuda(),确保优化器里面的参数也是在GPU中。
例子:

 

2. 灵活的设置各层的学习率

 

注:这个时候,可以在optimizer设置选项作为关键字参数传递,这时它们将被认为是默认值(当字典里面没有这个关键字参数key-value对时,就使用这个默认的参数)
This is useful when you only want to vary a single option, while keeping all others consistent between parameter groups.

例子:

 

上面创建的optim.SGD类型的Optimizer,lr默认值为1e-1,momentum默认值为0.9。features12的参数学习率为1e-2。

灵活更改各层的学习率

torch.optim.optimizer.Optimizer的初始化函数如下:

 

params (iterable): iterable of parameters to optimize or dicts defining parameter groups (params可以是可迭代的参数,或者一个定义参数组的字典,如上所示,字典的键值包括:params,lr,momentum,dampening,weight_decay,nesterov)
想要改变各层的学习率,可以访问optimizer的param_groups属性。

 

因此,想要更改某层参数的学习率,可以访问optimizer.param_groups,指定某个索引更改’lr’参数就可以。

 

重写torch.optim,加上L1正则

查看torch.optim.SGD等Optimizer的源码,发现没有L1正则的选项,而L1正则更容易得到稀疏解。
这个时候,可以更改文件,模拟L2正则化的操作。
L1正则化求导如下:

 

更改后的sgd.py如下:

 

一个使用的例子:

地址:广东省广州市天河区88号 客服热线:400-123-4567 传真:+86-123-4567 QQ:1234567890

Copyright © 2012-2018 首页-焦点娱乐-注册登录站琼ICP备xxxxxxxx号

平台注册入口