- print(list(net.parameters()))
- print('-' * 10)
- print(dict(net.named_parameters()))
其中.named_parameters()还能看到参数名,默认情况下会使用所在的层数+参数类型的方式,从0层开始编号。- print(list(my_net.children())) # 直接孩子
- print('-' * 10)
- print(list(my_net.modules())) # 所有孩子
net.load_state_dict(torch.load('ckpt.mdl'))
torch.save(net.state_dict(), 'ckpt.mdl')
- # 线性层的参数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,也即默认情况下认为它是反向传播优化的参数之一。如果发生梯度爆炸,可以进行梯度裁剪:
- 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()