tf.keras.optimizers.Adam 作者:马育民 • 2019-12-27 22:58 • 阅读:10367 # 概述 实现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实现梯度下降](https://www.malaoshi.top/show_1EF4grPGjcvs.html "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 原文出处:/show_1EF4grhYWhnF.html