在Keras的多分类中有多个预测?

时间:2017-08-04 14:24:00

标签: deep-learning keras conv-neural-network multiclass-classification

我正在学习使用Keras设计卷积神经网络。我开发了一个使用VGG16作为基础的简单模型。我在数据集中有大约6类图像。以下是我的模型的代码和说明。

model = models.Sequential()
conv_base = VGG16(weights='imagenet' ,include_top=False, input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3))
conv_base.trainable = False
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu', kernel_regularizer=regularizers.l2(0.001)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(6, activation='sigmoid'))

1

以下是编译和拟合模型的代码:

model.compile(loss='categorical_crossentropy',
        optimizer=optimizers.RMSprop(lr=1e-4),
         metrics=['acc'])
model.summary()

callbacks = [
    EarlyStopping(monitor='acc', patience=1, mode='auto'),
    ModelCheckpoint(monitor='val_loss', save_best_only=True, filepath=model_file_path)
]

history = model.fit_generator(
    train_generator,
    steps_per_epoch=10,
    epochs=EPOCHS,
    validation_data=validation_generator,
    callbacks = callbacks,
    validation_steps=10)

以下是预测新图像的代码

img = image.load_img(img_path, target_size=(IMAGE_SIZE, IMAGE_SIZE))
plt.figure(index)
imgplot = plt.imshow(img)

x = image.img_to_array(img)
x = x.reshape((1,) + x.shape)
prediction = model.predict(x)[0]
# print(prediction)

通常,model.predict()方法可以预测多个类。

[0 1 1 0 0 0]

我有几个问题

  1. 多类分类模型预测多个输出是否正常?
  2. 如果预测了多个班级,如何在培训期间测量准确度?
  3. 如何修改神经网络,以便只预测一个类?
  4. 感谢任何帮助。非常感谢你!

1 个答案:

答案 0 :(得分:6)

您没有进行多级分类,而是进行多标签分类。这是由在输出层使用S形激活引起的。要正确进行多类分类,请在输出处使用softmax激活,这将在类上产生概率分布。 如预期那样,以最大概率(argmax)的类产生单一类预测。