Cha4-深度学习计算-总结


一、本章涉及到的专业名词和概念

本章没有模型相关的概念,主要是pytorch相关的函数使用方法

二、模型构造的方法

继承Module类来构造模型
使用Sequential类来构造模型
使用ModuleList类来构造模型
使用ModuleDict类来构造模型
上面四种方法的区别和联系:

  1. Sequential ModuleList ModuleDict 都继承Module类
  2. 与Sequential不同,后两者没有定义一个完整的网络,它们只是将不同的模块存放在一起,需要自己定义forward函数
  3. 虽然Sequential等类可以是模型构造更加简单,但直接继承Module类可以极大地拓展模型构造的灵活性。

三、模型参数的访问

net是定义的模型,使用net中的named_parameters函数

print(type(net.named_parameters()))
for name, param in net.named_parameters():
    print(name, param.size())

输出如下
<class 'generator'>
0.weight torch.Size([3, 4])
0.bias torch.Size([3])
2.weight torch.Size([1, 3])
2.bias torch.Size([1])

四、模型参数的初始化

1.PyTorch中nn.Module的模块参数都采取了较为合理的初始化策略
使用init模块的函数进行初始化 比如normal_函数正态分布进行参数的初始化,举例如下

for name, param in net.named_parameters():
    if 'weight' in name:
        init.normal_(param, mean=0, std=0.01)
        print(name, param.data)

五、模型参数的共享

多个层之间共享模型参数

六、自定义层

继承Module类来定义自己的层,让它可以重复使用
和定义网络的方式一样,继承nn.Module类,实现forward函数

七、模型读写

  1. 使用save 和 load函数 读写tensor
  2. 仅保存和加载模型参数(推荐)
    torch.save(model.state_dict(), 'tensor.pt')
    model = TheModelClass(*args, **kwargs)
    model.load_state_dict(torch.load('tensor.pt'))
  3. 保存和加载整个模型
    torch.save(model, 'tensor.pt')
    model = torch.load('tensor.pt')

八、GPU计算

  1. gpu相关
    torch.cuda.is_available() #查看gpu是否可用
    torch.cuda.device_count() #gpu数量
    torch.cuda.current_device() #当前gpu索引号
    torch.cuda.get_device_name(0) #根据gpu 索引号查看gpu名字 输出 'GeForce GTX 1050’
  2. gpu计算相关
    torch默认是cpu计算,使用.cuda()函数可以将tensor复制到gpu上。
    x = x.cuda(0)
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    x = torch.tensor([1, 2, 3], device=device)
    # or
    x = torch.tensor([1, 2, 3]).to(device)
  3. 模型转换
    net.cuda() 将模型从cpu转换到gpu上
    tensor必须和net在同一个device上面
  4. PyTorch可以指定用来存储和计算的设备,如使用内存的CPU或者使用显存的GPU。在默认情况下,PyTorch会将数据创建在内存,然后利用CPU来计算。
    PyTorch要求计算的所有输入数据都在内存或同一块显卡的显存上。

文章作者: jasme
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 jasme !
  目录