Keras和Tensorflow具有相同的重量,但测试精度不同

Keras和Tensorflow具有相同的重量,但测试精度不同,tensorflow,keras,Tensorflow,Keras,我训练了一个Tensorflow模型,然后构建了它的等效Keras模型,并将学习到的权重加载到其中。 然而,我在Keras中得到了不同的测试精度(例如,与98%相比,Tensorflow中的测试精度为98.5%)。 我以这种方式定义了tensorflow中的精度: accuracy = tf.cast(tf.equal(tf.argmax(input_labels, 1), tf.argmax(output, 1)), tf.float32) 在Keras中,我使用了其标准度量: model.

我训练了一个Tensorflow模型,然后构建了它的等效Keras模型,并将学习到的权重加载到其中。 然而,我在Keras中得到了不同的测试精度(例如,与98%相比,Tensorflow中的测试精度为98.5%)。 我以这种方式定义了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'])
accurity=model.evaluate(x=测试图像,y=测试标签,批次大小=批次大小)

我不知道这种差异从何而来

编辑: 因为我不相信答案,所以我花了几天的时间在代码上,直到我发现了一个导致这种差异的bug,在修复它之后,两个框架现在都产生了相同的结果,具有与预期相同的权重。
我撰写此编辑是为了防止其他读者产生任何困惑,因为Stackoverflow不允许我删除此问题。

一个可能的原因是:您的模型中有一个退出层


根据,内部随机逻辑由实现,它将在每次调用
sess.run()

时随机生成一个新值是的,您是对的,有一个退出层。但是我认为所有的退出层在测试阶段都是确定的,所有的节点都是打开的,因此不应该有任何随机性。错了吗?我去掉了漏层,在keras和tensorflow中仍然得到了不同的精度。然而,现在Keras的准确度要低得多(例如,Keras的准确度为70%,而tensorflow的准确度为90%)。还是不知道是什么原因造成的。我刚刚更新了你第一条评论的答案,第二条看起来很奇怪,也许你可以发布更多关于你的模型的信息@蒙纳杰感谢你的回答,但如果我错了,请纠正我。我仍然认为,坦多姆制服在训练阶段起作用。一旦训练完成,每件事都会变得确定,在测试时,所有神经元都会打开并通过已学习的权重生效。@Monaj No,tf将为训练和测试阶段随机生成此值,因为这不是一个要在辍学层培训的变量。如果你对当前答案不满意,你可以/应该做的是发布你自己的答案。这比将答案编辑成问题要好。不过,一定要确保你的答案解释了你是如何修复缺陷/差异的。(回答自己的问题总是可以的——事实上,这是鼓励的!)