pytorch基础学习(5)
创始人
2024-03-15 03:24:28
0
  1. 最常见的是nn.Sequential容器,它以若若干继承了nn.Module类的对象为参数进行构造,将它们按传入顺序组合起来,在forward时会按这个顺序依次调用,当然要保证前一模块的输出能适合于下一模块的输入才行。
  2. 使用nn.Module类创建的模块,可以用.parameters()或者.named_parameters()返回 其内的所有参数的迭代器
    print(list(net.parameters()))
    print('-' * 10)
    print(dict(net.named_parameters()))
    其中.named_parameters()还能看到参数名,默认情况下会使用所在的层数+参数类型的方式,从0层开始编号。
  3. 模块之间通过嵌套组合会形成树形结构,使用.childern()可以获取其直接孩子结点,使用.modules()可以获取其所有子结点:
    print(list(my_net.children()))  # 直接孩子
    print('-' * 10)
    print(list(my_net.modules()))  # 所有孩子
  4. 设备切换:
    1. 使用.to(device)可以在具体的CPU/GPU上切换,这会将其所有子模块也一起转移过去运行。
    2. 注意,模块的.to(device)是原地操作并返回自己的引用,而Tensor的.to(device)不会在当前Tensor上操作,返回的才是在目标设备上对应创建的Tensor。
  5. 检查点:
    1. 在训练前可以检查是否有检查点文件,使用torch.load()载入检查点文件,然后传入net.load_state_dict()中网络模型设置参数:
      net.load_state_dict(torch.load('ckpt.mdl'))
    2. 在训练过程中,每隔一定的迭代次数可以保存一下检查点,将当前网络模型的状态传进去:
      torch.save(net.state_dict(), 'ckpt.mdl')
  6. 为网络使用.train()方法切换到训练模式,使用.eval()方法切换到测试模式。
  7. 如果在继承nn.Module类来实现模块时,出现需要操作Tensor的部分,那么应当使用nn.Parameters将其包装起来,而不应直接使用Tensor。如果直接使用Tensor,那么没法用.parameters()获取到所有参数,也就没法直接传给优化器去记录要优化的包括这些参数了:
    # 线性层的参数w和b,对w而言输出维度放在前面:计算的时候:x = x @ self.w.t() + self.b
    self.w = nn.Parameter(torch.randn(outp, inp))
    self.b = nn.Parameter(torch.randn(outp))
    使用nn.Parameters包装Tensor时,自动设置了requires_grad=True,也即默认情况下认为它是反向传播优化的参数之一。
  8. 如果发生梯度爆炸,可以进行梯度裁剪:

    model.zero_grad()
    loss.backward()
    for p in model.parameters():# print(p.grad.norm())  # 查看参数p的梯度torch.nn.utils.clip_grad_norm_(p, 10)  # 将梯度裁剪到小于10
    optimizer.step()

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...