Keras中TensorFlow的Adam优化器

5

我在Tensorflow中有一个神经网络,现在尝试在Keras中重新实现它。与Tensorflow模型相比,Keras模型的表现完全不足。损失值要高得多,并且下降速度比原始模型慢。我的最佳猜测是我使用了错误的优化器。在Tensorflow代码中,优化器如下:

global_step = tf.Variable(0, trainable=False)
learning_rate = tf.train.exponential_decay(0.0001,
                                           global_step,
                                           decay_steps=10000,
                                           decay_rate=0.33,   
                                           staircase=True)
optimizer = tf.train.AdamOptimizer(learning_rate, epsilon=1e-8)
train_op = optimizer.minimize(total_loss, global_step)

在Keras中,它看起来像这样:

adam = keras.optimizers.Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=1e-8)
model.compile(loss=get_loss_funcs(), optimizer=adam)

有没有一种方法可以在Keras中实现Tensorflow的优化器?

1
通常情况下,您不需要在Adam中添加指数衰减,因为它已经存在;然而,您似乎并不是唯一一个尝试这样做(并报告更好的结果)-这可能会有所帮助(可以说,解决方案确实是通过回调来降低“lr”):除Adam外还要学习率衰减吗? - desertnaut
1
@desertnaut 这似乎是解决方案。我的损失仍然很严重,但我猜问题在我的代码的其他部分。如果您将其表述为答案,我会接受它。非常感谢。 - SimpleNotGood
下面关于 TFOptimizer 的回答怎么样?你试过了吗? - desertnaut
1
我意识到优化器不是问题所在,因为即使在前10000次迭代中训练表现也非常糟糕。因此,在指数衰减的学习率生效之前 - SimpleNotGood
1
公平;我给了 @Alexis 一个赞,因为我不知道那个细节... - desertnaut
我已经回答了上一个问题,但还没有解决这个问题... - Frayal
1个回答

5
有的!- TFOptimizer
class TFOptimizer(Optimizer):
"""Wrapper class for native TensorFlow optimizers.
"""

这个被称为:

keras.optimizers.TFOptimizer(optimizer)

这个包装将帮助你确定问题是否由优化器引起。


keras.optimizers.TFOptimizer(optimizer) 是否考虑全局步骤? - SimpleNotGood
但是只有在optimizer.minimize(total_loss, global_step)中,我们才说global_step应该在每次迭代中增加。使用keras.optimizers.TFOptimizer(optimizer),我们不会向Keras提供这些信息,因此Keras需要假设它必须在每次迭代中增加global_step。我不确定Keras是否会这样做。 - SimpleNotGood
这样是这样的吗?optimizerTF = tf.train.AdamOptimizer(learning_rate, epsilon=1e-8),然后 kOpt=keras.optimizers.TFOptimizer(optimizerTF),再 model.compile(loss=get_loss_funcs(), optimizer=kOpt) - SantoshGupta7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接