首页 > 解决方案 > 我不明白在 pytorch 中训练分类器的代码

问题描述

我不明白这条线labels.size(0)。我是 Pytorch 的新手,对数据结构感到很困惑。

correct = 0
total = 0
with torch.no_grad():
   for data in testloader:
      images, labels = data
      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))`

标签: pytorch

解决方案


回答你的问题

在 PyTorch 中,tensor.size()允许您检查张量的形状。

在您的代码中,

images, labels = data

images并且labels每个都包含N训练示例的数量取决于您的批量大小。如果您检查标签的形状,它应该是[N, 1],其中 N 是小批量训练示例的大小。

对于那些刚开始训练神经网络的人来说,有点先见之明。

在训练神经网络时,从业者将通过网络前向传递数据集并优化梯度。

假设您的训练数据集包含 100 万张图像,并且您的训练脚本的设计方式是在单个 epoch 中通过所有 100 万张图像。这种方法的问题在于,您需要很长时间才能从神经网络接收反馈。这就是小批量训练的用武之地。

在 PyTorch 中,DataLoader 类允许我们将数据集拆分为多个批次。如果您的训练加载器包含 100 万个示例且批量大小为 1000,您将期望每个 epoch 将遍历所有小批量 1000 步。这样,您可以更好地观察和优化训练性能。


推荐阅读