Keras KERA中的评估和预测函数给出的统计数据不同

Keras KERA中的评估和预测函数给出的统计数据不同,keras,Keras,我有一个非常简单的DNN和一个给定的数据集。然而,我从“评估”和“预测”得到的误差标准差是不同的。平均误差似乎正常,但predict中的stdev始终大于evaluate中的stdev。为什么会出现这些差异?我如何解决 终于找到了原因。。。默认情况下,即使batch_size设置为none,evaluate也不会使用所有样本。在设置batch_size=1000(我的数据集中的样本数)后,我得到了相同的误差平均值和标准偏差 from keras.models import Sequential

我有一个非常简单的DNN和一个给定的数据集。然而,我从“评估”和“预测”得到的误差标准差是不同的。平均误差似乎正常,但predict中的stdev始终大于evaluate中的stdev。为什么会出现这些差异?我如何解决


终于找到了原因。。。默认情况下,即使batch_size设置为none,evaluate也不会使用所有样本。在设置batch_size=1000(我的数据集中的样本数)后,我得到了相同的误差平均值和标准偏差

from keras.models import Sequential
from keras.layers import Dense, Activation
import keras.backend as K
from keras import optimizers
import pickle
import numpy as np

with open('.\\dump','rb') as f:
    xTr = pickle.load(f)
    yTr = pickle.load(f)
    muX = pickle.load(f)
    stdX = pickle.load(f)
    muY = pickle.load(f)
    stdY = pickle.load(f)

def mean_pred(y_true, y_pred):
    y_true = y_true*stdY + muY
    y_pred = y_pred*stdY + muY
    return K.mean(y_pred - y_true)

def std_pred(y_true, y_pred):
    y_true = y_true*stdY + muY
    y_pred = y_pred*stdY + muY
    return K.std(y_pred - y_true)

model = Sequential()
model.add(Dense(256, input_shape=(100,)))
model.add(Activation('tanh'))
model.add(Dense(1))
adam = optimizers.adam(lr=0.0001)
model.compile(optimizer=adam,loss='mse', metrics=[mean_pred, std_pred])
model.fit(xTr, yTr.reshape(-1,1), epochs = 5, batch_size = 128, verbose=0, shuffle=True)

score = model.evaluate(xTr, yTr.reshape(-1,1), verbose=0)
pred = model.predict(xTr, verbose=0)

print(score) #mse, mean, stdev of error

errArr = []
for i,y in enumerate(yTr):
    errArr.append((pred[i][0] - y)*stdY)
e = np.asarray(errArr)
print(e.mean(), e.std()) #mean, stdev of error