首页 文章

Keras训练模式始终预测为0

提问于
浏览
0

我正在尝试构建一个模型,使用带有Tensorflow后端的keras来预测图片中是否有文本 .

这是我的模特:

model = Sequential()

model.add(Conv2D(32, (3, 3), input_shape=(image_size, image_size, 3))) # 32?
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5)) # 0.5?

model.add(Conv2D(32, (3, 3))) # again, 32?
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5)) # again, 0.5?

model.add(Conv2D(64, (3, 3))) # again, 64?
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5)) # again, 0.5?

model.add(Flatten())
model.add(Dense(96))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1)) # binary
model.add(Activation('sigmoid'))

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

我已经尝试过图像尺寸128,256,384 . 我用9000张图像训练它,4500只猫1和4500只猫2.训练精度高达0.90 . 但是当我加载模型并使用它来预测我没有训练过的两个类别的图像类别时,它总是给出0分 .

任何想法为什么会这样?

附: cat 1是带有文本的图像,cat 2是没有文本的图像 .

这也是我测试模型的代码:

model = load_model(model_path)

test_data_generator = ImageDataGenerator(rescale=1. / 255)
test_generator = test_data_generator.flow_from_directory(
    test_data_dir,
    target_size=(image_size, image_size),
    batch_size=batch_size,
    class_mode=None,
    shuffle=False)

prediction = model.predict_generator(
    test_generator,
    use_multiprocessing=True,
    verbose=1)  # verbose=1 makes it show a progress bar.

dst = []
for pred in prediction:
    if int(round(pred)) == 0:
        dst += [0]
    else:
        dst += [1]

dst全是0 .

1 回答

  • 0

    显然问题是我使用keras的生成器来提供我正在测试的图像并使用shutil迭代它们 . 所以我得到预测并使用两个不同的东西迭代它们和目录中的文件,它们的顺序不一样 . shutil会以一些随机顺序列出它们,而生成器会按名称按升序列出它们 . 所以我没有在它生成的文件上添加标签 .

相关问题