相关疑难解决方法(0)

Keras/Tensorflow 中涉及梯度的自定义损失函数

我已经看到这个问题之前已经被问过几次,但没有任何解决方案。我的问题很简单:我想实现一个损失函数,它计算预测梯度和真值之间的 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)

keras tensorflow

7
推荐指数
1
解决办法
960
查看次数

标签 统计

keras ×1

tensorflow ×1