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

PyTorch训练CIFAR-10时CNN模型准确率始终卡在10%求助

CIFAR-10训练CNN准确率卡在10%的问题排查

我在使用CIFAR-10数据集训练CNN模型时,发现准确率一直卡在10%左右,排查代码后定位到几个关键问题:

核心问题分析

  • 优化器绑定错误:创建优化器时使用了model.parameters(),但实际定义的模型实例是model_b1,导致优化器没有绑定到正确的模型参数上——模型参数完全不会更新,相当于一直在随机猜测(CIFAR-10共10类,随机猜测的准确率恰好是10%)。
  • 全局变量风险:模型forward函数中使用了全局变量out,可能导致计算图混乱或内存泄漏,虽不是直接导致准确率异常的原因,但会埋下隐患。
  • 全连接层维度验证:fc7 = nn.Linear(2904,120)的输入维度是正确的:CIFAR-10输入为32×32×3,经卷积、池化后最终特征图尺寸为11×11×24,展平后正好是2904。

修正后的关键代码

优化器部分修正

# 原错误代码
# optimizer = torch.optim.Adam(model.parameters(), lr = 1e-3, weight_decay = 1e-8) 
# 修正后
optimizer = torch.optim.Adam(model_b1.parameters(), lr = 1e-3, weight_decay = 1e-8) 

模型forward函数移除全局变量

def forward(self,x): 
    # 移除global out声明
    out = self.conv1(x)
    out = self.relu2(out)
    out = self.conv3(out)
    out = self.relu4(out)
    out = self.maxpool4b(out)
    
    # 可视化代码保留(按需启用)
    # plt.imshow(out[0][0].cpu().detach().numpy())
    # plt.show()
    # plt.close('all')  
    
    out = self.conv5(out)
    out = self.relu6(out)
    
    out = out.view(out.size(0), -1)
    
    out = self.fc7(out)
    out = self.relu8(out)
    out = self.fc9(out)
    out = self.relu10(out)
    out = self.fc11(out)  
    
    return out

训练循环评估阶段优化(可选)

评估时加上torch.no_grad(),避免计算梯度,节省内存:

if count % 50 == 0:
    model_b1.eval()
    correct = 0
    total = 0
    with torch.no_grad():  # 新增
        for images, labels in test_loader:
            images, labels = images.to(device), labels.to(device)
            outputs = model_b1(images)
            predicted = torch.argmax(outputs,1)
            total += len(labels)
            correct += (predicted == labels).sum()
    accuracy = 100 * correct / float(total)
    # 后续存储代码不变

修正说明

核心问题解决后,优化器会正常更新model_b1的参数,模型将开始学习特征,准确率会逐步上升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:14:54