ADAM 优化器如何在 keras 中输出 v_t 的特定值?

Posted

技术标签:

【中文标题】ADAM 优化器如何在 keras 中输出 v_t 的特定值?【英文标题】:How does the ADAM optimizer output a specific value for v_t in keras? 【发布时间】:2018-04-03 12:30:41 【问题描述】:

我想查看计算 v_t 的 ADAM 算法每次迭代的结果,所以我在 keras\optimizers.py 文件中的 Adam 类中添加了以下代码:

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

我想得到这个形状的每一个数值,类似于矩阵的形式。 但是下面的输出不是我所期望的:

v_t: Tensor("training/Adam/add_2:0", shape=(8, 512), dtype=float32)

v_t: Tensor("training/Adam/add_5:0", shape=(128, 512), dtype=float32)

这行代码是 Adam 类本身的一部分,下一行添加了自己的:

v_t = (self.beta_2 * v) + (1. - self.beta_2) * K.square(g)
print('v_t:',v_t)# This is my added code

我做了以下尝试,但会报错如下: InvalidArgumentError(参见上文的追溯):形状 [-1,1,8] 具有负尺寸 [[节点:lstm_1_input = Placeholderdtype=DT_FLOAT, shape=[?,1,8], _device="/job:localhost/replica:0/task:0/cpu:0"]]

这是我的模型:

model = Sequential()

model.add(LSTM(128, input_shape=(train_X.shape[1], train_X.shape[2])))

model.add(Dense(1))

model.compile(loss='mae', optimizer='adam',metrics=['mae'])

我只想输出这个形状的每个值。

【问题讨论】:

【参考方案1】:

如果您的后端是 Tensorflow,您可以使用 tf.Print() 打印张量的值。

【讨论】:

我试过你提供的方法。代码如下:a = tf.Print(v_t,[v_t,v_t.shape,'any thing i want'],message='Debug message:',summarize=100)``print('a:',a)结果还是一样。a: Tensor("training/Adam/Print:0", shape=(8, 512), dtype=float32)我想要形状中的每一个数字。 我用的是ipython,输出的期望值不兼容。换成命令行即可,谢谢解答。

以上是关于ADAM 优化器如何在 keras 中输出 v_t 的特定值?的主要内容,如果未能解决你的问题,请参考以下文章

Keras 中 Adam 优化器的衰减参数

优化器

如何选择优化器 optimizer

SGD、Adam优化器

如何在 TF2 中更改 Adam 的学习率?

如何使用hyperopt进行Keras深度学习网络的超参数优化?