当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.keras.optimizers.Adam用法及代码示例


实现 Adam 算法的优化器。

继承自:Optimizer

用法

tf.keras.optimizers.Adam(
    learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07, amsgrad=False,
    name='Adam', **kwargs
)

参数

  • learning_rate 一个 Tensor ,浮点值,或者是一个 tf.keras.optimizers.schedules.LearningRateSchedule 的计划,或者一个不带参数并返回要使用的实际值的可调用对象,即学习率。默认为 0.001。
  • beta_1 浮点值或常量浮点张量,或不带参数并返回要使用的实际值的可调用对象。一阶矩估计的 index 衰减率。默认为 0.9。
  • beta_2 浮点值或常量浮点张量,或不带参数并返回要使用的实际值的可调用函数,二阶矩估计的 index 衰减率。默认为 0.999。
  • epsilon 用于数值稳定性的小常数。这个 epsilon 是 Kingma 和 Ba 论文中的 "epsilon hat"(在 2.1 节之前的公式中),而不是论文算法 1 中的 epsilon。默认为 1e-7。
  • amsgrad 布尔值。是否应用来自论文“On the Convergence of Adam and beyond”的该算法的 AMSGrad 变体。默认为 False
  • name 应用渐变时创建的操作的可选名称。默认为 "Adam"
  • **kwargs 关键字参数。允许是 "clipnorm""clipvalue" 之一。 "clipnorm" (float) 按标准裁剪渐变; "clipvalue" (float) 按值裁剪渐变。

抛出

  • ValueError 在任何无效论点的情况下。

Adam 优化是一种基于first-order 和second-order 矩的自适应估计的随机梯度下降方法。

根据 Kingma 等人,2014 年的说法,该方法“计算效率高,内存需求少,对梯度的对角线重新缩放不变,并且非常适合数据/参数方面的大问题”。

用法:

opt = tf.keras.optimizers.Adam(learning_rate=0.1)
var1 = tf.Variable(10.0)
loss = lambda:(var1 ** 2)/2.0       # d(loss)/d(var1) == var1
step_count = opt.minimize(loss, [var1]).numpy()
# The first step is `-learning_rate*sign(grad)`
var1.numpy()
9.9

参考:

注意:

epsilon 的默认值 1e-7 通常可能不是一个好的默认值。例如,在 ImageNet 上训练 Inception 网络时,当前较好的选择是 1.0 或 0.1。请注意,由于 Adam 使用的是 Kingma 和 Ba 论文第 2.1 节之前的公式,而不是算法 1 中的公式,因此这里提到的"epsilon" 在论文中是"epsilon hat"。

该算法的稀疏实现(当梯度是 IndexedSlices 对象时使用,通常是因为tf.gather 或前向传递中的嵌入查找)确实将动量应用于可变切片,即使它们未在前向传递中使用(意味着它们梯度为零)。动量衰减 (beta1) 也适用于整个动量累加器。这意味着稀疏行为等同于密集行为(与某些动量实现相反,除非实际使用变量切片,否则它们会忽略动量)。

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.optimizers.Adam。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。