优化器的用法

优化器(optimizer)是编译Keras模型的所需的两个参数之一:

  1. from keras import optimizers
  2. model = Sequential()
  3. model.add(Dense(64, kernel_initializer='uniform', input_shape=(10,)))
  4. model.add(Activation('tanh'))
  5. model.add(Activation('softmax'))
  6. sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
  7. model.compile(loss='mean_squared_error', optimizer=sgd)

你可以先实例化一个优化器对象,然后将它传入model.compile(),像上述示例中一样,
或者你可以通过名称来调用优化器。在后一种情况下,将使用优化器的默认参数。

  1. # 传入优化器名称: 默认参数将被采用
  2. model.compile(loss='mean_squared_error', optimizer='sgd')

Keras优化器的公共参数

参数clipnormclipvalue能在所有的优化器中使用,用于控制梯度裁剪(Gradient Clipping):

  1. from keras import optimizers
  2. # 所有参数梯度将被裁剪,让其l2范数最大为1:g * 1 / max(1, l2_norm)
  3. sgd = optimizers.SGD(lr=0.01, clipnorm=1.)
  1. from keras import optimizers
  2. # 所有参数d 梯度将被裁剪到数值范围内:
  3. # 最大值0.5
  4. # 最小值-0.5
  5. sgd = optimizers.SGD(lr=0.01, clipvalue=0.5)

[source]

SGD

  1. keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)

随机梯度下降优化器

包含扩展功能的支持:

  • 动量(momentum)优化,
  • 学习率衰减(每次参数更新后)
  • Nestrov动量(NAG)优化

参数

  • lr: float >= 0. 学习率
  • momentum: float >= 0. 参数,用于加速SGD在相关方向上前进,并抑制震荡
  • decay: float >= 0. 每次参数更新后学习率衰减值.
  • nesterov: boolean. 是否使用Nesterov动量.

[source]

RMSprop

  1. keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0)

RMSProp优化器.

建议使用优化器的默认参数
(除了学习率lr,它可以被自由调节)

这个优化器通常是训练循环神经网络RNN的不错选择。

参数

  • lr: float >= 0. 学习率.
  • rho: float >= 0. RMSProp梯度平方的移动均值的衰减率.
  • epsilon: float >= 0. 模糊因子. 若为 None, 默认为 K.epsilon().
  • decay: float >= 0. 每次参数更新后学习率衰减值.

引用


[source]

Adagrad

  1. keras.optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.0)

Adagrad优化器.

建议使用优化器的默认参数。

参数

  • lr: float >= 0. 学习率.
  • epsilon: float >= 0. 若为 None, 默认为 K.epsilon().
  • decay: float >= 0. 每次参数更新后学习率衰减值.

引用


[source]

Adadelta

  1. keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=None, decay=0.0)

Adagrad优化器.

建议使用优化器的默认参数。

参数

  • lr: float >= 0. 学习率,建议保留默认值.
  • rho: float >= 0. Adadelta梯度平方移动均值的衰减率
  • epsilon: float >= 0. 模糊因子. 若为 None, 默认为 K.epsilon().
  • decay: float >= 0. 每次参数更新后学习率衰减值.

引用


[source]

Adam

  1. keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)

Adam优化器.

默认参数遵循原论文中提供的值。

参数

  • lr: float >= 0. 学习率.
  • beta_1: float, 0 < beta < 1. 通常接近于 1.
  • beta_2: float, 0 < beta < 1. 通常接近于 1.
  • epsilon: float >= 0. 模糊因子. 若为 None, 默认为 K.epsilon().
  • decay: float >= 0. 每次参数更新后学习率衰减值.
  • amsgrad: boolean. 是否应用此算法的AMSGrad变种,来自论文”On the Convergence of Adam and
    Beyond”.

引用


[source]

Adamax

  1. keras.optimizers.Adamax(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0)

Adamax优化器,来自Adam论文的第七小节.

它是Adam算法基于无穷范数(infinity norm)的变种。
默认参数遵循论文中提供的值。

参数

  • lr: float >= 0. 学习率.
  • beta_1/beta_2: floats, 0 < beta < 1. 通常接近于 1.
  • epsilon: float >= 0. 模糊因子. 若为 None, 默认为 K.epsilon().
  • decay: float >= 0. 每次参数更新后学习率衰减值.

引用


[source]

Nadam

  1. keras.optimizers.Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, schedule_decay=0.004)

Nesterov版本Adam优化器.

正像Adam本质上是RMSProp与动量momentum的结合,
Nadam是采用Nesterov momentum版本的Adam优化器。

默认参数遵循论文中提供的值。
建议使用优化器的默认参数。

参数

  • lr: float >= 0. 学习率.
  • beta_1/beta_2: floats, 0 < beta < 1. 通常接近于 1.
  • epsilon: float >= 0. 模糊因子. 若为 None, 默认为 K.epsilon().

引用


[source]

TFOptimizer

  1. keras.optimizers.TFOptimizer(optimizer)

原生Tensorlfow优化器的包装类(wrapper class)。