2017-08-09 15 views
2

これは予測値を返さないこのケラスで予測値を得るには? Keras試験サンプルの評価で

score = model.evaluate(testx, testy, verbose=1) 

のように行われます。

model.predict(testx, verbose=1) 

戻り

[ 
[.57 .21 .21] 
[.19 .15 .64] 
[.23 .16 .60] 
..... 
] 

testyは1つのホットエンコードであり、その値はこの

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

どうtestyのような予測値缶または似ている予測値を返す方法predictがあります予測された値をホットエンコードされたものに変換する方法は?

ノート:私のモデルは、この

# setup the model, add layers 
model = Sequential() 
model.add(Conv2D(32, kernel_size=(3,3), activation='relu', input_shape=input_shape)) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 
model.add(Flatten()) 
model.add(Dense(64, activation='relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(classes, activation='softmax')) 

# compile model 
model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adadelta(), metrics=['accuracy']) 

# fit the model 
model.fit(trainx, trainy, batch_size=batch_size, epochs=iterations, verbose=1, validation_data=(testx, testy)) 

答えて

1

のように見えるの値が返される各クラスの確率です。これらの値は、モデルの信頼水準を示しているので便利です。

あなたが最も確率の高いクラスにのみ関心がある場合:(リストのインデックス2が最も大きいので)

[.19 .15 .64] = 2例えば

にモデルをしてみましょう

Tensorflowモデルには、最高クラスの確率の指標を返す組み込みメソッドがあります。

model.predict_classes(testx, verbose=1) 

手動

argmaxをやれシーケンスの最大値のインデックスを返すために、一般的な機能です。

import tensorflow as tf 

# Create a session 
sess = tf.InteractiveSession() 

# Output Values 
output = [[.57, .21, .21], [.19, .15, .64], [.23, .16, .60]] 

# Index of top values 
indexes = tf.argmax(output, axis=1) 
print(indexes.eval()) # prints [0 2 2] 
+0

返される値は、確率であり、対数尤度ではありません。 –

+0

@MatiasValdenegroそれをキャッチしてくれてありがとう –

+0

冗長な= 1は何ですか? – Eddy

1

Kerasは、正規化されたクラスラベルの可能性を持つnp.ndarrayを返します。 これをonehotencodingに変換したい場合は、行ごとに最大尤度のインデックスを見つける必要があります。これは、軸= 1に沿ってnp.argmaxを使用することによって行うことができます。次に、これをワンショットに変換するには、np.eye機能を使用できます。これにより、指定されたインデックスに1が設定されます。取られるべき唯一の注意は、適切な行の長さに次元化することです。

a #taken from your snippet 
Out[327]: 
array([[ 0.57, 0.21, 0.21], 
     [ 0.19, 0.15, 0.64], 
     [ 0.23, 0.16, 0.6 ]]) 

b #onehotencoding for this array 
Out[330]: 
array([[1, 0, 0], 
     [0, 0, 1], 
     [0, 0, 1]]) 

n_values = 3; c = np.eye(n_values, dtype=int)[np.argmax(a, axis=1)] 
C#Generated onehotencoding from the array of floats. Also works on non-square matrices 
Out[332]: 
array([[1, 0, 0], 
     [0, 0, 1], 
     [0, 0, 1]]) 
関連する問題