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
相关产品推荐
相关产品推荐

