我已经看到这个问题之前已经被问过几次,但没有任何解决方案。我的问题很简单:我想实现一个损失函数,它计算预测梯度和真值之间的 MSE(最终转向更复杂的损失函数)。
我定义了以下两个函数:
def my_loss(y_true, y_pred, x):
dydx = K.gradients(y_pred, x)
return K.mean(K.square(dydx - y_true), axis=-1)
def my_loss_function(x):
def gradLoss(y_true, y_pred):
return my_loss(y_true, y_pred, x)
return gradLoss
Run Code Online (Sandbox Code Playgroud)
然后,在我的模型中,我调用
model_loss = my_loss_function(x)
model.compile(optimizer=Adam(lr=0.01),
loss=model_loss)
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
ValueError: An operation has没有任何for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.
作为参考,整个代码包含在下面。实现这种损失函数的正确方法是什么?
import tensorflow as tf
from tensorflow import keras
import numpy as np
import math, random
import …Run Code Online (Sandbox Code Playgroud)