簡體   English   中英

關於理解Pytorch.named_modules()循環的問題

[英]Question about understanding of Pytorch .named_modules() loops

我在這里指的是這個實現:

https://github.com/hszhao/semseg/blob/master/model/pspnet.py

在第 49-58 行,作者寫道:

for n, m in self.layer3.named_modules():
    if 'conv2' in n:
        m.dilation, m.padding, m.stride = (2, 2), (2, 2), (1, 1)
    elif 'downsample.0' in n:
        m.stride = (1, 1)

for n, m in self.layer4.named_modules():
    if 'conv2' in n:
        m.dilation, m.padding, m.stride = (4, 4), (4, 4), (1, 1)
    elif 'downsample.0' in n:
        m.stride = (1, 1)

這些循環中究竟發生了什么?

我的理解是,作者創建了一個 resnet model (他的 resnet.py 在這里https://github.com/hszhao/semseg/blob/master/model/resnet.py )然后調用不同的層,他在他的 resnet class 中實現以在下面轉發它們。

resnet.py 中的 layer3 和 layer4 是通過調用 function def _make_layer(self, block, planes, blocks, stride=1):制作的,所以我假設當在循環中使用.named_modules()時,它正在循環這個def _make_layer function 中的模塊,是嗎? 如果是這樣,elif 部分會發生什么? 沒有稱為downsample.0的模塊? (唯一的模塊是 nn.Conv2d 和 nn.BatchNorm2d )

下面是在那里使用的 resnet 的示例。

model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs)

在 Resnet class 中,它調用 super 是因為這個,它有self.downsample如果不是 none:

if self.downsample is not None:
        residual = self.downsample(x)

它可能有順序或其他層。

class Bottleneck(nn.Module):
    expansion = 4

    def __init__(self, inplanes, planes, stride=1, downsample=None):
        super(Bottleneck, self).__init__()
        self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False)
        self.bn1 = nn.BatchNorm2d(planes)
        self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride,
                               padding=1, bias=False)
        self.bn2 = nn.BatchNorm2d(planes)
        self.conv3 = nn.Conv2d(planes, planes * self.expansion, kernel_size=1, bias=False)
        self.bn3 = nn.BatchNorm2d(planes * self.expansion)
        self.relu = nn.ReLU(inplace=True)
        self.downsample = downsample
        self.stride = stride

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM