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