Keras - model.predict返回类而不是概率

时间:2018-02-05 14:39:16

标签: python image-processing tensorflow machine-learning keras

我加载了我训练过的模型。 这是培训的最后一层:

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(3))
model.add(Activation('sigmoid'))

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

之后我尝试对随机图像进行预测。 所以我加载模型:

#load the model we created
json_file = open('/path/to/model_3.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# load weight into model
loaded_model.load_weights("/path/to/model_3.h5")
print("\nModel successfully loaded from disk! ")


# Predicting images
img =image.load_img('/path/to/image.jpeg', target_size=(224, 224))
x = image.img_to_array(img)
x *= (255.0/x.max())
image = np.expand_dims(x, axis = 0)
image = preprocess(image)
preds = loaded_model.predict_proba(image)
pred_classes = np.argmax(preds)
print(preds)
print(pred_classes)

作为输出,我得到了这个:

[[6.0599333e-26 0.0000000e+00 1.0000000e+00]]
2

基本上就像我得到[0 0 1] 比如predict_classes。虽然我想获得概率。 所以我正在搜索[0.75 0.1 0.15]之类的输出。 有什么想法吗?

1 个答案:

答案 0 :(得分:4)

如果您想将概率作为网络的输出,您只需要使用softmax激活函数而不是sigmoid

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(3))
model.add(Activation('softmax'))

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