【问题标题】:Why does the model give probability close to 1 for negative examples?为什么模型给出的负例概率接近 1?
【发布时间】:2019-04-20 06:07:35
【问题描述】:

这不是我所期望的!

我已经在SVHN 上训练了一个 CNN。准确度接近 ~0.93,总体而言,在单个数字图像上测试时效果非常好。因此,如果我使用包含单个数字的图像测试模型,如下所示:

它适用于接近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 个班级有一些随机图像?但这听起来很奇怪。我是否选择了不正确的损失/激活函数?

【问题讨论】:

  • 你应该调低你的期望值,这个模型除了数字之外从来没有见过任何东西,所以它不适用于负样本。贝叶斯模型可能效果更好。
  • 图像识别的前提是你展示的图像是可以识别的。
  • @TheLoneDeranger 当然。但即使模型没有看到示例,我也不会期望负示例的概率接近 1。

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


【解决方案1】:

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

您的丢失和激活很好。

【讨论】:

  • 但这听起来并不令人信服,考虑到网络在随机图像上给出1 的概率。低概率会为模型的状态提供很大保证。
  • 它是否以高概率连续预测同一类?您将需要一些偏移量以允许模型预测不是数字的内容。
  • 您要问的问题(概率很高的事实)可能只是关于具有大 (11) 内核大小和大步幅 (4) 的卷积层。我建议保持内核为 3,步幅为 1。最大池池大小为 2,步幅为 2。
  • 是的。它以高概率连续预测同一类。我正在使用包含来自 CIFAR 数据集的图像的第 11 类进行训练。让我看看这是否有帮助。但是,模型不应该为非数字的事物提供低概率吗?您还能想到其他原因吗?
  • 如果它以概率 1 预测同一类,那么您的模型过度拟合。查看我上面关于转换层的建议,并确保您的数字类具有相似的大小。
猜你喜欢
  • 2018-05-07
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
相关资源
最近更新 更多