一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第22天,点击查看活动详情。
为保障实现的准确性,试验采用公开数据集MNIST做数据集,本试验只对比Pytorch中各种优化器,所以在每次实验使用的网络结构、损失函数,训练次数等都相同。
种类 | 区别 |
---|---|
实验设备 | 相同 |
网络结构 | 相同 |
损失函数 | 相同 |
训练次数 | 相同 |
训练测试比例 | 相同 |
学习率 | 相同 |
优化器 | 不同 |
在Pytorch中的optim模块,提供了多种可以直接使用的深度学习的优化器算法,十分方便调用,无需再设计。
种类 | 种类名称 |
---|---|
optim.SGD() | 随机梯度下降算法 |
optim.Rprop() | 弹性反向传播算法 |
optim.ASGD() | 平均随机梯度下降算法 |
optim.RMSprop() | RMSprop算法 |
optim.LBFGS() | L-BFGS算法 |
optim.Adam() | Adam算法 |
optim.Adamax() | Adamax算法 |
optim.Adadelta() | Adadelta算法 |
optim.Adagrad() | Adagrad算法 |
我们以adam 为例子对设置参数进行说明:
params: 待优化参数的iterable 或定义了参数组的dict, 一般为model.parameters()
lr: 学习率(默认为0.001)
betas: 梯度和梯度平方的系数(默认为0.999)
eps: 增加稳定性加到分母的项(默认为1-8e)
weight_decay: 权重衰减(L2惩罚)默认为0
由于是使用同一实验设备,网络等也相同,我们节约训练时间,定训练轮数为20轮,我们选用的定义损失函数为交叉熵函数。(由于Rprop和LBFGS需要改动其他参数,为保证其他变量的一至性在这里我就不做实验了)
optim.SGD() 实验结果:
optim.ASGD() 实验结果:
optim.RMSprop() 实验结果:
optim.Adam() 实验结果:
optim.Adamax() 实验结果:
optim.Adadelta() 实验结果:
optim.Adagrad() 实验结果:
优化器 | 收敛情况 | Best_Train_Loss | Best_Tese_Loss |
---|---|---|---|
optim.SGD() | 收敛 | 0.6943 | 0.7120 |
optim.ASGD() | 收敛 | 0.7156 | 0.7301 |
optim.RMSprop() | 收敛 | 0.4409 | 0.5086 |
optim.Adam() | 收敛 | 0.2536 | 0.3576 |
optim.Adamax() | 收敛 | 0.1894 | 0.3306 |
optim.Adadelta() | 收敛 | 0.7754 | 0.7814 |
optim.Adagrad() | 收敛 | 0.2434 | 0.233 |
在线客服
客服咨询
官方微信
返回顶部