本篇主要解决三个问题
1、tf.train.AdamOptimizer是什么?
2、什么是beta1_power和beta2_power?
3、tensorflow保存的模型中同一权重有多个表示:
/adam1/adam,究竟哪个是真正的权重,分别代表什么意思?
##################
1、tf.train.AdamOptimizer是什么?
此函数是Adam优化算法:是一个寻找全局最优点的优化算法,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。。相比于基础SGD算法,1、不易于陷于局部有点 2、速度更快。
实现了 AdamOptimizer 算法的优化器,它综合了 Momentum 和 RMSProp 方法,对每个参数保留一个学习率与一个根据过去梯度信息求得的指数衰减均值。
代码实现:
train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
tf.train.AdamOptimizer这个函数的所有参数:
(
learning_rate=0.001,
beta1=0.9, #The exponential decay rate for the 1st moment estimates.
beta2=0.999, #The exponential decay rate for the 2nd moment estimates.
epsilon=1e-08, #A small constant for numerical stability.
use_locking=False, #If True use locks for update operations.
name='Adam' #Optional name for the operations created when applying gradients. Defaults to "Adam".
)
tf.train.AdamOptimizer.__init__(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name=’Adam’)
2、什么是beta1_power和beta2_power?
所以第二个问题也一并解决了,下图是把模型中的变量名和变量值打印出来的结果,beta1_power=0.9
#The exponential decay rate for the 1st moment estimates.
3、tensorflow保存的模型中同一权重有多个表示:
/adam1/adam,究竟哪个是真正的权重,分别代表什么意思?
打印TensorFlow保存模型中所有的变量,会发现同一个权重有多个表示:
这个问题最后还是没查到,个人理解的话是,一个损失一次前传会有两个adam,我这里是3个损失,所以是6个adam,adam只是用于训练收敛。
在进行参数读取选择的话的话,还是选择没有Adamd的,举例:
1、'pnet/conv4-1/biases (DT_FLOAT) [2]\n'
2、 'pnet/conv4-1/biases/Adam (DT_FLOAT) [2]\n'
3、 'pnet/conv4-1/biases/Adam_1 (DT_FLOAT) [2]\n'
选择的1成功了