Tensorflow 2 ValueError:没有为任何变量提供梯度:自定义损失函数

时间:2021-03-05 18:37:12

标签: python tensorflow tensorflow2.0 loss-function

所以在我的 Tensorflow2 模型中,我收到错误:“ValueError:没有为任何变量提供梯度”

根据:TensorFlow: 'ValueError: No gradients provided for any variable' 问题是我从 tf.tensors 中提取值,操作它们,然后返回一个损失值。我需要使用 tf.tensor 操作来做所有事情。

问题是,我不知道如何用张量运算做我想做的事情。我想要做的是计算 y_pred 相对于由以 y_true 为中心的多元高斯定义的度量的概率,并具有一组协方差矩阵。问题是,这需要针对 y_pred 中的每一行相对于 y_true 中的对应行发生。

我如何通过张量运算来做到这一点?抱歉,我对 TF2 很陌生。

代码如下:

python

import numpy
import tensorflow as tf
import scipy.stats as stats

def probability_loss(y_true, y_pred):
    cov = 0.005*numpy.eye(2)
    loss = 0    
    for v, val in enumerate(y_true.numpy()):
        dist = stats.multivariate_normal(mean=val, cov=cov)
        loss += -numpy.log(dist.pdf(y_pred[v]))
    tf_loss = tf.convert_to_tensor(loss, dtype=numpy.float32)
    return tf_loss

0 个答案:

没有答案