我是Keras的新手,这是我的nn:
model = Sequential()
model.add(Dense(12, activation="relu", input_dim=12, kernel_initializer="normal"))
model.add(Dense(3, activation="sigmoid", kernel_initializer="normal"))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
我有3个输出:高,中或低。
当我尝试使用predict
函数时,我得到了正确的类:
array(['medium', 'low', 'medium', ..., 'low', 'medium', 'low'], dtype=object)
然而,当我尝试predict_proba
功能时,我会得到不能加1的概率?
array([[ 4.93983855e-04, 2.28181913e-01, 9.70774710e-01],
[ 3.14530940e-03, 9.60477769e-01, 3.79752717e-04],
[ 1.40661141e-03, 5.70683666e-02, 9.96348858e-01],
...,
[ 1.29012510e-01, 7.08254218e-01, 2.44960701e-03],
[ 1.69786233e-02, 4.71719205e-02, 9.90665674e-01],
[ 1.28657368e-04, 9.89430904e-01, 9.04915680e-04]], dtype=float32)
第一行是4.93983855e-04 + 2.28181913e-01 + 9.70774710e-01,总和是1.199450606855,大于1。
我认为第1行意味着:第1列(4.93983855e-04)的概率是中等?
答案 0 :(得分:2)
sigmoid
激活正在彼此独立地输出0到1之间的值。
如果您希望概率输出总和为1,请在最后一层使用softmax
激活,它会将输出归一化为总和1.
我希望这会有所帮助:)