Python 在Tensorflow Keras中使用空ImageDataGenerator时,精度显著降低

Python 在Tensorflow Keras中使用空ImageDataGenerator时,精度显著降低,python,tensorflow,keras,Python,Tensorflow,Keras,我正试图构建一个卷积网络来对CIFAR-100数据集进行分类,但遇到了一个不实际的问题。现在,我可能犯了一个明显的错误,但由于我对这个领域非常陌生,我似乎找不到它 在我尝试引入ImageDataGenerator来增加输入数据之前,网络一直运行良好。我注意到精度有很大差异,所以我尝试使用空的ImageDataGenerator。问题依然存在 datagen = ImageDataGenerator( ) datagen.fit(train_images) history = model.fi

我正试图构建一个卷积网络来对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)])

既然ImageDataGenerator对输入没有任何作用,这两种方法不应该给出相同的结果吗?

事实上,我觉得用第一个历元作为CNN工作状况的标志不是一个好主意。您应该让它收敛,看看是否存在真正的性能差异


此外,与ImageDataGenerator相比,使用原始数据也有所不同。ImageDataGenerator在列车运行期间使用不同的值创建数据扩充。我认为对它使用默认值不是一个好主意,尽管这样做只是复制数据。至少尝试更改一些值,如宽度偏移范围、高度偏移范围和旋转范围。

我理解,虽然我只显示了第一个历元,但原始数据模型的训练效果要比使用ImageDataGenerator的模型好得多。我的意思是要表明,即使ImageDataGenerator没有改变输入,结果也大不相同。是的,没错,我想我应该改变我的答案,我想你问的是不同的问题。问题是,即使使用相同的数据,性能也会发生变化,因为还有一些其他因素需要考虑,例如生成权重的随机种子。另外(这里有一点推测),使用ImageDataGenerator可能会改变读取图像的顺序。希望它能对你有所帮助。谢谢你,我认为shuffle在默认情况下可能会设置为True,尽管这似乎不会对结果造成太大的改变。我得做个实验。什么是训练图像?numpy矩阵?图像列表?由于随机权重初始化,这些比较毫无意义。在我们告诉您更多信息之前,您需要显示更多的训练结果。一个单一的纪元几乎不提供任何信息。如果在较长的培训期间确实存在问题,那么查看ImageDataGenerator是如何初始化的将非常有用。此外,请注意,如果您使用的是TF2+,则不推荐使用fit_生成器。您可以使用fit,因为它可以接受生成器。
Epoch 1/250
391/391 [==============================] - 27s 69ms/step - loss: 4.6176 - accuracy: 0.0179 - val_loss: 4.7109 - val_accuracy: 0.0095