无法广播ragged_rank = 2的tf.RaggedTensor

问题描述

我尝试将某个参差不齐的张量的值与另一个张量的每个值分别相加,结果得到另一个参差不齐的张量的一个维度。但出现广播错误

Unable to broadcast: dimension size mismatch in dimension=[2]. lengths=[3] dim_size=[1,1,1]

因此,发生这种错误,而不是像通用tf广播规则所说的那样,沿大小为1的参差不齐的维度进行广播。

最简单的示例如下:

这有效(与ragged_rank=1一起使用)

import tensorflow as tf
x = tf.ragged.constant(
        [
            [[1,2,3,4],[2,5,7,8]],[[3,12,8,9],[0,1],[4,4,9,7]],],ragged_rank=1)
y = tf.constant([10,20,30])
x = x[:,:,tf.newaxis,:]
y = y[:,tf.newaxis]
print(x+y)

但这不是(ragged_rank=2

import tensorflow as tf
x = tf.ragged.constant(
        [
            [[1,ragged_rank=2)
y = tf.constant([10,tf.newaxis]
print(x+y)

我必须处理ragged_rank=2 r.t.因为我将其作为tf.data.Dataset批处理管道的map函数的输入。 我还将感谢将ragged_rank减小为1(如果可能)的解决方法,因为内部尺寸应该是统一的(长度为4)

UPD:好吧,我设法通过重新创建张量来降低ragged_rank的级别:

def downgrade_bBox_batch_ragged_rank(x,inner_len=5):
    v = x.flat_values
    rs = x.row_splits
    return tf.RaggedTensor.from_row_splits(values=tf.reshape(v,(-1,inner_len)),row_splits=rs)

之后,在广播方面,在(flat_values)的内部尺寸之前或内部尺寸中添加新轴可以正常工作。但是在衣衫dimensions的尺寸之前添加newaxis仍然无法正常工作。这是预期的行为吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)