测试代码由此开始:
class Net(nn.Module):
def __init__(self):
super(Net,self).__init__()
self.conv1 = nn.Conv2d(3, 6, kernel_size=3, padding=1)
self.bn1 = nn.BatchNorm2d(6)
self.conv2 = nn.Conv2d(6,8,kernel_size=3,padding=1)
self.relu = nn.ReLU(inplace=True)
def forward(self,x):
x = self.conv1(1)
x = self.bn1(x)
x = self.conv2(x)
x = self.relu(x)
return x
net = Net()
pdb.set_trace()
pdb中的net 或者 print(net) -> 输出模型具体框架
net.parameters() -> 生成器generater,用循环拿到参数
print([name.shape for name in net.parameters()]) -> name是每个层的参数层数值,每个name是类型是torch.nn.parameter.Parameter,name.shape就是每层参数的大小
print([(name,para.shape) for name,para in net.named_parameters()]) -> name是每一层的名字,由下图可归纳总结conv层有weight和bias,bn层有weight和bias,para就是具体的数值
net.layer -> 输出该层相关信息
net.conv1.parameters() -> 生成器generater,用循环拿到参数
net.layer.weight / net.layer.bias -> 该层具体参数值
print([type(name) for name in net.conv1.parameters()]) -> parameter中的参数类型都是torch.nn.parameter.Parameter,name就是具体数值,如果是conv层,包括conv.weight , conv.bias
net.layer.parameters() 中的每一个都有Variable的属性 .data (数据) .volatile (推理模式) .grad_fn (记录的是tensor的运算信息,意义有利于我们使用反向传播算法,具体可参考博客leaf Variable、requires_grad、grad_fn的含义以及它们之间的关系_璇焱如柳的博客-CSDN博客) .requires_grad (自动微分)
net.layer.named_parameters() ->和net.named_parameters()一致,用循环获取生成器包含的参数名name、数值data以及形状shape
net.state_dict().items()
print([(name,parm.shape) for name,parm in net.state_dict().items()]) -> 输出的和named_parameters()一样,只是调用的方法不一样
Pytorch中查看模型内部信息,model.modules(), model.parameters()等
Pytorch中查看模型内部信息,model.modules(), model.parameters()等_LaLaLaLaXFF的博客-CSDN博客_pytorch查看模型
leaf Variable、requires_grad、grad_fn的含义以及它们之间的关系
leaf Variable、requires_grad、grad_fn的含义以及它们之间的关系_璇焱如柳的博客-CSDN博客
PyTorch中的torch.nn.Parameter() 详解
PyTorch中的torch.nn.Parameter() 详解_Adenialzz的博客-CSDN博客_torch.nn.parameter
Pytorch入坑二:autograd 及Variable
Pytorch入坑二:autograd 及Variable - 知乎
Pytorch中的register_hook(梯度操作)
Pytorch中的register_hook(梯度操作)_木盏的博客-CSDN博客_pytorch register
Pytorch中的hook的使用详解
Pytorch中的hook的使用详解 - 知乎