Onv2d(): argument 'input' (position 1) must be Tensor, not NoneType

Hi I try to create CNN network and this error pop up when i try to run it can anyone help

class gface(nn.Module):
    def __init__(self, bottleneck_setting=MobiFace_bottleneck_setting, final=False):
        super(gface, self).__init__()
        self.final = final
        self.conv1 = ConvBlock(3, 64, 3, 2, 1)

        self.dw_conv1 = ConvBlock(64, 64, 3, 1, 1, dw=True)

        self.conv3 = ConvBlock1(64, 64, 3, 1, 1, dw=True)

        self.conv4= ConvBlock5(64,128,3, 1, 1)

        self.conv5= ConvBlock5(128,256,3, 1, 1)

        self.conv6= ConvBlock5(256,512,3, 1, 1)

        self.conv7 = ConvBlock(512, 512, 1, 1, 0, linear=True)

        #self.linear1 = nn.Linear(512*7*7, 512)

        self.linear7 = ConvBlock4(512, 512, (7, 6), 1, 0, dw=True, linear=True)

        self.linear1 = ConvBlock4(512, 128, 1, 1, 0, linear=True)

        self.prelu1 = nn.PReLU()



    def forward(self, x):
        x = self.conv1(x)
        x = self.dw_conv1(x)
        x= self.conv3(x)
        x=self.conv4(x)
        x= self.conv5(x)
        x=self.conv6(x)
        x=self.conv7(x)
        #x = x.view(x.size(0), -1)
        #x = self.linear1(x)
        #if self.final is False:
         # x = self.prelu1(x)
        x = self.linear7(x)
        x = self.linear1(x)
        x = x.view(x.size(0), -1)
        return x
        
        


class ConvBlock5(nn.Module):
    def __init__(self, inp, oup, k, s, p, dw=False, linear=False):
        super(ConvBlock5, self).__init__()
        self.linear = linear
        self.conv1 = nn.Conv2d(inp, inp *2, 1, 1, 0, bias=False)
        self.batch1 = nn.BatchNorm2d(inp * 2)
        self.PRelu1=nn.PReLU(inp * 2)
        self.max= nn.MaxPool2d((2, 2), 2)


        self.dw_conv2=nn.Conv2d(inp * 2, inp * 2, k, s, p,groups=inp * 2, bias=False)
        self.batch2=nn.BatchNorm2d(inp * 2)
        self.PRelu2=nn.PReLU(inp * 2)
        self.max1=  nn.MaxPool2d((2, 2), 2)
        

        self.conv3= nn.Conv2d(inp * 2, oup, 1, 1, 0, bias=False)
        self.batch3=nn.BatchNorm2d(oup)


        

        #self.maxP = x

    def forward(self, x):
        x = self.conv1(x)
        x = self.batch1(x)
        x=self.PRelu1(x)
        x= self.max(x)
        self.dw_conv2(x)
        self.batch2(x)
        self.PRelu2(x)
        self.conv3(x)
        self.batch3(x)
       # self.max1(x)
        #self.conv4(x)
        #self.dw_conv3
       # self.batch4(x)
class ConvBlock4(nn.Module):
    def __init__(self, inp, oup, k, s, p, dw=False, linear=False):
        super(ConvBlock4, self).__init__()
        self.linear = linear
        if dw:
            self.conv = nn.Conv2d(inp, oup, k, s, p, groups=inp, bias=False)
        else:
            self.conv = nn.Conv2d(inp, oup, k, s, p, bias=False)
        self.bn = nn.BatchNorm2d(oup)
        if not linear:
            self.prelu = nn.PReLU(oup)
    def forward(self, x):
        x = self.conv(x)
        x = self.bn(x)
        if self.linear:
            return x
        else:
            return self.prelu(x)

class ConvBlock1(nn.Module):
    def __init__(self, inp, oup, k, s, p, dw=False, linear=False):
        super(ConvBlock1, self).__init__()
        self.linear = linear
        self.conv = nn.Conv2d(inp, oup, k, s, p, groups=inp, bias=False)
        self.bn = nn.BatchNorm2d(oup)
        #self.RELU=nn.ReLU(oup)
        self.prelu = nn.PReLU(oup)
        self.Avgpoo = nn.MaxPool2d((3,3), 2)

        #self.maxP = x

    def forward(self, x):
        x = self.conv(x)
        x = self.bn(x)
        x=self.prelu(x)
        x=self.Avgpoo(x)

this is when i try to run example

if __name__ == "__main__":
    input = Variable(torch.FloatTensor(2, 3, 112, 96))
    net = gface()
    print(net)
    x = net(input)
    print(x.shape)

and this is error

<ipython-input-17-d11d5e404b1f> in <module>()
      3     net = gface()
      4     print(net)
----> 5     x = net(input)
      6     print(x.shape)

6 frames
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py in _conv_forward(self, input, weight)
    414                             _pair(0), self.dilation, self.groups)
    415         return F.conv2d(input, weight, self.bias, self.stride,
--> 416                         self.padding, self.dilation, self.groups)
    417 
    418     def forward(self, input: Tensor) -> Tensor:

TypeError: conv2d(): argument 'input' (position 1) must be Tensor, not NoneType

Your modules are missing the return statement also you are not reassigning the activations in the second part of this forward method:

        x = self.conv1(x)
        x = self.batch1(x)
        x=self.PRelu1(x)
        x= self.max(x)
        self.dw_conv2(x)
        self.batch2(x)
        self.PRelu2(x)
        self.conv3(x)
        self.batch3(x)

what do you man by this part?

You have to reassign the output of a module to a variable.
Your current code doesn’t use the output:

        self.dw_conv2(x)
        self.batch2(x)
        self.PRelu2(x)
        self.conv3(x)
        self.batch3(x)

and it should be changed to:

        x = self.dw_conv2(x)
        x = self.batch2(x)
        x = self.PRelu2(x)
        x = self.conv3(x)
        x = self.batch3(x)