目录
1、【pytorch】named_parameters() 和 parameters():
【pytorch】named_parameters()和parameters()(https://blog.csdn.net/qq_36530992/article/details/102729585)
nn.Module里面关于参数有两个很重要的属性named_parameters()和parameters(),前者给出包含神经网络各个层的名字和各个层的参数的迭代器,而后者仅仅是各个层的参数的迭代器。
import torchvision.models as models
model = models.resnet18()
for name, param in model.named_parameters():
print(name)
print(param)
for param in model.parameters():
print(param)
2、Pytorch 之 requires_grad:
Pytorch之requires_grad(https://blog.csdn.net/weixin_44696221/article/details/104269981)
[Pytorch函数].requires_grad固定部分参数进行网络训练(https://blog.csdn.net/qq_41568188/article/details/107457596)
requires_grad 是 Pytorch 中神经网络层的参数的一个属性,用于说明当前层是否需要在计算中保留对应的梯度信息,如果 requires_grad 是False,则代表不计算该层网络的参数的梯度(即冻结该层参数,不进行更新),如果 requires_grad 是True,则代表计算该层网络的参数的梯度,对参数进行更新。
3、PyTorch nn.DataParallel 多GPU训练模型:
PyTorch-4 nn.DataParallel 数据并行详解(https://www.jianshu.com/p/1168ebf4c84b)
Pytorch的nn.DataParallel(https://zhuanlan.zhihu.com/p/102697821)
使用多个GPU训练模型
model = nn.DataParallel(model)
4、pytorch 创建 data.DataLoader 时,参数 pin_memory 的理解:
pytorch创建data.DataLoader时,参数pin_memory的理解(https://blog.csdn.net/tsq292978891/article/details/80454568)
pin_memory 就是锁页内存,创建 DataLoader 时,设置 pin_memory=True,则意味着生成的 Tensor 数据最开始是属于内存中的锁页内存,这样将内存的 Tensor 转义到 GPU 的显存就会更快一些,所以模型训练时的速度也会更快一些。
主机中的内存,有两种存在方式,一是锁页,二是不锁页,锁页内存存放的内容在任何情况下都不会与主机的虚拟内存进行交换(注:虚拟内存就是硬盘),而不锁页内存在主机内存不足时,数据会存放在虚拟内存中。
而显卡中的显存全部是锁页内存!
当计算机的内存充足的时候,可以设置 pin_memory=True。当系统卡住,或者交换内存使用过多的时候,设置 pin_memory=False。因为 pin_memory 与电脑硬件性能有关,pytorch开发者不能确保每一个炼丹玩家都有高端设备,因此 pin_memory 默认为 False。
5、pytorch Dataloader 中 shuffle、num_workers、sampler 等参数的含义:
pytorch Dataloader Sampler参数深入理解(https://blog.csdn.net/Chinesischguy/article/details/103198921)
shuffle:取batch是否随机取, 默认为 False,即不打乱
num_workers:参与工作的线程数,默认为 int: 0
sampler:定义取batch的方法,默认为 None
drop_last:对最后不足batchsize的数据的处理方法, 默认为 False,即不丢弃
shuffle 其实就是改变 sampler 的取值,
shuffle 为默认值 False 时,sampler 是 SequentialSampler,就是按顺序取样;shuffle 为 True 时,sampler 是 RandomSampler, 也就是按随机取样,
所以当我们 shuffle 有输入时,sampler 的值就没有意义。