我正在建立自定义损失,该损失考虑了图像的梯度和拉普拉斯算子
def custom_loss_mse_GradLap(X_true, X_pred):
X_pred_GradLap = np.asarray(model_CompGradientLaplacian(X_pred))
X_true_GradLap = np.asarray(model_CompGradientLaplacian(X_true))
#define the parametrs
alpha = np.array([1/3,1/3,1/3])
# mse for field
loss1 = K.mean(K.square(X_pred-X_true), axis=-1)
# mse for gradient
loss2 = K.mean(K.square(X_pred_GradLap[0]-X_true_GradLap[0]), axis=-1)
# mse for laplacian
loss3 = K.mean(K.square(X_pred_GradLap[1]-X_true_GradLap[1]),axis=-1)
return alpha[0] * loss1 + alpha[1] * loss2 + alpha[2] * loss3
但是我在计算梯度和拉普拉西恩时遇到了问题。 我尝试了以下操作,但会引发错误
input=tf.placeholder(shape=(64,64),dtype=tf.float32)
def calc_grad(x):
return np.gradient(x)
grad = Lambda(lambda x:tf.py_func(calc_grad,[x],tf.float32))
model_grad = Model(input_data,grad)