在Tensorflow Keras中使用空的ImageDataGenerator时,准确性显着降低

时间:2020-10-26 21:18:46

标签: python tensorflow keras

我正在尝试构建卷积网络以对CIFAR-100数据集进行分类,但遇到了一个异常问题。现在,我可能犯了一个明显的错误,但是由于我是该领域的新手,所以似乎找不到它。

在我尝试引入ImageDataGenerator来扩充输入数据之前,网络运行良好。我注意到准确性差异很大,因此我尝试使用空的ImageDataGenerator。问题仍然存在。

datagen = ImageDataGenerator(
)

datagen.fit(train_images)

history = model.fit_generator(datagen.flow(train_images, train_labels, batch_size=128), steps_per_epoch=train_images.shape[0]//128, epochs=250, 
                   validation_data=(test_images, test_labels), callbacks=[callbacks.EarlyStopping(patience=10)])

上面的代码给出以下结果:

Epoch 1/250
390/390 [==============================] - 29s 75ms/step - loss: 4.6235 - accuracy: 0.0040 - val_loss: 4.7914 - val_accuracy: 0.0000e+00

在不使用发电机的情况下,它会提供更好的选择:

history = model.fit(train_images, train_labels, batch_size=128, epochs=250, validation_data=(test_images, test_labels), callbacks=[callbacks.EarlyStopping(patience=10)])
Epoch 1/250
391/391 [==============================] - 27s 69ms/step - loss: 4.6176 - accuracy: 0.0179 - val_loss: 4.7109 - val_accuracy: 0.0095

由于ImageDataGenerator对输入不做任何事情,这两种方法应不会给出相同的结果?

1 个答案:

答案 0 :(得分:1)

实际上,我不认为使用第一个时期来表明您的CNN运作良好是一个好主意。您应该让它收敛以查看是否存在真正的性能差异。

此外,与ImageDataGenerator相比,使用原始数据也有所不同。 ImageDataGenerator使用不同的值在训练过程中创建数据增强。我认为对它使用默认值不是一个好主意,尽管这样做只是重复数据。至少尝试更改一些值,例如width_shift_range,height_shift_range和rotation_range。