基于数据发生器的keras评价

基于数据发生器的keras评价,keras,deep-learning,Keras,Deep Learning,Iam使用keras中的评估功能来评估我的模型性能。 我使用MSE作为指标/目标函数来训练回归模型 当我现在加载我的验证数据并计算MSE时,该值是恒定的,但是当我之前洗牌我的验证集时,MSE分数变化相当大 有人知道为什么洗牌验证集会导致不同的模型分数吗。我本以为分数几乎是一样的(有一些数字不稳定) 提前感谢, 干杯 您好,谢谢您的评论: 下面是一些代码: params_val = {'dim': (IMG_PX_SIZE,IMG_PX_SIZE), 'ba

Iam使用keras中的评估功能来评估我的模型性能。 我使用MSE作为指标/目标函数来训练回归模型

当我现在加载我的验证数据并计算MSE时,该值是恒定的,但是当我之前洗牌我的验证集时,MSE分数变化相当大

有人知道为什么洗牌验证集会导致不同的模型分数吗。我本以为分数几乎是一样的(有一些数字不稳定)

提前感谢,

干杯


您好,谢谢您的评论:

下面是一些代码:

params_val = {'dim': (IMG_PX_SIZE,IMG_PX_SIZE),
                    'batch_size' : 1,
                        'n_channels': inChannel,
                    'shuffle': False,
                    'augment': False}  

X_val, y_val = shuffle(X_val, y_val)

dataGen_validation = DataGenerator2D(X_val, y_val, data_dir_val, **params_val)

model = keras.models.load_model(model_path)
model = model.layers[-2]

model.compile(optimizer=Adam(lr=0.0001), loss='mse')
score = model.evaluate(dataGen_validation)
print(score)
我的理论是:


在我的数据集中有很多简单的例子和一些困难的例子。据我所知,分数是所有批次的MSE平均值。根据数据洗牌的方式(例如,仅一批非常简单的示例),总体分数可能非常高。

如果您使用generator for evaluation函数(使用tensorflow 2),则您得到的评估分数可能只是最后一步(批次)的分数,而不是整个评估数据集的分数。您可以使用predict函数再次检查该值。

您能提供一些代码吗?您是对的,这是所有批次上的MSE,但您不需要重新编译您的模型。我不确定这是不是这里的错误。您可以添加
shuffle
功能吗?(您还可以删除model.compile)上述代码中已经包含了shuffle函数。在评估之前,我只对数据进行一次洗牌。因此,该选项在数据生成器中设置为“false”。(不过,这会有助于评估)。当我删除compile函数时,我得到一个错误,即在使用evaluate之前必须编译模型。