在tensorflow/keras中是否有一种自然/简单的方法来实现使用模型输出相对于模型输入的导数的自定义损失函数?
我想到了一些大致的内容(不用介意实际的公式——这只是一个演示):
def my_loss_function(y_desired, y_model, x):
return abs(y_desired - y_model) + abs(tf.gradients(y_model,x[0]))
Run Code Online (Sandbox Code Playgroud)
这有两个问题。首先,损失函数通常无法访问输入。我的理解是,我可以通过直接引用该层来解决这个问题Input,例如作为全局变量。(当然,所有代码都只是示意性的。)
input_layer = Layer(...)
def my_loss(y1, y2):
return abs(y1-y2)*input_layer[0]
Run Code Online (Sandbox Code Playgroud)
input_layer第二个问题更严重:在执行图中似乎无法访问 , 的梯度。
这里有一个非常相似的问题,但没有解决方案:Custom loss function涉及Keras/Tensorflow中的梯度。我也曾沿着同样的路线进行过尝试,但没有运气。(对我来说,这不是正确的方法,而不是以Layer始终跟踪导数的方式包装 s ,这并不明显。)