为了编写图像矩阵的拉普拉斯,需要用到散度算子 一开始开始复制别人的代码 def divergence(x, y): divx = x - np.roll(x, 1, axis=1) divy = y - np.roll(y, 1, axis=-1) div = divx + divy return div 报错: 因为不支持Tensor和list类型的除法操作
# loss1 = miu2 * mse(u1, f1 - dive + b2) # 因为不支持Tensor和list类型的除法操作 # loss1 = torch.optim.Adam(f1 - dive + b2, lr=0.1) # l2正则化
报错: 因为不支持Tensor和Add类型的除法操作
用最原始的方法写拉普拉斯了
zxx, zxy = getGrd(zx) zyx, zyy = getGrd(zy) dive = zxx + zyy
。。。。。。。
虽然有了其他的新错误,继续前进
报错:
dive1 = zxx + zyy
RuntimeError: The size of tensor a (320) must match the size of tensor b (318) at non-singleton dimension 3
可能是做了两次梯度,维度不一致了,选择给梯度的边界补零:
def getGrd(data_in): # [m, n] = data_in.shape # data_in1 = torch.Tensor(np.pad(data_in, ((0, 0), (0, 0), (0, 0), (0, 0)), 'edge')) grd_x = data_in.clone() grd_y = data_in.clone() grd_x = grd_x[:, :, 0:-1, :] - data_in[:, :, 1:, :] # grd_x = torch.Tensor(np.pad(grd_x, ((0, 0), (0, 0), (0, 1), (0, 0)), "constant")) # 补零 grd_y = grd_y[:, :, :, 0:-1] - data_in[:, :, :, 1:] # grd_y = torch.Tensor(np.pad(grd_y, ((0, 0), (0, 0), (0, 0), (0, 1)), "constant")) # 补零 grd = (grd_x, grd_y) return grd