我应该使用Evaluation_generator还是评估来评估我的CNN模型

问题描述

我正在使用keras实现CNN进行图像分类,并且我已经使用.fit_generator()方法来训练模型,直到验证了停止条件为止,我使用了下一个代码

history_3conv = cnn3.fit_generator(train_data,steps_per_epoch = train_data.n // 98,callbacks = [es,ckpt_3Conv],validation_data = valid_data,validation_steps = valid_data.n // 98,epochs=50)

停止之前的最后两个时期是下一个

1

如图所示,最后的训练准确度是0.91。但是,当我使用model.evaluate()方法评估训练,测试和验证集时,我得到了下一个结果:

2

所以,我的问题是:为什么我有两个不同的值?

我应该使用evaluate_generator()吗?还是应该在seed中修复flow_from_directory(),知道是否要执行数据扩充,所以我使用了下一个代码

trdata = ImageDataGenerator(rotation_range=90,horizontal_flip=True)
vldata = ImageDataGenerator()
train_data = trdata.flow(x_train,y_train,batch_size=98)
valid_data = vldata.flow(x_valid,y_valid,batch_size=98)

此外,我知道在fit_generator中设置use_multiprocessing=False会使我大大减慢训练速度。那么您认为什么是最好的解决方

解决方法

model.fit()model.evaluate()数据是生成器生成的扩充数据。因此,您的准确性会有一些差异。如果您在model.fit_generator的{​​{1}}中使用了非增广的model.evaluate_generatortraining数据,并且还在validationvalidation中使用过,准确性没有任何变化。

下面是我运行了一个简单的猫和狗分类程序-

  1. 验证数据生成器仅具有缩放转换,没有其他增强技术。
  2. 验证准确性会在时代结束后显示。
  3. 使用test重置验证数据生成器。没必要,因为我们还没有进行任何扩充。
  4. 使用validation_datafit_generator评估验证数据的准确性。

在时代结束之后计算出的验证准确性与使用model.evaluate()model.evaluate_generator计算出的准确性相匹配。

代码:

val_data_gen.reset()

输出:

model.evaluate