我已经训练了Tensorflow模型,然后构建了它的等效Keras模型并将学到的权重加载到其中。 但是,我在Keras中获得了不同的测试精度(例如Tensorflow中的98.5%与98%相比)。 我用这种方式定义了张量流的准确度:
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 :(得分:3)
一个可能的原因:模型中的辍学层。
根据the source code,内部随机逻辑由tf.random_uniform实施,会在每次调用sess.run()
时随机生成新值。
答案 1 :(得分:0)
这是我实现中的一个错误(我错误地在Tensorflow中应用了一些优化迭代)导致了这种差异。现在使用相同的权重集,Keras和Tensorflow都会产生相同的结果。