Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tensorflow中的自定义成本函数_Python_Tensorflow - Fatal编程技术网

Python tensorflow中的自定义成本函数

Python tensorflow中的自定义成本函数,python,tensorflow,Python,Tensorflow,我想在tensorflow中自定义成本函数。 但是,我想访问张量y\u pred的每个元素。 为此,我将y\u pred转换为numpy数组。 在我计算之后,我转换回张量 但是当我运行代码时,它有一个错误 ValueError:没有为任何变量提供渐变:['dense/kernel:0', “密集/偏差:0”、“密集/内核:0”、“密集/偏差:0”, “稠密_2/内核:0”、“稠密_2/偏差:0”、“稠密_3/内核:0”, '密集_3/偏差:0'] 这是我的密码 [这里y_true和y_pred的

我想在tensorflow中自定义成本函数。 但是,我想访问张量
y\u pred
的每个元素。 为此,我将
y\u pred
转换为numpy数组。 在我计算之后,我转换回张量 但是当我运行代码时,它有一个错误

ValueError:没有为任何变量提供渐变:['dense/kernel:0', “密集/偏差:0”、“密集/内核:0”、“密集/偏差:0”, “稠密_2/内核:0”、“稠密_2/偏差:0”、“稠密_3/内核:0”, '密集_3/偏差:0']

这是我的密码 [这里y_true和y_pred的形状为(,8)]


非常感谢您。

您给出了一个错误和一些代码,但没有说明问题。之所以没有渐变,是因为您在损失函数中将张量转换为numpy数组,从而打破了张量流依赖关系,请不要这样做@例如先生是100%正确的。在tf.variable和cost tensor之间没有由于numpy转换而试图最小化的路径。您给出了一个错误和一些代码,但没有说明问题。之所以没有梯度,是因为您将损耗函数中的张量转换为numpy数组,从而打破了张量流依赖关系,请不要这样做@例如先生是100%正确的。由于numpy转换,tf.variable和cost tensor之间没有要最小化的路径
def custom_loss_function(y_true, y_pred):
    y_pred_arr = y_pred.numpy()
    for i in range(len(y_pred_arr)):
        a = y_pred.numpy()[i,0]
        b = y_pred.numpy()[i,1]
        c = y_pred.numpy()[i,2]
        d = y_pred.numpy()[i,3]
        e = y_pred.numpy()[i,4]
        f = y_pred.numpy()[i,5]
        g = y_pred.numpy()[i,6]
        h = y_pred.numpy()[i,7]
  
        T = tf.Variable(np.zeros(shape=[8]))
        MSM = a**2+b**2+c**2+d**2+e**2+f**2+g**2+h**2
        T = T[0].assign((a**2+b**2+c**2+d**2)/MSM)
        T = T[1].assign(0.0)
        T = T[2].assign((a*e+b*f+c*g+d*h)/MSM)
        T = T[3].assign((-a*f+b*e-c*h+d*g)/MSM)
        T = T[4].assign((e*a+f*b+g*c+h*d)/MSM)
        T = T[5].assign((-e*b+f*a-g*d+h*c)/MSM)
        T = T[6].assign((e**2+f**2+g**2+h**2)/MSM)
        T = T[7].assign(0.0)

        for j in range (0,7):
            y_pred_arr[i,j] = T[j]

    y_pred_tensor = tf.convert_to_tensor(y_pred_arr,dtype=tf.float32)
    return tf.keras.losses.mean_squared_error(y_true, y_pred_tensor)