我应该使用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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...