pytorch 网络结构的命名问题
1.一般情况下是根据我们创建的类的self.XXX命名的。如:
# Modules
self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3,
bias=False)
此时我们的网络层就会有一个: conv1.weight的命名
2.当我们使用了for循环来创建网络层时,torch的命名会按照index来命名。如:
self.layer1 = self._make_layer(block, 64, layers[0], stride=strides[0], dilation=dilations[0], BatchNorm=BatchNorm)
def _make_layer(self, block, planes, blocks, stride=1, dilation=1, BatchNorm=None)
layers = []
for i in range(1, blocks):
# if i == blocks-1:
# print(i)
layers.append(block(self.inplanes, planes, self.conv_counter,dilation=dilation, BatchNorm=BatchNorm,rate=rate,location=location))
此时的网络名会出现:
layer1.0.conv1.weight
layer1.0.conv2.weight
layer1.0.conv3.weight
3.当我们使用 nn.Sequential 来创建一个块的时候,块里面的层次命名也是使用index来的。如:
self.downsample = nn.Sequential(
nn.Conv2d(self.inplanes, planes * block.expansion,
kernel_size=1, stride=stride, bias=False),
BatchNorm(planes * block.expansion),
)
此时的命名就会出现:
downsample.0.weight #这里的0 指的是上面代码 Sequential中的nn.Conv2d
downsample.1.weight #这里的1 指的是上面代码 Sequential中的BatchNorm