I want a learnable vector in ResNet to get
In init function of ResNet, I insert some code.
        weight = torch.rand((5, 1), device='cuda:0')
        self.weight = weight.requires_grad_(True)

And in forward function, I use matrix multiplication between out and self.weight
out is a result of original ResNet. (self._forward_impl)
    def forward(self, x):
        out = self._forward_impl(x)                 #(batch_size * 5, 1)

        out = out.view(-1, 5)                       #(batch_size, 5)
        out = torch.mm(out, self.weight)            #(batch_size, 5)x(5, 1)=(batch_size, 1)

        return out

When I get a loss value using Focal Loss and run loss.backward(), it doesn’t change the self.weight value and sometimes self.weight.grad is None…
print(self.weight)
print(self.weight.grad)

tensor([[0.2026],
        [0.6027],
        [0.2351],
        [0.0260],
        [0.2805]], device='cuda:0', requires_grad=True)
tensor([[-0.1866],
        [-0.2713],
        [-0.2793],
        [-0.1892],
        [-0.1899]], device='cuda:0')
tensor([[0.2026],
        [0.6027],
        [0.2351],
        [0.0260],
        [0.2805]], device='cuda:0', requires_grad=True)
tensor([[-0.2546],
        [-0.3381],
        [-0.3341],
        [-0.2421],
        [-0.2273]], device='cuda:0')

I don’t know why self.weight cannot be updated…