在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?

Softmax可能产生类似"one-hot"的输出。考虑下面的例子:

# 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实现的softmax函数中,最大值从输入中减去,但在上面所述的情况下,它不会产生任何差异。

可能的修复方法:

  1. 确保输入图像被重新缩放,使像素值在01之间。

  2. 为你的模型添加一些正则器

相关内容

  • 没有找到相关文章

最新更新