如何获得多类分类的输出?

时间:2017-03-13 07:30:18

标签: python machine-learning keras

我有4个输入和3个输出的顺序模型:

render() {
  <UserForm>
    <RoleField customData={ dataFromStore }/>
  </UserForm>
}

我使用下面的代码来预测课程。

def baseline_model():
    # create model
    model = Sequential()
    model.add(Dense(4, input_dim=4, init='normal', activation='relu'))
    model.add(Dense(3, init='normal', activation='sigmoid'))
    # Compile model
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    # serialize model to JSON
    model_json = model.to_json()
    with open("model.json", "w") as json_file:
        json_file.write(model_json)
    # serialize weights to HDF5
    model.save_weights("model.h5")
    print("Saved model to disk")
    return model

但预测的回报是prediction = model.predict(np.array([[data[0],data[1],data[2],data[3]]]))

如何解释预测的价值?

下面的解释是对的吗?

[[ 0.49986306  0.5005092   0.50012374]]

如果解释错误,如何解释预测的价值?

1 个答案:

答案 0 :(得分:1)

正如评论中所说,既然你引用this tutorial,你应该知道有一个错误。

你想在这里预测哪个是虹膜的类型。 sigmoid激活将为您提供0和1之间的3个输出。您正在训练它们,以便2必须朝0和1朝1。事实是没有什么可以阻止输出为1,1,1而这不应该发生,因为你只想检测一种花的一种虹膜。

这就是&#39; softmax&#39;激活很有用。它只是简化输出,使3个输出的总和为1。 如果只想在多种可能性之间检测一个类,则应始终使用softmax。然后,您可以将输出i解释为花属于类i的概率。

您的输出将如下所示:

[0.1, 0.2, 0.7] or [0.3, 0.4, 0.3]

为了解释这一点,第一个例子对于第3类具有最高概率,因此预测第3类。第二个例子具有第2类的最高概率,因此预测了第2类。

您需要在模型中更改的行是:

model.add(Dense(3, init='normal', activation='softmax'))

更清楚吗?