【发布时间】:2021-03-11 11:56:13
【问题描述】:
在 tensorflow/keras 中是否有一种自然/简单的方法来实现自定义损失函数,该函数使用模型输出相对于模型输入的导数?
我想到了一些类似的东西(不要介意实际的公式——这只是一个演示):
def my_loss_function(y_desired, y_model, x):
return abs(y_desired - y_model) + abs(tf.gradients(y_model,x[0]))
这有两个问题。首先是损失函数通常无法访问输入。我的理解是我可以通过直接引用Input 层来解决这个问题,例如作为全局变量。 (当然,所有代码都只是示意图。)
input_layer = Layer(...)
def my_loss(y1, y2):
return abs(y1-y2)*input_layer[0]
第二个问题更为严重:在执行图中似乎无法访问关于input_layer 的梯度。
这里有一个非常相似的问题,没有解决方案:Custom loss function involving gradients in Keras/Tensorflow。我已经按照相同的思路进行了尝试,但没有运气。 (对我来说,这是正确的方法并不明显,而不是像这样包装 Layers 以便始终跟踪衍生品。)
【问题讨论】:
标签: tensorflow keras loss-function