【问题标题】:Image classification CNN model always predicts the same value图像分类 CNN 模型总是预测相同的值
【发布时间】:2021-06-21 19:09:53
【问题描述】:

我有一个图像数据集,其结构如下:

money_photo/
           100/
           50/
           10/
           1/

每个目录内有 240 张照片,对应钞票值(100、50、10 和 1)。

我正在使用 keras.preprocessing.image_dataset_from_directory 拆分 train 和 val 数据集,如下所示:

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

找到属于 4 个类的 960 个文件。 使用 768 文件进行训练。

val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="validation",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

找到属于 4 个类的 960 个文件。 使用 192 个文件进行验证。

每张图片都被缩放到180x180像素并对其进行归一化(0..255像素值在0之间有对应的值)

模型定义如下:

num_classes = 4

model = tf.keras.Sequential([
  layers.experimental.preprocessing.Rescaling(1./255),
  layers.Conv2D(32, 3, activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(32, 3, activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(32, 3, activation='relu'),
  layers.MaxPooling2D(),
  layers.Flatten(),
  layers.Dense(128, activation='relu'),
  layers.Dense(num_classes),
  layers.Activation('softmax')
])

训练后我有以下结果:

时代 3/3 24/24 [===============================] - 10 秒 425 毫秒/步 - 损失:0.3214 - 准确度:0.8866 - val_loss : 0.2449 - val_accuracy: 0.9115

我使用模型进行预测的方式:

import tensorflow as tf
from PIL import Image
import numpy as np
from skimage import transform

def load(filename):
    np_image = Image.open(filename)
    np_image = np.array(np_image).astype('float32')/255
    np_image = transform.resize(np_image, (180, 180, 3))
    np_image = np.expand_dims(np_image, axis=0)
    return np_image

image = load('abd.jpg')
prediction = model.predict(image)

print(class_names[np.argmax(prediction)])

为什么我总是得到相同的预测值?

【问题讨论】:

    标签: tensorflow machine-learning keras deep-learning image-classification


    【解决方案1】:

    您的模型内置了重新缩放层,因此您不应重新缩放输入图像。换个方式

    np_image = np.array(np_image).astype('float32')/255
    

    np_image = np.array(np_image).astype('float32')
    

    【讨论】:

      猜你喜欢
      • 2020-08-17
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多