Python 如何在tensorflow或keras中使用scipy.optimize.linear_sum_赋值?

Python 如何在tensorflow或keras中使用scipy.optimize.linear_sum_赋值?,python,tensorflow,keras,Python,Tensorflow,Keras,第一次在这里发布!如果我的问题缺少什么,请告诉我,我会解决它 Facebook最近发布了DETR,一个使用变形金刚的物体检测模型!该模型是用Pytorch实现的,我试图在涉及匈牙利算法的情况下实现损失函数,但Keras和Tensorflow是Keras模型的自定义损失函数。在Facebook的原始实现中,它位于 为了使用numpy和经典python函数,我使用了: def hungarian_loss(losses): row_ind, col_ind = linear_

第一次在这里发布!如果我的问题缺少什么,请告诉我,我会解决它

Facebook最近发布了DETR,一个使用变形金刚的物体检测模型!该模型是用Pytorch实现的,我试图在涉及匈牙利算法的情况下实现损失函数,但Keras和Tensorflow是Keras模型的自定义损失函数。在Facebook的原始实现中,它位于

为了使用numpy和经典python函数,我使用了:

    def hungarian_loss(losses):
        row_ind, col_ind = linear_sum_assignment(losses)
        idx = [[i, j] for i, j in zip(row_ind, col_ind)]
        return idx

    # dist loss is a 5x5 matrix, and idx is 5x2 indexes
    idx = tf.py_function(func=hungarian_loss, inp=[dist_loss], Tout=tf.int32)
    min_val = tf.gather_nd(dist_loss, idx)
    return K.mean(min_val)
但我得到了:

tensorflow.python.framework.errors_impl.InvalidArgumentError:  Inner dimensions of output shape must match inner dimensions of updates shape. Output: [5,5] updates: [5]

是因为我想用一个不是tf张量的东西作为损失吗

这对你有用吗?见:

@tf.function
def tf_linear_sum_assignment(cost_matrix):
    return tf.numpy_function(func=linear_sum_assignment,inp=[cost_matrix],Tout=[tf.int64,tf.int64])