我有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]]
如果解释错误,如何解释预测的价值?
答案 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'))
更清楚吗?