搭建影视网站违法,网络推广怎么做的,家具网站开发环境与工具,中国产品设计网目录 5.1 读取数据集5.2 读取小批量5.3 整合所有组件 MNIST数据集是图像分类中广泛使用的数据集之一#xff0c;但是作为基准数据集过于简单#xff0c;在本小节将使用类似但更复杂的Fashion-MNIST数据集。 import torch
import torchvision
from torch.utils import data
fr… 目录 5.1 读取数据集5.2 读取小批量5.3 整合所有组件 MNIST数据集是图像分类中广泛使用的数据集之一但是作为基准数据集过于简单在本小节将使用类似但更复杂的Fashion-MNIST数据集。 import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l# 这个函数的目的是设置图形显示格式为SVGScalable Vector Graphics
# 这是一种基于矢量的图形格式可以清晰地缩放而不失真。
d2l.use_svg_display()5.1 读取数据集 可以通过框架中的内置函数将Fashion-MNIST数据集下载并读取到内存中。
# 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式
# 并除以255使得所有像素的数值均在0~1之间
trans transforms.ToTensor()
mnist_train torchvision.datasets.FashionMNIST(root../data, trainTrue, transformtrans, downloadTrue)
mnist_test torchvision.datasets.FashionMNIST(root../data, trainFalse, transformtrans,downloadTrue)Fashion-MNIST由10个类别的图像组成每个类别由训练数据集中的6000张图像和测试数据集中的1000张图像组成。因此训练集和测试集分别总共包含60000和10000张图像。测试数据集不会用于训练只用于评估模型性能。
print(len(mnist_train))
print(len(mnist_test))60000
10000每个输入图像的高度和宽度均为28像素数据集由灰度图像组成其通道数为1. 在图像处理和计算机视觉中“通道”一词常用来描述图像中颜色信息的存储方式。每个通道代表图像中一种颜色的成分不同的颜色模式会有不用的通道数。 灰度图像的通道数为1在灰度图像中每个像素只有一个强度值表示黑白之间的不同灰度级别不包含颜色信息。 print(mnist_train[0][0].shape)torch.Size([1, 28, 28])Fashion-MNIST中包含的10个类别分别为t-shirtT恤、trouser裤子、pullover套衫、dress连衣裙、coat外套、sandal凉鞋、shirt衬衫、sneaker运动鞋、bag包和ankle boot短靴。 以下函数用于在数字标签索引及其文本名称之间进行转换。
def get_fashion_mnist_labels(labels):返回Fashion-MNIST数据集的文本标签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_images(imgs, num_rows, num_cols, titlesNone, scale1.5):创建一个函数来可视化这些样本绘制图像列表目的是在一张图中显示多个图像。imgs是要显示的图像列表num_rows是创建的子图的行数num_cols是创建的子图的列数该子图没有设置标题调整子图大小的缩放因子默认为1.5figsize (num_cols * scale, num_rows * scale) # 计算整个子图的尺寸基于子图的行数和列数以及缩放因子来决定_, axes d2l.plt.subplots(num_rows, num_cols, figsizefigsize) # figsize 参数设置了整个图形的大小axes axes.flatten() # 将子图网格展平为一维数组方便后续遍历for i, (ax, img) in enumerate(zip(axes, imgs)):使用enumerate函数和zip函数来迭代两个列表axes和imgs。这个循环将同时遍历这两个列表并将它们对应的元素组合在一起然后进行处理。其中enumerate函数用于跟踪循环的当前迭代次数即索引i并返回每个元素及其索引。if torch.is_tensor(img):# 图片张量ax.imshow(img.numpy())else:# PIL图片ax.imshow(img)# 子图中隐藏坐标轴。具体来说它们分别隐藏了x轴和y轴ax.axes.get_xaxis().set_visible(False)ax.axes.get_yaxis().set_visible(False)if titles:ax.set_title(titles[i]) # 用来给每个子图设置标题plt.show()plt.savefig(class)return axesX, y next(iter(data.DataLoader(mnist_train, batch_size18))) # 用于拿到第一个小批量批量大小为18
show_images(X.reshape(18, 28, 28), 2, 9, titlesget_fashion_mnist_labels(y))5.2 读取小批量 为了使我们在读取训练集和测试集时更容易使用内置的数据迭代器而不是从开始创建。在每次迭代中数据加载器都会读取一小批量数据大小为batch_size通过内置的数据迭代器我们可以随机打乱所有样本从而无偏见地读取小批量。
batch_size 256 # 设置批量大小def get_dataloader_workers():使用4个进程来读取数据return 4train_iter data.DataLoader(mnist_train, batch_size, shuffleTrue,num_workersget_dataloader_workers())# 看一下读取训练数据所需的时间
timer d2l.Timer()
for X, y in train_iter:continue
print(f{timer.stop():.2f} sec)2.36 sec下面设置了不同的进程数所需的时间。设置的8个进程数读取小批量所需的时间比较少。
5.3 整合所有组件 现在我们定义load_data_fashion_mnist函数用于获取和读取Fashion-MNIST数据集。 这个函数返回训练集和验证集的数据迭代器。 此外这个函数还接受一个可选参数resize用来将图像大小调整为另一种形状。
def load_data_fashion_mnist(batch_size, resizeNone): #save下载Fashion-MNIST数据集然后将其加载到内存中trans [transforms.ToTensor()]if resize:trans.insert(0, transforms.Resize(resize))trans transforms.Compose(trans)mnist_train torchvision.datasets.FashionMNIST(root../data, trainTrue, transformtrans, downloadTrue)mnist_test torchvision.datasets.FashionMNIST(root../data, trainFalse, transformtrans, downloadTrue)return (data.DataLoader(mnist_train, batch_size, shuffleTrue,num_workersget_dataloader_workers()),data.DataLoader(mnist_test, batch_size, shuffleFalse,num_workersget_dataloader_workers()))我们通过指定resize参数来测试load_data_fashion_mnist函数的图像大小调整功能。
train_iter, test_iter load_data_fashion_mnist(32, resize64)
for X, y in train_iter:print(X.shape, X.dtype, y.shape, y.dtype)breaktorch.Size([32, 1, 64, 64]) torch.float32 torch.Size([32]) torch.int64小结 数据迭代器是获得更高性能的关键组件。依靠实现良好的数据迭代器利用高性能计算来避免减慢训练过程的可能性。