文章目录
查看Pytorch网络的各层输出(feature map)、权重(weight)、偏置(bias)
在使用Pytorch的时候,我总是在想我怎么看每一层的输出、权重、偏置,下面记录我自己的方法,应该是方式多样,但是我现在的水平没办法评价好坏,如果有更好的办法欢迎留言告知!!!
weight and bias
# Method 1 查看Parameters的方式多样化,直接访问即可
model = alexnet(pretrained=True).to(device)
conv1_weight = model.features[0].weight
# Method 2
# 这种方式还适合你想自己参考一个预训练模型写一个网络,各层的参数不变,但网络结构上表述有所不同
# 这样你就可以把param迭代出来,赋给你的网络对应层,避免直接load不能匹配的问题!
for layer,param in model.state_dict().items(): # param is weight or bias(Tensor)
print layer,param
feature map
由于pytorch是动态网络,不存储计算数据,查看各层输出的特征图并不是很方便!分下面两种情况讨论:
- 你想查看的层是独立的,那么你在forward时用变量接收并返回即可!!!
class Net(nn.Module):
def __init__(self):
self.conv1 = nn.Conv2d(1, 1, 3)
self.conv2 = nn.Conv2d(1, 1, 3)
self.conv3 = nn.Conv2d(1, 1, 3)
def forward(self, x):
out1 = F.relu(self.conv1(x))
out2 = F.relu(self.conv2(out1))
out3 = F.relu(self.conv3(out2)