以下选取部分本人认为的常用的优化器以及参数(即不全),想看详情的可去文档查看.
Module: tf.keras.optimizers | TensorFlow Core v2.9.1
Adam:
最常用的优化器之一,不懂用什么优化器的时候选它就对了。
TensorFlow:
optimizer=tensorflow.keras.optimizers.Adam( lr , beta_1= ,beta_2= ,epsilon= )
lr : 学习率,默认为0.001.
beta_1:一阶矩估计的指数衰减率.默认为 0.9.
beta_2:二阶矩估计的指数衰减率.默认为 0.999.
epsilon:用于数值稳定性的小常数(模糊因子???),默认值为0.0000001(以上这仨参数尽量不动,就按默认值)
PyTorch:
optimizers=torch.optim.Adam( params , lr= ,betas= ,eps= )
params:待优化参数,加入(model.parameters( ))即可,其中model为自行定义的网络结构.
lr:学习率,默认值为0.001.
betas:质数衰减率,其中需包括一阶和二阶,即填入包含两参数的列表或元组.
eps:同上的epsilon.
SGD:
随机梯度下降,可在训练时下调学习率.
TensorFlow:
optimizer=tensorflow.keras.optimizers.SGD( lr , momentum= ,decay= )
lr:学习率.
momentum:动量参数,默认值为0.0
decay: 学习率衰减值,默认值为0.0
PyTorch:
optimizer=torch.optim.SGD(params , lr= , momentum= , weight_decay= )
lr:学习率.
momentum:动量参数,默认值为0.0.
weight_decay:权重衰减系数,默认为0.0
Adagrad:
可自适应调整学习率.
TensorFlow:
optimizer=tensorflow.keras.optimizers.Adagrad( lr , epsilon= , decay=)
lr:学习率.
epsilon:模糊因子.
decay:学习率衰减值.
PyTorch:
optimizer=torch.optim.Adagrad( params , lr= , lr_decay= , weight_decay= )
lr_decay:学习率衰减系数.
weight_decay:权重衰减系数.
RMSprop:
解决了上面那个Adagrad学习率急速下降的问题,可以看做优化版.
TensorFlow:
optimizer=tensorflow.keras.optimizers.RMSprop( lr= , rho= , epsilon= , decay= )
rho:梯度的折扣因子.默认值为 0.9.
epsilon:模糊因子,默认值为0.0000001.
decay:学习率衰减值.
PyTorch:
optimizer=torch.optim.RMSprop(params, lr= , alpha= , eps= , weight_decay , momentum= )
alpha:平滑常数,默认值为0.99
eps:为了增加数值计算的稳定性而加到分母里的项.默认值为0.00000001
momentum:动量因子,默认值为0.0
使用优化器:
tensorflow:
训练后更新参数:optimizer.apply_gradients(zip(计算好的梯度,网络模型的参数))
网络模型的参数可用:model.trainable_variables()
其中optimizer和model都需要自行定义,实例化.
PyTorch:
在loss值前向传播之前需要清空优化器中的梯度信息,因为会堆积:optimizer.zero_grad( )
在loss值前向传播之后再更新参数:optimizer.step( )
在PyTorch中可强制衰减学习率:
scheduler=StepLR(optimizer,step_size= , gamma= )
意思是optimizer每更新参数step_size次后,学习率*=gamma.
此后更新参数用:scheduler.step( )
以上标蓝的,名字可自行定义,并无强制要求.
小结:
TensorFlow和PyTorch中的优化器都差不多,但PyTorch中实例化优化器多了第一个参数为网络模型的参数.并且在训练中需要手动清空优化器梯度.