dtype = torch.float
device = torch.device(“cpu”)
corrupt_img = torch.tensor(corrupt_img,dtype=dtype,device=device)
corrected_im = torch.randn(1,1,corrupt_img.shape[0],corrupt_img.shape[1],device=device,dtype=dtype,requires_grad=True)
gt = torch.tensor(img)
#corrected_im = corrected_im[None,None,:,:]
corrupt_img = corrupt_img[None,None,:,:]
kernel = torch.tensor(kernel,dtype=dtype,device=device)
kernel = kernel[None,None,:,:]
lr = 1e-5
epoch = 1000
for i in range(epoch):
conv_result = F.conv2d(corrected_im,kernel,padding=10)
loss = (conv_result - corrupt_img).pow(2).sum() + torch.abs(corrected_im).sum()
if i%10==0:
    print(i,loss.item())
    
loss.backward()
with torch.no_grad():
    corrected_im = corrected_im - lr*corrected_im.grad
    corrected_im.grad.zeros_()

I am finding a solution of compressed sensing problem using pytorch.to solve a optimization
argmin_u  || kernel*u -b||^2 + ||u||_1
I expressed the formula directly using F.conv2d ,and torch.tensor,but the backward doesn’t work for the u. the corrected_im.grad is a none type obeject is this code. However ,theoretically the autograd should work on this or is there any mistake in my convolution expression?