本文基于torch实现,用于个人复习并记录学习历程,适用于初学者
目录
trans = [transforms.ToTensor()]
模块导入与数据加载
import torch
from IPython import display
import torchvision
from torch.utils import data
from torchvision import transforms
import matplotlib.pyplot as plt
def load_data_fashion_mnist(batch_size, resize=None): #@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", train=True, transform=trans, download=0)
mnist_test = torchvision.datasets.FashionMNIST(
root="../data", train=False, transform=trans, download=0)
return (data.DataLoader(mnist_train, batch_size, shuffle=True,
num_workers=get_dataloader_workers()),
data.DataLoader(mnist_test, batch_size, shuffle=False,
num_workers=get_dataloader_workers()))
def get_dataloader_workers(): #@save
"""使用4个进程来读取数据"""
return 4
batch_size = 256
train_iter, test_iter = load_data_fashion_mnist(batch_size)
大体介绍:
Fashion-MNIST是一个常用的图像数据集,用于替代传统MNIST手写数字数据集,它包含了10个类别的70,000个灰度图像,每个类别有7,000个图像。这些类别包括T恤、裤子、鞋子等时尚物品。这个数据集通常用于训练和测试图像识别模型。
函数load_data_fashion_mnist
接受两个参数:
batch_size
:定义了每次迭代中要加载的样本数量。resize
:可选参数,如果提供,将图片大小调整到指定的像素尺寸。
函数的主要步骤如下:
- 定义了一个转换列表
trans
,其中包含transforms.ToTensor()
,它将图片转换为PyTorch张量。 - 如果提供了
resize
参数,则将transforms.Resize(resize)
添加到转换列表的开头,以调整图片大小。 - 使用
transforms.Compose(trans)
将转换列表组合成一个转换序列。 - 然后,使用
torchvision.datasets.FashionMNIST
下载并加载Fashion-MNIST数据集,其中root
参数指定了数据存储的路径,train
参数指定是加载训练集还是测试集,transform
参数指定了要应用的转换,download=0
表示如果数据集已经下载则不重新下载。 - 最后,使用
data.DataLoader
创建两个数据加载器,一个用于训练集,一个用于测试集。batch_size
定义了每个批次的样本数量,shuffle=True
表示在训练时打乱数据,num_workers
通过get_dataloader_workers()
函数用来设置多线程加载数据的线程数。
难点介绍:
trans = [transforms.ToTensor()]
这行代码的作用是创建一个转换操作列表,其中包含一个将图像转换为PyTorch张量的转换操作。具体来说:
transforms
是 PyTorch 的一个模块,它提供了许多用于图像预处理的转换操作。transforms.ToTensor()
是一个转换操作,它将PIL图像或Numpy数组转换为torch.FloatTensor
类型,其数值范围从0到1。这个转换对于深度学习模型来说很重要,因为它们通常期望输入数据是浮点数类型,并且像素值在0到1之间。
当你将图像数据集加载到内存中时,原始图像可能是PIL图像或其他格式。使用transforms.ToTensor()
可以将这些图像转换为适合神经网络处理的格式。这个转换操作通常用于数据加载和预处理的流程中,以确保数据的一致性和模型的兼容性。
transforms.Compose()
`transforms.Compose()` 是 PyTorch 库 `torchvision.transforms` 模块中的一个函数,它用于将多个图像转换操作组合成一个单一的转换函数。这样做的好处是可以将多个预处理步骤封装在一起,使得对图像数据的批量处理更加方便和高效。
当你使用 `transforms.Compose()` 时,你需要传入一个转换操作的列表,其中每个元素都是一个转换函数。这个列表中的每个函数都将按照它们在列表中出现的顺序依次应用于图像。
这里是 `transforms.Compose()` 的基本用法:
from torchvision import transforms
# 定义转换操作列表
transform_list = [
transforms.Resize((28, 28)), # 将图像大小调整为28x28像素
transforms.ToTensor(), # 将图像转换为张量
transforms.Normalize((0.5,), (0.5,)) # 将图像数据标准化到[-1, 1]区间
]
# 使用Compose函数组合转换操作
transform = transforms.Compose(transform_list)
在这个例子中,`transform` 是一个函数,当你对图像使用这个函数时,图像首先会被调整大小,然后转换为张量,最后进行标准化处理。
`transforms.Compose()` 常用于数据加载和预处理的流程中,尤其是在训练深度学习模型时,你需要对输入数据进行一系列预处理以适应模型的输入要求。通过使用 `transforms.Compose()`,你可以轻松地定义一个统一的预处理流程,并在整个数据集中应用它。
绝对路径和相对路径
在计算机中,文件路径可以是绝对路径或相对路径:
1. 绝对路径(Absolute Path):
- 绝对路径是从文件系统的根目录开始的完整路径。
- 它指定了从根目录到目标文件或目录的确切位置。
- 绝对路径在所有情况下都是唯一的,不依赖于当前工作目录。
- 例如,在Windows系统中,绝对路径可能看起来像这样:C:\Users\Username\Documents\file.txt。
- 在类Unix系统(如Linux或macOS)中,绝对路径可能看起来像这样:/home/username/Documents/file.txt。
2. 相对路径(Relative Path):
- 相对路径是相对于当前工作目录的路径。
- 它不从根目录开始,而是从当前位置开始,指向目标文件或目录。
- 相对路径可以包含一些特殊符号,如`.`(表示当前目录)和`..`(表示上一级目录)。
- 例如,如果当前工作目录是 `/home/username/Documents`,那么相对路径 `../Pictures/image.png` 将指向 `/home/username/Pictures/image.png`。
- 相对路径的优点是它们更灵活,可以在不同的目录中使用相同的路径表达式,而不需要修改路径本身。
在你提供的代码示例中,`root="../data"` 使用了相对路径。这里的 `..` 表示上一级目录,所以 `../data` 指的是当前脚本或程序所在目录的上一级目录中的 `data` 文件夹。如果当前脚本位于 `/home/username/project`,那么 `../data` 将指向 `/home/username/data`。
使用相对路径的好处是代码更加灵活和可移植,因为它们不依赖于特定的文件系统结构。然而,相对路径可能会导致一些混淆,特别是当不清楚当前工作目录是什么时。绝对路径则提供了一个明确的位置,但可能会因为依赖于特定的文件系统结构而不够灵活。