8
獲得預測

我已經成功地訓練在Keras一個簡單的模型到圖像分類:在Keras

model = Sequential() 

model.add(Convolution2D(32, 3, 3, border_mode='valid', input_shape=(img_channels, img_rows, img_cols), 
         activation='relu', name='conv1_1')) 
model.add(Convolution2D(32, 3, 3, activation='relu', name='conv1_2')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 

model.add(Convolution2D(64, 3, 3, border_mode='valid', activation='relu', name='conv2_1')) 
model.add(Convolution2D(64, 3, 3, activation='relu', name='conv2_2')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 

model.add(Flatten()) 
model.add(Dense(512, activation='relu')) 
model.add(Dropout(0.5)) 

model.add(Dense(nb_classes, activation='softmax')) 

model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) 

我還可以預測圖像類中使用

y_pred = model.predict_classes(img, 1, verbose=0) 

然而y_pred輸出總是二進制文件。這在使用predict_probapredict時也是如此。我的輸出以這種形式

[[ 1. 0. 0. 0.]] 
[[ 0. 1. 0. 0.]] 

這工作不錯,但我想爲每個分類的概率百分比,例如

[[ 0.8 0.1 0.1 0.4]] 

如何在Keras得到這個?

回答

1

Softmax可能會產生「單熱」的輸出。考慮下面的例子:

# Input; Exponent; Softmax value 
20 485165195 0.99994 
9   8103 0.00002 
5   148 0.00000 
10  22026 0.00005 
------------------------ 
# Sum 485195473 1 

由於指數函數增長速度非常快softmax開始產生一個熱像大小1的順序在Keras implementation of the softmax function最大值從輸入中減去起始的輸出,但在所陳述的以上情況不會有任何區別。

可能的方法來解決這個問題:

  1. 確保輸入圖像的重新調整,以便將像素值01之間。

  2. 將一些regularizers添加到您的模型中。