【问题标题】:cnn model for binary classification with 86% val_accuracy always returning 1用于二进制分类的 cnn 模型,86% val_accuracy 总是返回 1
【发布时间】:2021-04-27 21:57:16
【问题描述】:

我创建了一个用于二进制分类的 CNN 模型。 我使用了一个包含 300 张图像的平衡数据库。 我知道这是一个小型数据库,但我使用了数据增强。 拟合模型后,我在验证集上得到了 86% 的 val_accuracy,但是当我想打印每张图片的概率时,我得到第一类的大多数图片的概率 1,甚至所有概率都 > 0.5,所有概率都为 1第二课的图片。

这是我的模特

model = keras.Sequential([
layers.InputLayer(input_shape=[128, 128, 3]),

preprocessing.Rescaling(scale=1/255),
preprocessing.RandomContrast(factor=0.10),
preprocessing.RandomFlip(mode='horizontal'),
preprocessing.RandomRotation(factor=0.10),

layers.BatchNormalization(renorm=True),
layers.Conv2D(filters=64, kernel_size=3, activation='relu', padding='same'),
layers.MaxPool2D(),

layers.BatchNormalization(renorm=True),
layers.Conv2D(filters=128, kernel_size=3, activation='relu', padding='same'),
layers.MaxPool2D(),

layers.BatchNormalization(renorm=True),
layers.Conv2D(filters=256, kernel_size=3, activation='relu', padding='same'),
layers.Conv2D(filters=256, kernel_size=3, activation='relu', padding='same'),
layers.MaxPool2D(),

layers.BatchNormalization(renorm=True),
layers.Flatten(),
layers.Dense(8, activation='relu'),
layers.Dense(1, activation='sigmoid'),])

这是准确度图

谢谢大家

【问题讨论】:

  • image = preprocess_input(image) 是做什么的,我没有看到它的代码?
  • @GerryP 这是一个来自 tensorflow.keras.applications.imagenet_utils 的模块

标签: python tensorflow keras deep-learning computer-vision


【解决方案1】:

我认为预处理器函数在 -1 和 +1 之间缩放像素值。但是,您将图像重新缩放以在 0 和 1 之间进行训练。尝试替换

image = preprocess_input(image)

image=image/255

看看有没有效果

【讨论】:

  • 它没有用。从 TensorFlow 的官方文档中,它说“图像从 RGB 转换为 BGR,然后每个颜色通道相对于 ImageNet 数据集为零中心,没有缩放。”,所以我认为它不会导致问题。
猜你喜欢
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 2021-03-18
  • 2018-01-04
  • 2017-06-02
  • 2018-01-20
  • 1970-01-01
  • 2018-10-01
相关资源
最近更新 更多