Keras model.evaluate和model.predict给出不同的结果

时间:2019-07-18 22:08:05

标签: tensorflow keras

当我使用Lambda层构建模型以计算沿轴的总和时,与从model.predict()手动计算相比,model.evaluate()给出了不同的结果。我检查了输出数据的类型和形状,但没有帮助。仅当我将tensorflow用作Keras后端时才会出现问题。当我将CNTK用作后端时,效果很好。

这是可以重现此行为的最少代码。

from keras.layers import Input,Lambda
import keras.backend as K
from keras.models import Model

import numpy as np
inp=Input((2,))
out=Lambda(lambda x:K.sum(x,axis=-1),output_shape=(1,))(inp)
model=Model(input=inp,output=out)
model.compile(loss="mse",optimizer="sgd")
xs=np.random.random((3,2))
ys=np.sum(xs,axis=1)

print(np.mean((model.predict(xs)-ys)**2)) # This is zero
print(model.evaluate(xs,ys))  # This is not zero

我建立了一个没有参数的网络,应该简单地计算每个x的和,然后构造ys,使其与模型的输出相同。 model.predict()提供的结果与ys相同,但是当我使用tensorflow作为后端时,model.evaluate()提供的结果非零。

关于为什么会发生这种情况的任何想法?谢谢!

0 个答案:

没有答案