8

Ich habe erfolgreich ein einfaches Modell in Keras ausgebildeten Bilder zu klassifizieren:eine Vorhersage in Keras Erhalt

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']) 

Ich kann auch die Bildklassen vorhersagen

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

Verwendung jedoch die Ausgabe von y_pred immer binär. Dies scheint auch bei Verwendung von predict_proba und predict der Fall zu sein. Meine Ausgaben sind in dieser Form

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

Dies funktioniert OK, aber ich würde gerne für jede Klassifikation eine Wahrscheinlichkeit Prozent haben, zum Beispiel

[[ 0.8 0.1 0.1 0.4]] 

Wie kann ich das bekommen in Keras?

Antwort

1

Softmax liefert möglicherweise einen "heißen" Ausgang. Man betrachte das folgende Beispiel:

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

Da die Exponentialfunktion sehr schnell wächst softmax beginnt ein heiß wie Ausgangs Nachgeben von der Größenordnung Ausgangs 1. In Keras implementation of the softmax function der Maximalwert von dem Eingang subtrahiert wird, aber in der angegebenen In diesem Fall macht es keinen Unterschied.

Mögliche Wege, dies zu beheben:

  1. Vergewissern Sie sich, dass Eingangsbilder neu skaliert werden, so dass Pixel-Werte zwischen 0 und 1.

  2. Fügen Sie Ihrem Modell einige regularizers hinzu.