图3.7
Python可以很容易地将数据调整成需要的格式。请先快速浏览一下代码,然后,我们将讲述重要的部分。
上述代码所做的处理,就是获取所有图片文件,并挑选出2,000张用于创建验证数据集。它把图片划分到了cats和dogs这两个类别目录中。创建独立的验证集是通用的重要实践,因为在相同的用于训练的数据集上测试算法并不合理。为了创建validation数据集,我们创建了一个图片数量长度范围内的数字列表,并把图像无序排列。在创建validation数据集时,我们可使用无序排列的数据来挑选一组图像。让我们详细解释一下每段代码。
下面的代码用于创建文件:
glob方法返回特定路径的所有文件。当图片数量巨大时,也可以使用iglob,它返回一个迭代器,而不是将文件名载入到内存中。在我们的例子中,只有25,000个文件名,可以很容易加载到内存里。
可以使用下面的代码混合排列文件:
上述代码返回25,000个0~25,000范围内的无序排列的数字,可以把其作为选择图片子集的索引,用于创建validation数据集。
可以创建验证代码,如下所示:
上述代码创建了validation文件夹,并在train和valid目录里创建了对应的类别文件夹(cats和dogs)。
可以用下面的代码对索引进行无序排列:
在上面的代码中,我们使用无序排列后的索引随机抽出2000张不同的图片作为验证集。同样地,我们把训练数据用到的图片划分到train目录。
现在已经得到了需要格式的数据,我们来快速看一下如何把图片加载成PyTorch张量。
1.把数据加载到PyTorch张量
PyTorch的torchvision.datasets包提供了一个名为ImageFolder的工具类,当数据以前面提到的格式呈现时,它可以用于加载图片以及相应的标签。通常需要进行下面的预处理步骤。
1.把所有图片转换成同等大小。大多数深度学习架构都期望图片具有相同的尺寸。
2.用数据集的均值和标准差把数据集归一化。
3.把图片数据集转换成PyTorch张量。
PyTorch在transforms模块中提供了很多工具函数,从而简化了这些预处理步骤。例如,进行如下3种变换:
?调整成256 ×256大小的图片;
?转换成PyTorch张量;
?归一化数据(第5章将探讨如何获得均值和标准差)。
下面的代码演示了如何使用ImageFolder类进行变换和加载图片:
train对象为数据集保留了所有的图片和相应的标签。它包含两个重要属性:一个给出了类别和相应数据集索引的映射;另一个给出了类别列表。
把加载到张量中的数据可视化往往是一个最佳实践。为了可视化张量,必须对张量再次变形并将值反归一化。下面的函数实现了这样的功能:
现在,可以把张量传入前面的imshow函数,将张量转换成图片:
上述代码生成的输出如图3.8所示。
阅读(245) | 评论(0) | 转发(0) |