相关文档:

  1. torch
  2. torchvision:包含了目前流行的数据集,模型结构和常用的图片转换工具。
  3. torchvision.datasets
  4. torchvision.transforms
  5. torch.utils.data
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

#定义超参数
batch_size = 64
#数据预处理
data_tf = transforms.Compose([transforms.ToTensor(), transforms.Normalize([0.5,0.5,0.5], [0.5,0.5,0.5])])
  1. class torchvision.transforms.Compose(transforms)
    将多个transform组合起来使用
  2. class torchvision.transforms.ToTensor
    把一个取值范围是[0,255]的PIL.Image或者shape为(H,W,C)的numpy.ndarray,
    转换成形状为[C,H,W],取值范围是[0,1.0]的torch.FloadTensor
  3. class torchvision.transforms.Normalize(mean, std)
    给定均值:(R,G,B) 方差:(R,G,B),将会把Tensor正则化。
    即:Normalized_image=(image-mean)/std。
#下载训练集-MNIST手写数字训练集
train_dataset = datasets.MNIST(root="./data", train=True, transform=data_tf, download=True)
test_dataset = datasets.MNIST(root="./data", train=False, transform=data_tf)
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
  1. MNIST
    dset.MNIST(root, train=True, transform=None, target_transform=None, download=False)
    参数说明:
    - root : processed/training.pt 和 processed/test.pt 的主目录
    - train : True = 训练集, False = 测试集
    - download : True = 从互联网上下载数据集,并把数据集放在root目录下. 如果数据集之前下载过,将处理过的数据(minist.py中有相关函数)放在processed文件夹下。
  2. class torch.utils.data.DataLoader
    (dataset, batch_size=1, shuffle=False, sampler=None, num_workers=0, collate_fn=, pin_memory=False, drop_last=False)
    数据加载器。组合数据集和采样器,并在数据集上提供单进程或多进程迭代器。
    参数:
    dataset (Dataset) – 加载数据的数据集。
    batch_size (int, optional) – 每个batch加载多少个样本(默认: 1)。
    shuffle (bool, optional) – 设置为True时会在每个epoch重新打乱数据(默认: False).
    sampler (Sampler, optional) – 定义从数据集中提取样本的策略。如果指定,则忽略shuffle参数。
    num_workers (int, optional) – 用多少个子进程加载数据。0表示数据将在主进程中加载(默认: 0)
    collate_fn (callable, optional) – merges a list of samples to form a mini-batch;nlp中,经常在collate_fn指定的函数里面做padding,就是将在同一个batch中不一样长的句子padding成一样长。
    pin_memory (bool, optional) – =True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些;当计算机的内存充足的时候,可以设置pin_memory=True。当系统卡住,或者交换内存使用过多的时候,设置pin_memory=False
    drop_last (bool, optional) – 如果数据集大小不能被batch size整除,则设置为True后可删除最后一个不完整的batch。如果设为False并且数据集的大小不能被batch size整除,则最后一个batch将更小。(默认: False)
  3. 关于迭代的几个概念
    (1)iteration:表示1次迭代(也叫training step),每次迭代更新1次网络结构的参数;
    (2)batch-size:1次迭代所使用的样本量;
    (3)epoch:1个epoch表示过了1遍训练集中的所有样本。
    值得注意的是,在深度学习领域中,常用带mini-batch的随机梯度下降算法(Stochastic Gradient Descent, SGD)训练深层结构,它有一个好处就是并不需要遍历全部的样本,当数据量非常大时十分有效。此时,可根据实际问题来定义epoch,例如定义10000次迭代为1个epoch,若每次迭代的batch-size设为256,那么1个epoch相当于过了2560000个训练样本。