图像识别模型预测对于未见过的图像总是相同的

问题描述 投票:0回答:1

我正在从事一个图像识别项目,该项目使用一个自行创建的数据集,其中包含属于 2 个类的 563 个文件。我将数据集分为训练集和验证集,训练集有 395 张图像,验证集有 168 张图像。


我使用以下模型训练了一个卷积神经网络:

# creating datagen object
base_dir = '/content/dataset/emotional_people'
train_data_gen = ImageDataGenerator(rescale = 1/255, validation_split=0.3)
val_data_gen = ImageDataGenerator(rescale = 1/255, validation_split = 0.3)

train_data = train_data_gen.flow_from_directory(base_dir,
                                                target_size = (256,256),
                                                class_mode = 'binary',
                                                subset = 'training',
                                                batch_size = 32)

val_data = val_data_gen.flow_from_directory(base_dir,
                                            target_size = (256,256),
                                            class_mode = 'binary',
                                            subset = 'validation',
                                            batch_size = 32)


# Data augmentation
data_augmentation = keras.Sequential([
    layers.RandomFlip("horizontal", input_shape=(256,256,3)),
    layers.RandomFlip("vertical", input_shape=(256,256,3)),
    layers.RandomRotation(0.1),
    layers.RandomZoom(0.1)])

model = Sequential()
model.add(Conv2D(16, (3,3), 1, activation='relu', input_shape=(256,256,3)))
model.add(MaxPooling2D())
model.add(Conv2D(32, (3,3), 1, activation='relu'))
model.add(MaxPooling2D())
model.add(Conv2D(16, (3,3), 1, activation='relu'))
model.add(MaxPooling2D())
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile('adam', loss=tf.losses.BinaryCrossentropy(), metrics=['accuracy'])

hist = model.fit(train_data, epochs=50, validation_data=val_data)`

在训练过程中,模型达到了0.9796的训练精度和0.7143的验证精度。但是,当我使用模型对未见过的图像进行预测时,预测值始终相同。我尝试了几张图片,但模型总是预测相同的值。

谁能帮我理解为什么会这样,我该如何解决?如果您能提供任何建议或见解,我将不胜感激。谢谢!


我确实尝试了不同的模型架构。新模型预测了新值,但它们似乎几乎相同。我尝试了不同的验证拆分。但它不起作用。我已经尝试通过随机旋转和随机缩放来增加数据。但还是不行。

tensorflow keras conv-neural-network image-recognition image-classification
1个回答
0
投票

在输入模型之前增加数据,使用下面的 DataGenerator 它将在图像加载期间增加图像。

train_data = tf.keras.preprocessing.image.ImageDataGenerator(
    rescale=1.0/255.0,
    validation_split=0.3,
    rotation_range=5,
    shear_range=0.3,
    zoom_range=0.3,
    width_shift_range=0.05,
    height_shift_range=0.05,
    horizontal_flip=True,
    vertical_flip=True,
)

有助于高效健壮的训练

© www.soinside.com 2019 - 2024. All rights reserved.