卷积神经网络始终预测同一类别问题排查与进展
基于Keras的图像分类器开发:从四分类困境到二分类突破
最近我在基于Keras开发一款卷积神经网络(CNN)图像分类器,过程中踩了不少坑,这里分享下我的项目细节、遇到的问题以及当前的解决进展:
项目基础信息
- 数据集:包含尺寸为360×480的.jpg格式图像,标签分为0、1、2、3四类
- 数据准备:训练集与验证集已做平衡处理,按目录结构组织,方便使用Keras数据生成器加载
初始模型与训练代码
我最初定义的CNN模型及训练流程代码如下:
# 模型定义 model = Sequential() model.add(Conv2D(128, kernel_size=3, activation='relu', input_shape=input_shape, padding="valid")) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Conv2D(64, kernel_size=3, activation='relu', padding="valid")) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Conv2D(32, kernel_size=3, activation='relu', padding="valid")) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Flatten()) model.add(Dense(512, activation="relu")) model.add(Dense(4, activation="softmax")) # 编译模型 opt = SGD(lr=learning_rate) model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) # 数据生成器 train_datagen = ImageDataGenerator( width_shift_range=0.05, height_shift_range=0.05, rescale=1./255, horizontal_flip=True) validate_datagen = ImageDataGenerator(rescale=1./255) # 生成数据加载器 train_generator = train_datagen.flow_from_directory( path_data + '/train', shuffle = True, target_size=input_generator, batch_size=batch_size) validation_generator = train_datagen.flow_from_directory( path_data + '/validate', shuffle = True, target_size=input_generator, batch_size=batch_size) # 训练模型 steps_per_epoch = np.ceil(train_size/batch_size) validation_steps = np.ceil(validation_size/batch_size) H = model.fit_generator( train_generator, steps_per_epoch=steps_per_epoch, epochs=epochs, validation_data=validation_generator, validation_steps=validation_steps)
遇到的核心问题
训练过程中出现了非常棘手的情况:训练准确率始终维持在0.25左右(刚好是4类随机猜测的准确率),而且测试集的混淆矩阵显示模型始终预测同一类别,完全没有学习到任何特征。
排查尝试(均未解决)
为了定位问题,我做了一系列尝试:
- 改用VGG架构替换自定义CNN
- 调整图像输入尺寸与学习率参数
- 缩小数据集规模,简化任务复杂度
- 使用纯色图像数据集测试,排除数据本身的特征问题
但以上所有尝试都没能让模型正常学习,问题依旧存在。
当前解决方案与后续计划
无奈之下,我暂时将任务转为二分类:合并0、1标签为一类,2、3标签为一类,对应管道污垢的两个等级。同时改用无预训练权重的ResNet50架构,并将图像裁剪为224×224的标准尺寸。目前模型已经开始正常学习,准确率逐步提升。
后续我会继续优化这个二分类模型,待效果稳定后,再尝试回归原本的四分类任务,探索更适合的模型结构与训练策略。
内容的提问来源于stack exchange,提问作者Jaume Brossa Ordóñez
相关产品推荐
相关产品推荐

