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

Keras搭建ResNet50迁移学习二分类模型 训练准确率恒为0.5如何排查

ResNet50二分类准确率卡0.5问题排查

你现在模型完全处于随机猜测的状态,准确率卡0.5、最后MSE收敛到0.25是sigmoid输出固定为0.5时的理论最优值,说明模型根本没学到任何有效分类特征,问题出在以下几个位置:

数据集硬伤

  • 样本量严重不足:注释标注是10张人脸+10张动物图共20个样本,但实际打印的X形状是(30,75,75,3),多出来的10个样本没有对应正确标签,最后一轮准确率掉到0.33就是标签错配的直接表现。就算凑够30个标注正确的样本,对于千万级参数量的ResNet50来说也远远不够,连基本的过拟合都做不到。
  • 输入预处理完全缺失:你前面构造的数据集变量是X,训练时传入的是X_p,代码里根本没给X_p赋值;就算是笔误漏写了预处理步骤,直接把0-255范围的原始像素值喂给ImageNet预训练的ResNet50也完全不行——预训练权重是在做过特定归一化的图片上训练得到的,原始像素输入会直接让特征提取层失效。

迁移学习配置错误

  • 没有冻结预训练基模型:你加载了ImageNet上训好的ResNet50权重,但没有冻结基模型层,30个样本算出来的梯度会直接把预训练好的特征提取权重冲乱,迁移学习的优势完全没发挥出来。
  • 分类头参数量爆炸:ResNet50在7575输入下最后一层输出是2048通道的33特征图,你直接用Flatten拉平会得到18000多维的向量,再接两个256维全连接层凭空多了四百多万待训练参数,这点样本量根本训不动这么多参数。

训练配置错误

  • 损失函数用错:sigmoid输出的二分类任务应该用二元交叉熵binary_crossentropy当损失,你用的MSE是回归任务的损失,分类场景下收敛极慢,很容易卡在局部最优出不来。
  • 训练参数不合理:没有设置batch size,默认会把全部30个样本当一个batch算梯度,参数更新方向极不稳定,也没有拆分验证集,根本没法判断模型是不是真的学到了特征。

可直接落地的修正方案

  1. 先把数据集扩充到每类至少100张,逐一核对标签和样本一一对应,用ResNet50自带的预处理函数做输入归一化:
from tensorflow.keras.applications.resnet50 import preprocess_input
import numpy as np
# 强制校验样本和标签数量一致
assert len(X) == len(y)
X = preprocess_input(np.array(X))
y = np.array(y)
  1. 加载预训练模型后先冻结所有基模型层,优先训练自定义的分类头:
input_layer = layers.Input(shape=(75,75,3))
base_model = ResNet50(weights='imagenet',
                      input_tensor=input_layer,
                      include_top=False)
# 冻结基模型权重,初期训练不更新
for layer in base_model.layers:
    layer.trainable = False
  1. 把Flatten换成全局平均池化大幅减少参数量,分类头不要堆过宽的全连接层,替换成正确的损失函数:
last_layer = base_model.output
# 用全局平均池化替换Flatten,参数量直接降到原来的几十分之一
gap = layers.GlobalAveragePooling2D()(last_layer)
my_layer = layers.Dense(64, activation='relu')(gap)
output_layer = layers.Dense(1, activation='sigmoid')(my_layer)

model = Model(inputs=input_layer, outputs=output_layer)
# 二分类用二元交叉熵损失,初期用较小的学习率避免冲乱预训练权重
model.compile(loss='binary_crossentropy', optimizer=keras.optimizers.Adam(learning_rate=1e-4), metrics=['accuracy'])
  1. 训练时设置合理batch size,比如batch_size=8,先训20轮左右等分类头准确率到90%以上,再解冻基模型最后3-5层,用1e-5的极小学习率微调即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:18:19