【Pytorch】optimizer原理
栏目:公司新闻 发布时间:2024-04-15
文章目录optimizer原理1.测试optimizer有哪些属性2.测试optimizer的param_groups包含哪些参数3.optimizer的状态state_dict()4.optimizer的load_state_dict()5.optimizer的梯度清空zero_grad()6.optimizer的单步

【参考笔记】
【源码链接
举个栗子,定义一个全连接网络:

 
 
 

得到:

 
 
 

得到:

 

其中2x2的矩阵是net的权重矩阵,1x2为偏置矩阵,其余为优化器的其它参数,所以说param_groups保存了优化器的全部数据,这个下面的state_dict()不同。

参考下面源码中对state_dict()的定义,可以看出state_dict()包含优化器状态state和参数param_groups两个参数

 

打印优化器参数:

 

可以到优化器的完整参数如下:

 

打印优化器完整状态(状态+参数):

 

可以到优化器的状态如下:

 

保存优化器的完整状态:

 
 

恢复优化器的完整状态:

 
 

optimizer.zero_grad()源码定义如下:

 

这个遍历过程就是获取optimizer的param_groups属性的字典,之中的[“params”],之中的所有参数,通过遍历设定每个参数的梯度值为0。

直接看源码:

 

优化器的step()函数负责更新参数值,但是其具体实现对于不同的优化算法是不同的,所以optimizer类只是定义了这种行为,但是并没有给出具体实现。

【其他参考资料】

平台注册入口