【问题标题】:Keras model.fit_generator() gives 0.0% validation accuracyKeras model.fit_generator() 提供 0.0% 的验证准确度
【发布时间】:2019-01-03 00:27:01
【问题描述】:

我有一些按文件夹排列的训练图像、一些验证图像和一些测试图像。我正在使用图像生成器,因为没有。图片数量不够。我正在使用此代码:

height=150
width=150
channels=3
batch_size=32
seed=1337

# Training generator
train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(train_dir,target_size=(height,width),batch_size=batch_size,seed=seed,class_mode='categorical')

# Test generator
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(test_dir,target_size=(height,width),batch_size=batch_size,seed=seed,class_mode='categorical')

并获得输出:

找到属于 5 个类别的 723 张图片。

找到属于 5 个类别的 144 张图片。

这是我的模型架构:

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(150, 150, 3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# the model so far outputs 3D feature maps (height, width, features)
model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(5))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

这是.fit_generator()的代码:

history = model.fit_generator(
        train_generator,
        steps_per_epoch=2000 // 64,
        epochs=5,
        validation_data=test_generator,
        validation_steps=800 // 64)

5 epochs 之后,我得到了70%accuracy,但不幸的是val_accval_loss 仍然是0.00000e+00,我不太能弄明白。 我还有一个包含 20 张图片的文件夹,可以预测。如何在它们上使用.predict() 功能?我没有给出标签的.csv 文件。只有训练图像在单独的文件夹中给出,其名称基本上是图像的类。

【问题讨论】:

  • 您能否也将调用发布到fit 方法?
  • 完成,请检查
  • 我无法在您的代码中发现任何错误。唯一可能出错的是test_dir 路径或训练目录和测试目录中的目录名称可能不同,或者训练和测试图像非常不同。我没有想到其他任何事情。
  • yaa 相同,即使我什至无法理解。但如果路径方向错误,它就无法检测到属于 5 个类别的 144 张图像。无论如何,你能告诉我预测新图像的代码是什么吗?在我fit_generator() 之后,我如何使用我的model 来预测新图像?
  • 不,我的意思是您可能已将路径设置为另一个也包含图像的目录。对于使用生成器的预测,您可以简单地使用 predict_generator 函数。

标签: python image-processing keras deep-learning conv-neural-network


【解决方案1】:

首先修复:

steps_per_epoch = 2000 // 64 validation_steps = 800 // 64

到:

steps_per_epoch = 723 / batch_size validation_steps = 144 / batch_size

但是,这不是这里的问题。我在您的代码中没有看到问题。我什至在我的数据库上运行它,它运行良好。正如这里所说,检查test_dirtrain_dir 中的文件夹是否具有相同的名称。

关于predict_gen,阅读Keras的documentation。输出是每个验证图像的向量。如果你想要字符串标签,你可以使用生成器的类列表。所以像:

pred_Y = np.argmax(model.predict_generator(valid_gen),axis=1) predicted_labels = [valid_gen.classes[pred_y] for pred_y in pred_Y ]

【讨论】:

  • 您好,steps_per_epochvalidation_steps 效果很好。可能我需要正确掌握基础知识。非常感谢。
  • 顺便说一句,我基本上是在创建一个问题陈述之类的东西。所以我希望我的验证图像成为测试集。我可以生成任何新的 csv 文件,一种提交文件,可以将其与预测的 csv 进行比较吗?
  • 对不起,我不知道如何回答。更改 steps_per_epochvalidation_steps 是否解决了您的问题/?
猜你喜欢
  • 1970-01-01
  • 2020-06-15
  • 2018-12-01
  • 2017-12-21
  • 1970-01-01
  • 2017-10-14
  • 2018-08-16
  • 2020-02-12
  • 1970-01-01
相关资源
最近更新 更多