使用fit_generator训练时准确率为0

我正在尝试从头开始使用TensorFlow、Keras和ImageDataGenerator创建一个模型,但结果并不如预期。我仅使用生成器来加载图像,因此没有使用数据增强。训练和测试数据分别存放在两个文件夹中,每个文件夹包含36个子文件夹,每个子文件夹内有图像。我得到了以下输出:

Using TensorFlow backend.Found 13268 images belonging to 36 classes.Found 3345 images belonging to 36 classes.Epoch 1/21/3 [=========>....................] - ETA: 0s - loss: 15.2706 - acc: 0.0000e+003/3 [==============================] - 1s 180ms/step - loss: 14.7610 - acc: 0.0667 - val_loss: 15.6144 - val_acc: 0.0312Epoch 2/21/3 [=========>....................] - ETA: 0s - loss: 14.5063 - acc: 0.10003/3 [==============================] - 0s 32ms/step - loss: 15.5808 - acc: 0.0333 - val_loss: 15.6144 - val_acc: 0.0312

尽管看起来正常,但显然它根本没有进行训练。我尝试过使用不同的epochs数量、steps和更大的数据集——几乎没有什么变化。即使有超过60,000张图像,每个epoch的训练时间也仅需半秒左右!奇怪的是,当我尝试将图像保存到相应的文件夹时,它只保存了大约500到600张图像,然后很可能就停止了。

from tensorflow.python.keras.applications import ResNet50from tensorflow.python.keras.models import Sequentialfrom tensorflow.python.keras.layers import Dense, Flatten, GlobalAveragePooling2D, Conv2D, Dropoutfrom tensorflow.python.keras.applications.resnet50 import preprocess_inputfrom tensorflow.python.keras.preprocessing.image import ImageDataGeneratorimport kerasimport osif __name__ == '__main__':    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'    image_size = 28    img_rows = 28    img_cols = 28    num_classes = 36    data_generator = ImageDataGenerator()    train_generator = data_generator.flow_from_directory(        directory="/final train 1 of 5/",        save_to_dir="/image generator output/train/",        target_size=(image_size, image_size),        color_mode="grayscale",        batch_size=10,        class_mode='categorical')    validation_generator = data_generator.flow_from_directory(        directory="/final test 1 of 5/",        save_to_dir="/image generator output/test/",        target_size=(image_size, image_size),        color_mode="grayscale",        class_mode='categorical')    model = Sequential()    model.add(Conv2D(20, kernel_size=(3, 3),                     activation='relu',                     input_shape=(img_rows, img_cols, 1)))    model.add(Conv2D(20, kernel_size=(3, 3), activation='relu'))    model.add(Flatten())    model.add(Dense(100, activation='relu'))    model.add(Dense(num_classes, activation='softmax'))    model.compile(loss=keras.losses.categorical_crossentropy,                  optimizer='adam',  # adam/sgd                  metrics=['accuracy'])    model.fit_generator(train_generator,                        steps_per_epoch=3,                        epochs=2,                        validation_data=validation_generator,                        validation_steps=1)

看起来似乎有什么东西悄悄地失败了,导致训练过程受损。


回答:

正如@今天所建议的,问题在于图像未被归一化。

rescale=1/255传递给ImageDataGenerator解决了这个问题。

Related Posts

如何使用Google Protobuf解析、编辑和生成object_detection/pipeline.config文件

我在一个常见的集成学习范式中训练多个模型,目前我在处理…

我的GridSearchCV不起作用,我不知道为什么

大家好,我在使用GridSearchCV时遇到了问题,…

Keras: 两个同时进行的层,其中一个对前一层的输出进行卷积

我想实现这样的模型连接: 输入图像1 -> 卷积层1 …

如何将行数据转换为列数据而不使用独热编码

我有一个如下所示的数据集。 MonthDate Day…

使用 ML Kit 与 NNAPI

我正在尝试在运行 Android 9 的设备上使用新的…

Vowpal Wabbit 可能的哈希冲突

我在VW中生成了一个模型,并且在相同的数据上生成了两个…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注