From 9504e88957c4cfc464736593a9cae1eb5d4ae23a Mon Sep 17 00:00:00 2001 From: shunqiang <396694334@qq.com> Date: Mon, 30 Mar 2020 20:14:03 +0800 Subject: [PATCH] 5 WRITING CUSTOM DATASETS, DATALOADERS AND TRANSFORMS --- docs/1.4/5.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/1.4/5.md b/docs/1.4/5.md index 65b153c..85c0563 100644 --- a/docs/1.4/5.md +++ b/docs/1.4/5.md @@ -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 秒) -- GitLab