pytorch - 我不明白在 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 中,tensor.size()
允许您检查张量的形状。
在您的代码中,
images, labels = data
images
并且labels
每个都包含N
训练示例的数量取决于您的批量大小。如果您检查标签的形状,它应该是[N, 1]
,其中 N 是小批量训练示例的大小。
对于那些刚开始训练神经网络的人来说,有点先见之明。
在训练神经网络时,从业者将通过网络前向传递数据集并优化梯度。
假设您的训练数据集包含 100 万张图像,并且您的训练脚本的设计方式是在单个 epoch 中通过所有 100 万张图像。这种方法的问题在于,您需要很长时间才能从神经网络接收反馈。这就是小批量训练的用武之地。
在 PyTorch 中,DataLoader 类允许我们将数据集拆分为多个批次。如果您的训练加载器包含 100 万个示例且批量大小为 1000,您将期望每个 epoch 将遍历所有小批量 1000 步。这样,您可以更好地观察和优化训练性能。
推荐阅读
- flutter - 使用飞镖在颤动中遍历按钮按下列表
- java - 休眠选择仅从 sybase 数据库返回 1 行
- wordpress - WordPress 块编辑器:将标签选择器面板变成基于复选框的选择器
- c - Flex 与 C ,使未知的情况
- wkwebview - 简单 WKWebView 的 loadHTMLString 在运行时因错误 WebPageProxy::processDidTerminate: (pid 0) 而崩溃,原因 3
- python - 使用 GNUPG 在 Python 中解密 PGP 文件
- reactjs - 为什么同时使用 BrowserRouter、Switch 和自定义路由不起作用?
- java - 如何提取数组中相同字符的最大序列?
- java - Eclipse BIRT 在新 Mac 上无法正常工作
- r - 带有 ggplot2 的辅助 x 轴