tf.keras.optimizers.Adam

概述

实现Adam算法的优化器

一句话解释:实现梯度下降,找到极值

官方api网址:
https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Adam?version=nightly#__init__

算法根据下面论文实现:
https://openreview.net/pdf?id=ryQu7f-RZ

算法伪代码在官方api中

常用方法

创建

__init__(
    learning_rate=0.001,
    beta_1=0.9,
    beta_2=0.999,
    epsilon=1e-07,
    amsgrad=False,
    name='Adam',
    **kwargs
)
参数
  • learning_rate:学习速率
  • beta_1:float,0 <beta <1。一般接近1。一阶矩估计的指数衰减率。
  • beta_2:float,0 <beta <1。一般接近1。二阶矩估计的指数衰减率。
  • epsilon:float,为了防止在实现中除以零。
  • amsgrad:使用不同的算法

apply_gradients

把计算出来的梯度更新到变量上面去。

一句话解释:实现梯度下降

apply_gradients(
    grads_and_vars,
    name=None
)
参数
  • grads_and_vars:list类型,其内部元素是tuple类型,即[(gradient, variable)]

    • gradient:是tf.GradientTape()的tape.gradient()返回值
    • variable:是函数的自变量

    例子:adam.apply_gradients([(g,x)])

返回值

An Operation that applies the specified gradients. The iterations will be automatically increased by 1.

例子

参见 tensorflow2实现梯度下降

自己实现梯度下降(废弃)

lr=1
b1=0.1
b2=0
e=1e-07

mt=0
mt_last=0
vt_last=0

def exe_x(x_var,g):
    global mt,vt_last,mt_last
#     print("g:",g)
    lrt=lr*(1-b2)**0.5/(1-b1)
    mt=b1*mt_last+(1-b1)*g
    mt_last=mt
    vt=b2*vt_last+(1-b2)*g*g
    vt_last=vt

    x_var=x_var-lrt*mt/(vt**0.5+e)#-b1
    print("x_var:%s,lrt:%s,mt:%s,vt:%s"%(x_var.numpy(),lrt,mt.numpy(),vt.numpy()))
    return x_var
# print("lrt:",lrt)

exe_x(tf.constant(3.),tf.constant(-94.))

感谢

https://blog.csdn.net/xierhacker/article/details/53174558