Keras - 多个输出模型没有预测概率?

数据挖掘 机器学习 Python 深度学习 喀拉斯
2021-09-28 18:19:32

我已经建立了以下模型:

def create_model(conv_kernels = 32, dense_nodes = 512):

    model_input=Input(shape=(img_channels, img_rows, img_cols))
    x = Convolution2D(conv_kernels, (3, 3), padding ='same', kernel_initializer='he_normal')(model_input)
    x = Activation('relu')(x)
    x = MaxPooling2D(pool_size=(2, 2))(x)
    x = Convolution2D(conv_kernels, (3, 3), kernel_initializer='he_normal')(x)
    x = Activation('relu')(x)
    x = MaxPooling2D(pool_size=(2, 2))(x)
    x = Dropout(0.25)(x)
    x = Flatten()(x)

    conv_out = (Dense(dense_nodes, activation='relu', kernel_constraint=maxnorm(3)))(x)

    x1 = Dense(nb_classes, activation='softmax')(conv_out)
    x2 = Dense(nb_classes, activation='softmax')(conv_out)
    x3 = Dense(nb_classes, activation='softmax')(conv_out)
    x4 = Dense(nb_classes, activation='softmax')(conv_out)

    lst = [x1, x2, x3, x4]

    model = Model(inputs=model_input, outputs=lst)
    sgd = SGD(lr=lrate, momentum=0.9, decay=lrate/nb_epoch, nesterov=False)
    model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])

    return model

当我进行预测时:

model.predict(X_test)

它工作正常。但是,当我想获得这样的预测概率时:

model.predict_proba(X_test)

我的模型没有 predict_proba 功能。为什么不?是因为模型的多输出性质吗?

2个回答

正如您在此处 Keras看到的,模型包含 predict 方法,但它们没有predict_proba()您指定的方法,并且实际上不需要它。原因是该predict方法本身返回输入到每个类的成员的概率。如果最后一层是,softmax那么使用的概率将是互斥的成员资格。如果最后一层的所有神经元都是sigmoid,则意味着结果可能有不同的标签,例如图像中是否存在狗和猫。有关详细信息,请参阅此处

有关最新版本 keras 中所述的 更多信息,predict 和 predict_proba 是相同的,即都给出概率。要获取类标签,请使用 predict_classes。文档未更新。(改编自 Avijit Dasgupta 的评论)

正如您在此处看到的,keras predict_proba 与 predict 基本相同。其实predict_proba,就是简单的调用predict。至于为什么它不起作用,我不知道,它似乎应该起作用。但是,这几乎无关紧要,因为 predict 会给你概率, predict_class 会给你标签。