You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

训练AlexNet时验证准确率始终无变化的技术求助

解决AlexNet在Intel图像数据集上验证准确率恒定的问题

核心问题排查与修复方案

1. 修复模型全连接层的激活函数缺失

你的模型中第6、7层的全连接层未添加ReLU激活函数,这会直接导致网络无法构建有效的特征映射,严重限制表达能力:

# 原错误代码
model.add(Dense(4096))  # 无激活函数
model.add(Dropout(0.5))
model.add(Dense(4096))  # 无激活函数

# 修复后
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4096, activation='relu'))

原始AlexNet的全连接层均使用ReLU激活,缺失激活会造成梯度传递受阻,网络无法完成有效训练。

2. 添加数据归一化预处理

Intel图像数据集的像素值范围是0-255,未归一化的输入会导致卷积层权重更新不稳定,是泛化失败的常见原因:

# 对训练和测试集统一做归一化
train_X = train_X / 255.0
test_X = test_X / 255.0

必须保证训练集和验证集使用完全一致的预处理流程,避免数据分布不一致导致的模型失效。

3. 优化器配置升级

当前使用的SGD缺少动量项,收敛速度慢且容易陷入局部最优,改为原始AlexNet使用的带动量SGD:

opt = SGD(learning_rate=0.01, momentum=0.9)

还可以添加学习率衰减,避免后期训练震荡:

lr_scheduler = keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate=0.01,
    decay_steps=10 * len(train_dataset),  # 每10个epoch衰减一次
    decay_rate=0.1
)
opt = SGD(learning_rate=lr_scheduler, momentum=0.9)

4. 验证数据集有效性

验证准确率恒定为1/6(≈0.167),刚好是随机猜测的准确率,需确认:

  • 验证集标签是否正确:统计每个类别的样本数,是否为500/类(3000样本÷6类)
  • 手动抽取验证集样本,确认标签与图像内容匹配
  • 排查训练集与验证集是否存在数据泄漏(如重复样本)

5. 验证模型初始输出

训练前先测试模型对少量验证样本的输出,确认是否为均匀分布:

sample_pred = model.predict(test_X[:10])
print(sample_pred)

如果所有样本的输出概率都接近0.1667,说明模型完全未学习到特征,优先解决模型结构和预处理问题。

内容的提问来源于stack exchange,提问作者rasul12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:15:42