【发布时间】:2019-02-09 15:33:50
【问题描述】:
我在 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 优化器?
【问题讨论】:
-
通常情况下,您不需要将指数衰减添加到 Adam,因为它已经存在;尽管如此,您似乎并不是唯一一个尝试这个(并报告更好的结果)的人 - 这可能会有所帮助(可以说,解决方案确实是通过回调衰减
lr):Learning rate decay in addition to Adam? -
@desertnaut 这似乎是解决方案。我的损失仍然很糟糕,但我想问题出在我的代码的其他部分。如果您将此作为答案,我会接受。非常感谢
-
下面的
TFOptimizer答案呢?你试过了吗? -
我意识到优化器不是问题,因为即使在前 10000 次迭代中,训练的表现也差很多。所以在learning_rate的exponential_decay生效之前
-
公平;不过我给了@Alexis 一个赞成票,因为我不知道那个细节......
标签: python tensorflow machine-learning keras deep-learning