Python 自定义丢失函数:无法将符号张量转换为numpy数组

Python 自定义丢失函数:无法将符号张量转换为numpy数组,python,tensorflow,keras,Python,Tensorflow,Keras,我正试图用Python中的TensorFlow/Keras构建一个自定义的loss函数 Y_true和Y_pred的形式如下: >>>是真的 [[[0 0 0 1], [ 0 0 1 0], [0 1 0 0]], [[0 0 1 0], [0 1 0 0], [0 1 0 0]]] >>>尤普雷德 [[[0 0 0 0], [ 0 0 1 0], [0 0 1 0]], [[0 0 1 0], [0 0 1 0], [1 0 0 0]]] def loss_iou(y_true,y_pred

我正试图用Python中的TensorFlow/Keras构建一个自定义的loss函数

Y_true和Y_pred的形式如下:

>>>是真的
[[[0 0 0 1], [ 0 0 1 0], [0 1 0 0]], [[0 0 1 0], [0 1 0 0], [0 1 0 0]]]
>>>尤普雷德
[[[0 0 0 0], [ 0 0 1 0], [0 0 1 0]], [[0 0 1 0], [0 0 1 0], [1 0 0 0]]]
def loss_iou(y_true,y_pred):
并集=np.其中((y_真+y_pred)>=1,1,0).sum()
inter=(y_true*y_pred).sum()
损失=1-内部/联合
回波损耗
是否有一个TensorFlow函数可以复制
np.where()
或者一个直接计算零和一之间的逻辑or(例如1 | 1=1和1 | 0=1)的函数,这样我就可以避免使用
where


也许还有一个内置的损失函数可以管理这种情况?

有,甚至有。还有。然而,IoU是不可微的,因此不能用作损失(直接,至少,参见例如,备选方案)。这是有道理的!实际上,当两个盒子不重叠时,IoU就没有梯度。有,甚至有。还有。然而,IoU是不可微的,因此不能用作损失(直接,至少,参见例如,备选方案)。这是有道理的!实际上,当两个框不重叠时,IoU没有梯度。