使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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