1.tensor.clamp(a,min,max)
#将tensor类型的a中的小于min的元素设为min,大于max的元素设为max
2. DataLoader(minst, batch_size, shuffle=True, num_workers)
#shuffle=True在每个epoch中打乱数据再取batch
#每次dataloader加载数据时:dataloader一次性创建num_worker个工作进程,
#worker也是普通的工作进程
#并用batch_sampler将指定batch分配给指定worker,worker将它负责的batch加载进RAM。
#然后,dataloader从RAM中找本轮迭代要用的batch,如果找到了,就使用。如果没找到,
#就要num_worker个worker继续加载batch到内存,直到dataloader在RAM中找到目标batch。
#一般情况下都是能找到的,因为batch_sampler指定batch时当然优先指定本轮要用的batch。
3.torch.autograd.Variable
autograd//自动微分
3.1 Variable中包含三个属性:data,grad,grad_fn
data:tensor形式的原始数据,通过.data来访问原始raw data (tensor)
grad:通过调用.backward()来计算梯度, , 并将变量梯度累加到.grad
grad_fn:指向Function对象,用于反向传播的梯度计算之用
3.2 Variable的属性
每个Variable都有两个属性,requires_grad和volatile, 这两个属性都可以将子图从梯度计算中排除并可以增加运算效率
3.2.1 requires_grad:排除特定子图,不参与反向传播的计算,即不会累加记录grad
3.2.2 volatile: 推理模式, 计算图中只要有一个子图设置为True, 所有子图都会被设置不参与反向传
播计算,.backward()被禁止
3.2.3 loss.backward()和optimizer.step()
loss.backward() //将Variable中的grad中计算出
optimizer.step() //将grad按照更新规则加到data上
4.CPU和GPU的数据转移
.cuda() //把数据转移到GPU上
.data() //读取Variable中的tensor
.cpu() //把数据转移到CPU上
5.Class torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, batch_sampler=None, num_workers=0)
将Dataset和sampler组合起来,提供一个迭代器遍历给定数据集
6. torch.utils.data.Dataset()
7.nn.LeakyReLU(negative_slope=0.01, inplace=False)
#inplace设为True后,输出数据会覆盖原来的数据
8.torch.save(G.state_dict(), 'path')
8.1 torch.save()
保存模型参数,可以方便调用继续训练,保存的文件一般为后缀.pth
8.2 Module.state_dict() 和Module.parameter()
Module.state_dict() 和Module.parameter()中都存储了网络的参数
Module.state_dict().keys()返回字典的键,键为网络所有参数的名称
Module.state_dict()返回了一个包含网络参数的列表
Module.parameter() 其类型为class 'generator'
当调用Module.parameter()后返回了一个生成器(generator),可以发现Module.parameter()和Module.state_dict()存储了一样的数据,不过有区别的是,Module.parameter()中存放的Tensor的requires_grad设置为了True。