2017-07-28 78 views
1

我已经训练了一个Tensorflow模型,然后构建了它的等效Keras模型并将学习权重加载到其中。但是,我在Keras中获得了不同的测试准确度(例如,在Tensorflow中为98.5%,而在98%中为98%)。 我已经定义在tensorflow精度是这样的:Keras和Tensorflow具有相同的权重,但具有不同的测试精度

accuracy = tf.cast(tf.equal(tf.argmax(input_labels, 1), tf.argmax(output, 1)), tf.float32) 

在Keras我已经使用其标准的度量:

model.compile(optimizer=tf.train.AdamOptimizer(), loss='categorical_crossentropy', metrics=['accuracy']) 

accuracy = model.evaluate(x=test_images, y=test_labels, batch_size=BATCH_SIZE)

我很困惑,其中这种差异从何而来。

编辑: 由于我是不相信的回答,我花了几天的时间上的代码,直到我发现,造成这种差异的错误,并修复它之后,这两个框架现在生产出相同的结果与预期相同的权重。 我正在编写此编辑以防止其他读者感到困惑,因为Stackoverflow不允许我删除该问题。

+0

如果您对目前的答案不满意,您可以/应该做什么是**发布您自己的答案**。这比编辑问题的答案要好。不过,请确保您的答案解释了*您是如何解决错误/差异的。 (回答你自己的问题总是可以的 - 事实上,这是鼓励的!) –

回答

0

这是我实现中的一个错误(我错误地在Tensorflow中应用了几个优化迭代),导致了这种差异。现在使用相同的权重集合,Keras和Tensorflow都产生相同的结果。

2

一个可能的原因:模型中的退出层。

根据the source code,内部随机逻辑由tf.random_uniform实现,它将在每次调用sess.run()时随机生成一个新值。

+0

是的,你是对的,有一个退路层。但我认为所有的丢失层在测试阶段变得确定,并且所有的节点都打开了,所以不应该有任何由此造成的随机性。那是错的吗? – Monaj

+0

我删除了丢失层,仍然在keras和tensorflow中获得不同的精度。然而,现在Keras的准确度要低得多(例如,在keras中为70%,而在张量流中为90%)。仍然不知道是什么原因造成的。 – Monaj

+0

我刚刚更新了第一条评论的答案,对于第二条评论,这看起来很奇怪,也许你可以发布更多关于你的模型的信息。 @Monaj –

相关问题