PyTorch(自用)

PyTorch加载数据
Dataset
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
])

train_dataset = datasets.MNIST('./data', train=True,
 download=True, transform=transform)

1.transforms.Compose():这个函数来自 torchvision.transforms 模块,用于将多个图像处理操作组合在一起。这些操作将按照传递给函数的顺序依次应用。
2.transforms.ToTensor():这个操作将 PIL 图像或 NumPy 数组转换为 PyTorch 张量(Tensor)。在这个过程中,图像的像素值将被归一化到 [0,1] 的范围。
3.transforms.Normalize((0.1307,), (0.3081,)):这个操作将对张量执行归一化。它需要两个参数:均值 (mean) 和标准差 (std)。这里,均值是 0.1307,标准差是 0.3081。归一化操作将使得输入数据的分布接近均值为 0,标准差为 1 的正态分布,这有助于神经网络的训练。
4.datasets.MNIST():这个函数来自 torchvision.datasets 模块,用于加载 MNIST 数据集。函数的参数包括:

  • /data:数据集的存储路径。这里,数据集将被下载到当前目录下的 “data” 文件夹。
  • train=True:指定加载训练数据集。如果设置为 False,将加载测试数据集。
  • download=True:如果数据集不存在,则自动下载数据集。
  • transform=transform:应用在数据集上的图像处理操作。这里将应用我们之前定义的 transform 变量。
DataLoader

Dataset(torch.utils.data.Dataset)

  • Dataset 是一个抽象类,用于表示数据集。
  • 它定义了如何获取数据集中的单个样本和相应的标签。
  • 为了使用自定义数据集,需要创建一个继承自 Dataset 的子类,并实现 getitem() 和 len() 方法。
  • Dataset可以用于表示训练、验证或测试数据集。

DataLoader(torch.utils.data.DataLoader):

  • DataLoader 是一个可迭代的数据加载器,用于从 Dataset 对象中批量、异步地获取数据。

  • 它负责将数据集划分为批次,并在训练过程中提供这些批次。

  • DataLoader 可以处理数据集的打乱、多进程数据加载和内存管理。

  • 它简化了在训练和评估神经网络时的数据处理工作。

简而言之,Dataset 是对数据集的抽象表示,用于定义如何获取数据集中的单个样本;而 DataLoader 是一个从 Dataset 中批量获取数据的工具,它负责处理数据集的加载、划分和洗牌等操作。在训练和评估神经网络时,我们通常使用 Dataset 来表示数据集,并使用 DataLoader 来简化数据的批量处理。

train_loader = DataLoader(
    dataset=train_dataset,
    batch_size=64,
    shuffle=True,
    num_workers=4,
    pin_memory=True
)

1.dataset:这是一个 torch.utils.data.Dataset 类型的对象,包含了要加载的数据。在您的上下文中,这将是 train_dataset。

2.batch_size:一个整数,指定每个批次中的数据样本数。较大的批量大小可能会加速训练,但也可能需要更多的 GPU 内存。较小的批量大小可能会减缓训练速度,但可以获得更好的泛化性能。

3.shuffle:一个布尔值,指定是否在每个训练时期开始时打乱数据。对于训练集,通常设置为 True 以改善模型的泛化能力。对于验证或测试集,通常设置为 False。

4.num_workers:一个整数,指定用于加载数据的子进程数。较大的值可以加速数据加载,但可能会增加内存使用。在某些系统上,较高的 num_workers 值可能会导致训练不稳定。通常从 0(不使用子进程)开始,逐步增加以找到适合的值。

5.pin_memory:一个布尔值,指定是否将数据加载到固定(pinned)内存中。这可以加快在 GPU 上训练时的数据传输速度。当使用 GPU 时,通常将其设置为 True。

task1_data = [data for data in train_dataset if data[1] < 5]
task2_data = [data for data in train_dataset if data[1] >= 5]

train_dataset[0] 会返回 MNIST 训练数据集中的第一个样本。返回的结果是一个包含两个元素的元组 (tuple)。第一个元素是一个形状为 (1, 28, 28) 的张量(Tensor),表示一个 28x28 像素的灰度图像,已经经过了预处理(转换为张量并归一化)。第二个元素是一个整数,表示图像对应的数字标签(0 到 9)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值