tf.keras.optimizers.Adam和其他最小化的优化器

时间:2018-02-16 22:54:07

标签: python optimization tensorflow machine-learning keras

我想用tf.contrib.keras来玩它。但是,我不明白。 tf.train中的类具有用于优化函数的函数minimize。但是,minimize中的类不存在此tf.contrib.keras.optimizers函数。我们假设我们有以下代码:

# tensorflow
tf.train.AdamOptimizer(learning_rate=0.001)
updateModel = trainer.minimize(loss)

# keras wrapper
trainer=tf.contrib.keras.optimizers.Adam()
updateModel = trainer.minimize(loss) # ERROR because minimize function does not exists

keras包装器不起作用,因为没有minimize功能。我尝试使用带有张量流的tf.keras来查找示例或解决方法,但我找不到任何可以帮助我的内容。

P.S。在这里,我使用tf.contrib.keras.optimizers.Adam作为一个虚拟示例,但我想使用同一个包中的其他优化器。

2 个答案:

答案 0 :(得分:2)

这是由于<div class='container'> <div class='col1' style="height: 80px;">1</div> <div class='col3'>2</div> <div class='col2'>3</div> <div class='col3' style="height: 100px;">4</div> <div class='col1'>5</div> <div class='col2'>6</div> <div class='col1'>7</div> <div class='col3'>8</div> <div class='col2'>9</div> </div>keras API之间的差异造成的。在tensorflow中,优化器是在模型编译期间提供的函数,用于梯度下降优化:

keras

model.compile(optimizer='adam', ...) model.fit(..) <- optimiziation performed using Adam algorithm 中 - 您可以在演示时以自定义方式使用它。

答案 1 :(得分:1)

您的混淆是由于tf.contrib.keras API 不完全 tensorflow并且不像核心张量流 1 那样使用。

如果查看源代码,tf.contrib.keras.optimizers中的类几乎与keras.optimizers中的类相同。例如,第一个Optimizer和第二个Optimizer,第一个SGD和第二个SGD,依此类推。 Keras正在逐步纳入张量流,但现在它更像是与张量流捆绑在一起的另一个项目,并且不能轻易地与任意张量流图一起使用。相反, keras 优化器应该与 keras 层一起使用。

因此,您可以坚持使用all-tensorflow API并使用tf.train.AdamOptimizer(就像您现在所做的那样)或使用所有keras API并使用Adam(请参阅Marcin的回答) 。我认为混合两者没有任何价值。

1 至少在TF 1.x中。在未来的版本中,Keras可能会更多地与TF集成。