我正在从事一个图像识别项目,该项目使用一个自行创建的数据集,其中包含属于 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的验证精度。但是,当我使用模型对未见过的图像进行预测时,预测值始终相同。我尝试了几张图片,但模型总是预测相同的值。
谁能帮我理解为什么会这样,我该如何解决?如果您能提供任何建议或见解,我将不胜感激。谢谢!
我确实尝试了不同的模型架构。新模型预测了新值,但它们似乎几乎相同。我尝试了不同的验证拆分。但它不起作用。我已经尝试通过随机旋转和随机缩放来增加数据。但还是不行。
在输入模型之前增加数据,使用下面的 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,
)
有助于高效健壮的训练