HI, I have a toy densenet model (e.g.  only one dense block, a copy from official implementation) with TWO variables (x,y) for the denseblock. However, there is an error "    result = self.forward(*input, **kwargs) TypeError: forward() takes 2 positional arguments but 3 were given".  This model works for only one variable (x) .  Currenty, I can still not figure out the reason and was wondering if there is something wrong in the nn.Sequential(*layers) part? Thanks in advance!

class BasicBlock(nn.Module):
    def __init__(self, in_planes, out_planes):
        super(BasicBlock, self).__init__()
        self.bn1 = nn.BatchNorm2d(in_planes)
        self.relu = nn.ReLU(inplace=True)
        self.conv1 = nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=1, padding=1, bias=False)

    def forward(self, x,y):
        out1 = self.conv1(self.relu(self.bn1(x)))
        out2 = y
        return torch.cat([x, out1], 1), out2


class DenseBlock(nn.Module):
    def __init__(self, nb_layers, in_planes, growth_rate, block):
        super(DenseBlock, self).__init__()
        self.layer = self._make_layer(block, in_planes, growth_rate, nb_layers)
    def _make_layer(self, block, in_planes, growth_rate, nb_layers):
        layers = []
        for i in range(nb_layers):
            layers.append(block(in_planes+i*growth_rate, growth_rate))
        return nn.Sequential(*layers)
        # return block(in_planes+growth_rate, growth_rate)  #It works by replacing the whole "for" loop  with this line, but we can only obtain one block rather than nb_layes blocks. 
    def forward(self, x,y):
        return self.layer(x,y)

class DenseNet3(nn.Module):
    def __init__(self, n=2, growth_rate=8):
        super(DenseNet3, self).__init__()
        in_planes = growth_rate
        block = BasicBlock

        # 1st conv before any dense block
        self.conv1 = nn.Conv2d(3, in_planes, kernel_size=5, stride=1,
                               padding=0, bias=False)
        # 1st block
        self.block1 = DenseBlock(n, in_planes, growth_rate, block)
        in_planes = int(in_planes+n*growth_rate)

        ####
        # 2st block ...
        # 3st block ...

    def forward(self, x,y):
        x = self.conv1(x)
        out1, out2 = self.block1(x,y)
        # 2nd, 3rd blocks ...
        return  out1, out2

Error:   File “/home/…/densenet.py”, line 33, in forward
return self.layer(x,y)  (in class DenseBlock)
File “/home/…/miniconda3/envs/Detector/lib/python3.6/site-packages/torch/nn/modules/module.py”, line 489, in call
result = self.forward(*input, **kwargs)
TypeError: forward() takes 2 positional arguments but 3 were given