[英]Keras Tensorflow, only Adam optomizer works. All other optimizers produce none value error
[英]tf.keras.optimizers.Adam and other optimizers with minimization
我想用tf.contrib.keras
来玩它。 但是,有些事情我不明白。 来自tf.train
的类具有minimize
您用于优化函数的函数。 但是, tf.contrib.keras.optimizers
的类不存在此minimize
函数。 假设我们有以下代码:
# 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
与tensorflow,但我没有找到任何可以帮助我这一点。
PS我在这里使用tf.contrib.keras.optimizers.Adam
作为一个虚拟示例,但我想使用同一个包中的其他优化器。
这是由于keras
和tensorflow
API之间的差异造成的。 在keras
优化器是模型编译期间提供的函数,用于梯度下降优化:
model.compile(optimizer='adam', ...)
model.fit(..) <- optimiziation performed using Adam algorithm
在tensorflow
- 您可以按照自定义的方式使用它。
您的困惑是由于tf.contrib.keras
API 不是精确的张量流并且不打算像核心张量流1那样使用。
如果你看看源代码,从类tf.contrib.keras.optimizers
几乎相同,从那些keras.optimizers
。 例如,第一个Optimizer
和第二个Optimizer
,第一个SGD
和第二个SGD
,依此类推。 Keras正在逐步纳入tensorflow,但现在它更像是与tensorflow捆绑在一起的另一个项目,并且不能轻易地与任意张量流图一起使用。 相反, keras优化器应该与keras层一起使用。
所以你可以坚持使用all-tensorflow API并使用tf.train.AdamOptimizer
(就像你现在做的那样)或者使用all-keras API并使用Adam
(参见Marcin的回答)。 我认为混合两者没有任何价值。
1至少在TF 1.x. 在未来的版本中,Keras可能会与TF集成更多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.