1.1 Tensor (张量)
- Tensor 可以和 numpy 的 ndarray相互转换
- Tensor有不同数据类型,有32位浮点型torch.FloatTensor、64位浮点型 torch.DoubleTensor等
1.2 Variable (变量)
- Variable 和 Tensor 本质上没有区别,不过 Variable 会被放入一个计算图中,然后进行前向传播,反向传播,自动求导。
- Variable 有三个比较重要的组成属性: data, grad 和 grad_fn通过 data可以取出 Variable 里面的 tensor 数值, grad_fn 表示的是得到这个Variable 的操作,比如通过加减还是乘除来得到的,最后 grad 是这个Variabel 的反向传播梯度.
- 构建Variable. 要注意参数 requires_grad=True/ False,这个参数表示是否对这个变量求梯度,默认的是 False ,也就是不对这个变量求梯度
- XXX.backward() 是对于标量求导,里面的参数可以不写;对于矢量求导,要传入参数声明,比如:y.backward(torch.FloatTensor( [1, 0.1 , 0. 01] )),这样得到的梯度就是它们原本的梯度分别乘上1,0.1和0.01
例子见P37
1.3 Dataset (数据集)
- torch.utils.data.Dataset是代表这一数据的抽象类,可以自定义数据类 继承和重写这个抽象类,可以通过迭代的方式来取得每一个数据。
- 通过torch.utils.data.DataLoader定义一个新的迭代器,实现取batch, shuffle或者是多线程去读取数据。
例:
torch.utils.data.DataLoader(dataset,batch_size=1,shuffle=False,sampler=None, batch_sampler
=None,num_workers=0,collate_fn=<function default_collate>, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None): 自定义数据加载器。组合了一个数据集和采样器,并提供关于数据的迭代器。
dataset (Dataset):需要加载的数据集(可以是自定义或者自带的数据集)。
batch_size:batch的大小(可选项,默认值为1)。
shuffle:是否在每个epoch中shuffle整个数据集, 默认值为False。
sampler:定义从数据中抽取样本的策略. 如果指定了, shuffle参数必须为False。
num_workers:表示读取样本的线程数,0表示只有主线程。
collate_fn:合并一个样本列表称为一个batch。
pin_memory:是否在返回数据之前将张量拷贝到CUDA。
drop_last (bool, optional) :设置是否丢弃最后一个不完整的batch,默认为False。
- 在torchvision这个包中还有更高级的有关于计算机视觉的数据读取类: ImageFolder
要求图片是下面这种存放形式:
root/dog/xxx.png
root/dog/xxy.png