图像分类数据集(Fashion-MNIST)

"""
3.5. 图像分类数据集(Fashion-MNIST)
多类图像分类数据集
Fashion-MNIST
3.5.1. 获取数据集
"""
import d2lzh as d2l
from mxnet.gluon import data as gdata
import sys
import time

mnist_train = gdata.vision.FashionMNIST(train=True)
mnist_test = gdata.vision.FashionMNIST(train=False)
"""
训练集中和测试集中的每个类别的图像数分别为6,000和1,000。
因为有10个类别,所以训练集和测试集的样本数分别为60,000和10,000。
"""
print("len(mnist_train):", len(mnist_train))
print("len(mnist_test):", len(mnist_test))

"""
我们可以通过方括号[]来访问任意一个样本,下面获取第一个样本的图像和标签。
"""

feature, label = mnist_train[0]

print(feature, label)
"""
变量feature对应高和宽均为28像素的图像。
每个像素的数值为0到255之间8位无符号整数(uint8)。
它使用三维的NDArray存储。其中的后一维是通道数。
因为数据集中是灰度图像,所以通道数为1。
为了表述简洁,我们将高和宽分别为 h 和 w 像素的图像的形状记为 h×w 或(h,w)最
"""
print("feature.shape:", feature.shape)
print("feature.dtype:", feature.dtype)
print("len(feature):", len(feature))

# 图像的标签使用NumPy的标量表示。它的类型为32位整数(int32)。
"""
Fashion-MNIST中一共包括了10个类别,
分别为t-shirt(T恤)、trouser(裤子)、
pullover(套衫)、dress(连衣裙)、
coat(外套)、sandal(凉鞋)、shirt(衬衫)、
sneaker(运动鞋)、bag(包)和ankle boot(短靴)。
以下函数可以将数值标签转成相应的文本标签。
"""

print("label:", label)
print("label.dtype:", label.dtype)

def get_fashion_mnist_labels(labels):
    text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',
                  'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
    return [text_labels[int(i)] for i in labels]


# 本函数已保存在d2lzh包中方便以后使用
def show_fashion_mnist(images, labels):
    d2l.use_svg_display()
    # 这里的_表示我们忽略(不使用)的变量
    _, figs = d2l.plt.subplots(1, len(images), figsize=(12, 12))
    for f, img, lbl in zip(figs, images, labels):
        f.imshow(img.reshape((28, 28)).asnumpy())
        f.set_title(lbl)
        f.axes.get_xaxis().set_visible(True)
        f.axes.get_yaxis().set_visible(True)

X, y = mnist_train[0: 9]
show_fashion_mnist(X, get_fashion_mnist_labels(y))
"""
3.5.2. 读取小批量

"""

batch_size = 256
transformer = gdata.vision.transforms.ToTensor()
if sys.platform.startswith("win"):
    num_workers = 0 # 0 表示不用额外的进程来加速读取数据
else:
    num_workers = 4

train_iter = gdata.DataLoader(mnist_train.transform_first(transformer),
                              batch_size, shuffle=True, num_workers=num_workers)
test_iter = gdata.DataLoader(mnist_test.transform_first(transformer),
                             batch_size, shuffle=False, num_workers=num_workers)

start = time.time()
for X, y in train_iter:
    continue

print("%.2f sec" % (time.time() - start))
print("-----------------------")

if __name__ == "__main__":
    pass

你可能感兴趣的:(动手深度学习)