我正在尝试构建卷积网络以对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对输入不做任何事情,这两种方法应不会给出相同的结果?
答案 0 :(得分:1)
实际上,我不认为使用第一个时期来表明您的CNN运作良好是一个好主意。您应该让它收敛以查看是否存在真正的性能差异。
此外,与ImageDataGenerator相比,使用原始数据也有所不同。 ImageDataGenerator使用不同的值在训练过程中创建数据增强。我认为对它使用默认值不是一个好主意,尽管这样做只是重复数据。至少尝试更改一些值,例如width_shift_range,height_shift_range和rotation_range。