I’m not sure how plane_conv is defined, but this dummy example works:
class MyModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.weights = torch.nn.Parameter(torch.randn(1, 1, 3, 3))

    def forward(self, x):
        x = F.conv2d(x, self.weights)
        return x

    
model = MyModel()
w0 = model.weights.clone()

optimizer = torch.optim.SGD(model.parameters(), lr=10.)

x = torch.randn(1, 1, 5, 5)
out = model(x)
out.mean().backward()

optimizer.step()

w1 = model.weights.clone()
print(w1 - w0)

(I’ve removed all undefined methods from your model and just used the defined parameter)