【问题标题】:Obtaining a prediction in Keras在 Keras 中获得预测
【发布时间】:2016-11-06 15:16:53
【问题描述】:

我已经在 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 中获得这个?

【问题讨论】:

    标签: python neural-network deep-learning conv-neural-network keras


    【解决方案1】:

    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 implementation of the softmax function 中,从输入中减去最大值,但在上述情况下它不会没有任何区别。

    解决此问题的可能方法:

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

    2. 为您的模型添加一些regularizers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2020-04-15
      相关资源
      最近更新 更多