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

Flatten and back keras

我正在尝试使用自编码器获取简单向量中的值 这是我的代码…

如何按索引访问PyTorch模型参数

如果我的网络有10层,包括偏置项,如何仅通过索引访问第…

Python中多元逻辑回归显示错误

我试图使用逻辑回归进行预测,并使用Python和skl…

在MACOS上安装NLTK

我在我的2015款Mac Pro上尝试安装NLTK,操…

如何在R中将通过RFE选择的变量插入到机器学习模型中?

我想使用递归特征消除方法来选择最重要的特征,然后将这些…

CountVectorizer 错误:ValueError: setting an array element with a sequence

我有一个包含144条学生反馈的数据集,其中有72条正面…

发表回复

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