提交 9504e889 编写于 作者: S shunqiang

5 WRITING CUSTOM DATASETS, DATALOADERS AND TRANSFORMS

上级 d42c9cc4
......@@ -8,7 +8,7 @@
**作者**[Sasank Chilamkurthy](https://chsasank.github.io)
解决任何机器学习问题都需要花费大量精力来准备数据。 PyTorch 提供了许多工具来简化数据加载过程,并有望使代码更具可读性。 在本教程中,我们将了解如何从非平凡的数据集中加载和预处理/增强数据。
解决任何机器学习问题都需要花费大量精力来准备数据。 PyTorch 提供了许多工具来简化数据加载过程,并有望使代码更具可读性。 在本教程中,我们将了解如何从非的数据集中加载和预处理/增强数据。
要运行本教程,请确保已安装以下软件包:
......@@ -42,7 +42,7 @@ plt.ion() # interactive mode
Note
[此处](https://download.pytorch.org/tutorial/faces.zip)下载数据集,以使图像位于名为“ data / faces /”的目录中。 该数据集实际上是通过对来自标记为“面部”的 imagenet 上的一些图像应用出色的 [dlib 姿态估计](https://blog.dlib.net/2014/08/real-time-face-pose-estimation.html)生成的。
[此处](https://download.pytorch.org/tutorial/faces.zip)下载数据集,将图像存放于名为“ data / faces /”的目录中。 该数据集实际上是通过对来自标记为“面部”的 imagenet 上的一些图像应用出色的 [dlib 姿态估计](https://blog.dlib.net/2014/08/real-time-face-pose-estimation.html)生成的。
数据集带有一个带注释的 csv 文件,如下所示:
......@@ -70,15 +70,15 @@ print('First 4 Landmarks: {}'.format(landmarks[:4]))
```
出:
出:
```
Image name: person-7.jpg
Landmarks shape: (68, 2)
First 4 Landmarks: [[32\. 65.]
[33\. 76.]
[34\. 86.]
[34\. 97.]]
First 4 Landmarks: [[32. 65.]
[33. 76.]
[34. 86.]
[34. 97.]]
```
......@@ -176,7 +176,7 @@ for i in range(len(face_dataset)):
![../_images/sphx_glr_data_loading_tutorial_002.png](img/80c0f612ddf710842d4cc31ee3c78da3.jpg)
Out:
输出:
```
0 (324, 215, 3) (68, 2)
......@@ -186,15 +186,15 @@ Out:
```
## 变身
## Transforms 变换
从上面可以看到的一个问题是样本的大小不同。 大多数神经网络期望图像的大小固定。 因此,我们将需要编写一些前置代码。 让我们创建三个转换:
从上面可以看到的一个问题是样本的大小不同。 大多数神经网络期望图像的大小固定。 因此,我们将需要编写一些预处理代码。 让我们创建三个转换:
* `Rescale`:缩放图像
* `RandomCrop`:从图像中随机裁剪。 这是数据扩充
* `ToTensor`:将 numpy 图像转换为torch图像(我们需要交换轴)。
* `RandomCrop`:从图像中随机裁剪。 这是数据增强
* `ToTensor`:将 numpy 图像转换为 torch 图像(我们需要交换轴)。
我们会将它们编写为可调用的类,而不是简单的函数,这样就不必每次调用转换时都传递其参数。 为此,我们只需要实现`__call__`方法,如果需要,可以实现`__init__`方法。 然后我们可以使用这样的变换:
我们会将它们编写为可调用的类,而不是简单的函数,这样就不必每次调用转换时都传递其参数。 为此,我们只需要实现`__call__`方法,如果需要,可以实现`__init__`方法。 然后我们可以使用这样的变换:
```
tsfm = Transform(params)
......@@ -322,7 +322,7 @@ plt.show()
* 从文件中即时读取图像
* 转换应用于读取的图像
* 由于其中一种转换是随机的,因此在采样时会增加数据
* 由于其中一种转换是随机的,因此数据是在采样时进行增强
我们可以像以前一样使用`for i in range`循环遍历创建的数据集。
......@@ -345,7 +345,7 @@ for i in range(len(transformed_dataset)):
```
Out:
输出:
```
0 torch.Size([3, 224, 224]) torch.Size([68, 2])
......@@ -358,10 +358,10 @@ Out:
但是,通过使用简单的`for`循环迭代数据,我们失去了很多功能。 特别是,我们错过了:
* 批量处理数据
* 整理数据
* 打乱数据
* 使用`multiprocessing`工作程序并行加载数据。
`torch.utils.data.DataLoader`是提供所有这些功能的迭代器。 下面使用的参数应该清楚。 感兴趣的一个参数是`collate_fn`。 您可以使用`collate_fn`指定需要精确分批的样品。 但是,默认排序规则在大多数情况下都可以正常工作。
`torch.utils.data.DataLoader`是提供所有这些功能的迭代器。 下面使用的参数应该清楚。 感兴趣的一个参数是`collate_fn`。 您可以使用`collate_fn`指定需要如何精确地分批样品。 但是,默认精度在大多数情况下都可以正常工作。
```
dataloader = DataLoader(transformed_dataset, batch_size=4,
......@@ -403,7 +403,7 @@ for i_batch, sample_batched in enumerate(dataloader):
![../_images/sphx_glr_data_loading_tutorial_004.png](img/f12c0231a67af28c3057e0ed3fa7f993.jpg)
Out:
输出:
```
0 torch.Size([4, 3, 224, 224]) torch.Size([4, 68, 2])
......@@ -451,7 +451,7 @@ dataset_loader = torch.utils.data.DataLoader(hymenoptera_dataset,
```
有关训练代码的示例,请参见[计算机视觉转学习教程](transfer_learning_tutorial.html)
有关训练代码的示例,请参见[计算机视觉转学习教程](transfer_learning_tutorial.html)
**脚本的总运行时间:**(0 分钟 58.611 秒)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册