深度学习模型测试与优化:从基础测试到全局平均池化的实践
·
1. 模型测试:评估网络性能
在深度学习项目中,模型测试是评估训练好的神经网络在实际数据上表现的关键步骤。以下代码展示了如何对CIFAR-10分类模型进行测试:
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data
images, labels = images.to(device), labels.to(device)
outputs = net(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: %d %%' % (
100 * correct / total))
关键知识点:
torch.no_grad():禁用梯度计算,节省内存和计算资源
torch.max(outputs.data, 1):返回每行最大值的索引,即预测类别
批量处理:利用labels.size(0)获取当前批次的样本数量
测试结果显示模型整体准确率为66%,这为我们提供了模型性能的总体评估。
2. 类别级精度分析
为了更深入了解模型表现,我们需要分析每个类别的分类精度:
class_correct = list(0. for i in range(10))
class_total = list(0. for i in range(10))
with torch.no_grad():
for data in testloader:
images, labels = data
images, labels = images.to(device), labels.to(device)
outputs = net(images)
_, predicted = torch.max(outputs, 1)
c = (predicted == labels).squeeze()
for i in range(4): # 假设批次大小为4
label = labels[i]
class_correct[label] += c[i].item()
class_total[label] += 1
for i in range(10):
print('Accuracy of %5s : %2d %%' % (
classes[i], 100 * class_correct[i] / class_total[i]))
分析结果:
车辆识别准确率最高:82%
猫的识别准确率最低:45%
这种不均衡的性能表明模型对某些类别学习不够充分
3. 模型优化:全局平均池化
第二个代码展示了如何使用全局平均池化(Global Average Pooling)优化网络结构:
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 16, 5)
self.pool1 = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(16, 36, 5)
self.pool2 = nn.MaxPool2d(2, 2)
# 使用全局平均池化层
self.aap = nn.AdaptiveAvgPool2d(1)
self.fc3 = nn.Linear(36, 10)
def forward(self, x):
x = self.pool1(F.relu(self.conv1(x)))
x = self.pool2(F.relu(self.conv2(x)))
x = self.aap(x) # 全局平均池化
x = x.view(x.shape[0], -1) # 展平
x = self.fc3(x)
return x
全局平均池化的优势:
参数大幅减少:传统全连接层需要大量参数,而GAP显著降低参数量
防止过拟合:减少参数降低了过拟合风险
空间信息整合:将特征图直接转换为特征向量,保留重要信息
该优化后的模型仅有16,022个参数,相比传统架构参数量大为减少。
4. 实践总结
通过这两个代码示例,我们学到了:
-
全面的模型评估:不仅要看整体准确率,还要分析每个类别的表现
-
测试技巧:使用
torch.no_grad()提高测试效率 -
模型优化策略:全局平均池化是减少参数、防止过拟合的有效方法
-
代码调试:注意代码中的拼写错误(如
inages应为images)
这些技术对于构建高效、准确的深度学习模型至关重要,特别是在计算资源有限的环境中,全局平均池化等优化技术显得尤为宝贵。
更多推荐


所有评论(0)