我不理解在pytorch中训练分类器的代码

时间:2019-04-08 03:02:54

标签: 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))`

2 个答案:

答案 0 :(得分:1)

要回答您的问题

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

在您的代码中

images, labels = data

imageslabels将分别包含N个培训示例,具体取决于您的批次大小。如果您检查标签的形状,则应该为[N, 1],其中N是小批量培训示例的大小。

对于那些刚刚训练神经网络的人来说有点先知。

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

说您的训练数据集包含一百万个图像,并且您的训练脚本的设计方式是在一个时期内传递所有一百万个图像。这种方法的问题在于,从神经网络接收反馈将花费很长时间。这是小批量培训的目的。

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

答案 1 :(得分:0)

sudo chown -R root:root /usr/local/hadoop/hdfs/namenode 是张量为labels的张量,其中[N, 1]等于批次中的样本数。 .size(...)返回具有张量维的元组(N)的子类,而torch.Size返回具有第一个(从0开始)维(即{{ 1}})。