首页 > 解决方案 > 我的自定义损失函数中没有为任何变量提供梯度

问题描述

我有以下自定义错误函数,指示我在 10 个变量上的接近程度:

def custom__error(y_true, y_pred):
    yt = tf.nn.softmax( y_true )
    bt = 1 + tf.argsort(yt,axis=-1,direction='DESCENDING',stable=False,name=None)
    ct = tf.keras.backend.eval(bt)
    dt = ct[:,:10]

    yp = tf.nn.softmax( y_pred )    
    bp = 1 + tf.argsort(yp,axis=-1,direction='DESCENDING',stable=False,name=None)
    cp = tf.keras.backend.eval(bp)
    dp = cp[:,:10]

    ii = tf.sets.intersection(dt, dp)
    result = len(ii.values)/y_true.shape[1]
    tf.print(10-result)
    return result

我想将它用于我的损失函数,所以我写道:

def custom_lossss(y_true, y_pred, coef1, coef2,coef3,coef4):
    yt = tf.nn.softmax( y_true )
    bt = 1 + tf.argsort(yt,axis=-1,direction='DESCENDING',stable=False,name=None)
    ct = tf.keras.backend.eval(bt)
    dt = ct[:,:10]

    yp = tf.nn.softmax( y_pred )    
    bp = 1 + tf.argsort(yp,axis=-1,direction='DESCENDING',stable=False,name=None)
    cp = tf.keras.backend.eval(bp)
    dp = cp[:,:10]

    ii = tf.sets.intersection(dt, dp)
    iivl = tf.size(ii.values)
    trdv = tf.divide(iivl,tf.size(y_true))

    return trdv

但是我得到了错误:没有为任何变量提供渐变 我看不到路径被破坏的地方!你有什么线索吗?

标签: tensorflowpathintersectloss

解决方案


推荐阅读