2017-08-09 106 views
2

在Keras试样评估这样如何获得预测Keras值?

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

这不返回预测值进行。有其返回预测值

model.predict(testx, verbose=1) 

返回

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

testy是一个热编码和它的值是这样

[ 
[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

返回的值是每一类的概率。这些值可能很有用,因为它们表示模型的置信水平。

如果你只在类最高的概率感兴趣:

例如[.19 .15 .64] = 2(因为指数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这一点,你需要找到每行的最大可能性的指标,这可以通过使用np.argmax沿轴= 1来完成。然后,将这一成onehotencoding,可以使用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]])