【问题标题】:Evaluate and Predict functions in Keras are not giving the same statisticsKeras 中的 Evaluate 和 Predict 函数没有给出相同的统计数据
【发布时间】:2019-01-12 05:15:38
【问题描述】:

我有一个带有给定数据集的非常简单的 DNN。但是,我从“评估”和“预测”得到的误差标准差是不同的。平均误差似乎没问题,但预测的标准偏差总是大于评估的标准偏差。为什么会出现这些差异,我该如何解决?

Raw data is here for download

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

【问题讨论】:

    标签: keras


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 2019-07-15
      • 2018-12-25
      • 2019-05-17
      • 2020-01-11
      • 2023-03-28
      • 2022-10-12
      • 2017-06-12
      相关资源
      最近更新 更多