【MXNet】(十一):Fashion-MNIST数据集

首先导入包,

%matplotlib inline
from mxnet.gluon import data as gdata
from matplotlib import pyplot as plt
import sys
import time

然后用Gluon的data包来下载这个数据集。第一次调用时会自动从网上获取数据。

mnist_train = gdata.vision.FashionMNIST(train=True)
mnist_test = gdata.vision.FashionMNIST(train=False)

打印出正在下载的信息,

 下载完成后,在相应的文件夹下有四个文件,

【MXNet】(十一):Fashion-MNIST数据集_第1张图片

看一下训练集和测试集的数量,

len(mnist_train),len(mnist_test)

输出,

看一下样本图像的shape和dtype以及样本的label的shape和type,

feature, label = mnist_train[0]
feature.shape, feature.dtype

输出,

label, type(label), label.dtype

输出,

Fashion-MNIST中一共包括了10个类别,分别为t-shirt(T恤)、trouser(裤子)、pullover(套衫)、dress(连衣裙)、coat(外套)、sandal(凉鞋)、shirt(衬衫)、sneaker(运动鞋)、bag(包)和ankle boot(短靴)。下面将数值标签转成相应的文本标签。

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]

下面定义一个可以在一行显示多幅图像的函数,

def show_fashion_mnist(images, labels):
    use_svg_display()
    _, figs = 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(False)
        f.axes.get_yaxis().set_visible(False)

其中函数use_svg_display()的定义请参考链接:【MXNet】(九):NDArray实现一个简单的线性回归模型。

下面可视化一下训练数据集中前9个样本的图像内容和文本标签。

X, y = mnist_train[0:9]
show_fashion_mnist(X, get_fashion_mnist_labels(y))

【MXNet】(十一):Fashion-MNIST数据集_第2张图片

还是采取每次读取一个batch数据的方式,这里用Gluon data模块中的DataLoader,每次读取一个样本数为batch_size的小批量数据。同时DataLoader还允许使用多进程来加速数据读取。

另外,通过ToTensor实例将图像数据从uint8格式变换成32位浮点数格式,并除以255使得所有像素的数值均在0到1之间。同时,ToTensor实例还将图像通道从最后一维移到最前一维。通过数据集的transform_first函数,将ToTensor的变换应用在每个数据样本(图像和标签)的第一个元素,即图像之上。

batch_size  =256
transformer = gdata.vision.transforms.ToTensor()
if sys.platform.startswith('win'):
    num_workers = 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))

输出,

 这篇文章只是记录了读取数据的过程,训练的过程将在下篇文章的讲述。

你可能感兴趣的:(深度学习,MXNet)