图像分类数据集
MNIST 数据集 (LeCun.Bottou.Bengio.ea.1998
) 是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。我们将使用类似但更复杂的 Fashion-MNIST 数据集 (Xiao.Rasul.Vollgraf.2017
) 。
读取数据集
我们可以通过框架中的内置函数将 Fashion-MNIST 数据集下载并读取到内存中。
Fashion-MNIST 由10个类别的图像组成,每个类别由训练数据集(train dataset)中的6000张图像和测试数据集(test dataset)中的1000张图像组成。因此,训练集和测试集分别包含60000和10000张图像。测试数据集不会用于训练,只用于评估模型性能。
每个输入图像的高度和宽度均为28像素。数据集由灰度图像组成,其通道数为1。为了简洁起见,本书将高度 h 像素、宽度 w 像素图像的形状记为 h×w 或(h, w)。
Fashion-MNIST 中包含的10个类别,分别为 t-shirt(T 恤)、trouser(裤子)、pullover(套衫)、dress(连衣裙)、coat(外套)、sandal(凉鞋)、shirt(衬衫)、sneaker(运动鞋)、bag(包)和 ankle boot(短靴)。以下函数用于在数字标签索引及其文本名称之间进行转换。
我们现在可以创建一个函数来可视化这些样本。
以下是训练数据集中前几个样本的图像及其相应的标签。
读取小批量
为了使我们在读取训练集和测试集时更容易,我们使用内置的数据迭代器,而不是从零开始创建。回顾一下,在每次迭代中,数据加载器每次都会读取一小批量数据,大小为 batch_size
。通过内置数据迭代器,我们可以随机打乱了所有样本,从而无偏见地读取小批量。
我们看一下读取训练数据所需的时间。
整合所有组件
现在我们定义 load_data_fashion_mnist
函数,用于获取和读取 Fashion-MNIST 数据集。这个函数返回训练集和验证集的数据迭代器。此外,这个函数还接受一个可选参数 resize
,用来将图像大小调整为另一种形状。
下面,我们通过指定 resize
参数来测试 load_data_fashion_mnist
函数的图像大小调整功能。
我们现在已经准备好使用 Fashion-MNIST 数据集,便于下面的章节调用来评估各种分类算法。
小结
- Fashion-MNIST是一个服装分类数据集,由10个类别的图像组成。我们将在后续章节中使用此数据集来评估各种分类算法。
- 我们将高度h像素,宽度w像素图像的形状记为h×w或(h,w)。
- 数据迭代器是获得更高性能的关键组件。依靠实现良好的数据迭代器,利用高性能计算来避免减慢训练过程。
练习
- 减少
batch_size
(如减少到1)是否会影响读取性能?
- 数据迭代器的性能非常重要。当前的实现足够快吗?探索各种选择来改进它。
- 查阅框架的在线API文档。还有哪些其他数据集可用?
Discussions