为什么该模型对否定示例给出的概率接近于1?

时间:2019-04-20 06:07:36

标签: python tensorflow keras computer-vision conv-neural-network

这不是我所期望的!

我已经在SVHN上训练了CNN。准确度接近〜0.93,总体上,当在单个数字图像上进行测试时,它的确运行良好。因此,如果我使用包含单个数字的图像测试模型,如下所示:

enter image description here

在预期的类别概率接近1时效果很好。但是,如果我为模型提供诸如houselion之类的随机图像,它仍然可以预测概率接近于1的类。我不明白其原因。应该预测每个类别的概率都很低。

这是我创建网络的方式。

     import tensorflow.keras as keras

     model = keras.Sequential()

    # First Conv Layer
    model.add(keras.layers.Conv2D(filters = 96, kernel_size = (11,11), strides = (4,4), padding = "same", input_shape=(227,227,3)))
    model.add(keras.layers.Activation("relu"))
    model.add(keras.layers.BatchNormalization())
    model.add(keras.layers.MaxPooling2D(pool_size = (3,3), strides = (2,2), padding="same"))


    # .. More Convolution Layer ... 

    # .. SOME Fully Connected Layers ..

    # Final Fully Connected Layer
    model.add(keras.layers.Dense(10))

    model.add(keras.layers.Activation("softmax"))

    model.compile(loss="categorical_crossentropy", optimizer=keras.optimizers.RMSprop(lr=0.0001), metrics=['accuracy'])


    data_generator = keras.preprocessing.image.ImageDataGenerator(rescale = 1./255)

    train_generator = data_generator.flow_from_directory(
            'train',
            target_size=(227, 227),
            batch_size=batch_size,
            color_mode='rgb',
            class_mode='categorical'
    )

    model.fit_generator(
        train_generator
        epochs = 12, 
        steps_per_epoch = math.ceil(num_train_samples / batch_size), 
        verbose = 2
    )

从我上面共享的代码中也可以看出,我使用过:

  • 丢失功能为categorical_crossentropy
  • 最终层激活功能为softmax

从0到9,共有10个班级。我还需要有一些随机图像的第11个班级吗?但这听起来很奇怪。我选择了错误的丢失/激活功能吗?

1 个答案:

答案 0 :(得分:0)

它可以帮助您用数字图像训练网络,并包括一些随机的(房屋或狮子的)其他图像,并将它们全部标记为“非数字”。卷积神经网络不会一次查看整个图像,而是一次查看整个图像。它也可以轻松找到也类似于数字的子形状。

您的丢失和激活都很好。