PyTorch - 23 - 神经网络批处理 - 将图像批传递到PyTorch CNN
Passing A Batch Of Images To The Network
- 准备数据
- 建立模型
a. 了解批处理如何传递到网络 - 训练模型
- 分析模型的结果
在上一集中,我们了解了正向传播以及如何将单个图像从训练集中传递到我们的网络。 现在,让我们看看如何使用一批图像来完成此操作。 我们将使用数据加载器获取批处理,然后将批处理传递到网络后,我们将解释输出。
首先,回顾一下上一集的代码设置。我们需要以下内容:
- 我们的导入。
- 我们的训练集。
- 我们的网络类定义。
- 禁用梯度跟踪。 (可选的)
- 网络类实例。
现在,我们将使用我们的训练集来创建一个新的DataLoader实例,并设置我们的batch_size = 10,这样输出将更易于管理。
> data_loader = torch.utils.data.DataLoader(
train_set, batch_size=10
)
我们将从数据加载器中提取一个批次,并从该批次中解压缩图像和标签张量。我们将使用复数形式命名变量,因为当我们在数据加载器迭代器上调用next时,我们知道数据加载器会返回一批10张图片。
> batch = next(iter(data_loader))
> images, labels = batch
这给了我们两个张量,一个图像张量和一个对应标签的张量。
在上一集中,当我们从训练集中提取单个图像时,我们不得不unsqueeze() 张量以添加另一个维度,该维度将有效地将单例图像转换为一个大小为1的批处理。现在我们正在使用数据加载器,默认情况下我们正在处理批处理,因此不需要进一步的处理。
数据加载器返回一批图像,这些图像被打包到单个张量中,该张量具有反映以下轴的形状。
(批量大小,输入通道,高度,宽度)
这意味着张量的形状是良好的形状,无需将其松开。 ;)
> images.shape
torch.Size([10, 1, 28, 28])
> labels.shape
torch.Size([10])
让我们解释这两种形状。图像张量的第一个轴告诉我们,我们有一批十张图像。这十个图像具有一个高度和宽度为28的单一颜色通道。
标签张量的单轴形状为十,对应于我们批中的十个图像。每个图像一个标签。
好的。通过将图像张量传递到网络来进行预测。
> preds = network(images)
> preds.shape
torch.Size([10, 10])
> preds
tensor(
[
[ 0.1072, -0.1255, -0.0782,