Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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 无法广播ragged_秩=2的tf.RaggedSensor_Python_Tensorflow2.x - Fatal编程技术网

Python 无法广播ragged_秩=2的tf.RaggedSensor

Python 无法广播ragged_秩=2的tf.RaggedSensor,python,tensorflow2.x,Python,Tensorflow2.x,我试着将一些参差张量的值分别与另一个张量的每个值相加,得到另一个具有一个维度的参差张量。但我发现了一个广播错误: Unable to broadcast: dimension size mismatch in dimension=[2]. lengths=[3] dim_size=[1, 1, 1, 1, 1] 因此,这个错误发生了,而不是像普通tf广播规则所说的那样,沿着大小为1的参差不齐维度进行广播 最简单的例子如下: 这是有效的(在参差不齐的情况下=1) 但事实并非如此(如果参差不齐_r

我试着将一些参差张量的值分别与另一个张量的每个值相加,得到另一个具有一个维度的参差张量。但我发现了一个广播错误:

Unable to broadcast: dimension size mismatch in dimension=[2]. lengths=[3] dim_size=[1, 1, 1, 1, 1]
因此,这个错误发生了,而不是像普通tf广播规则所说的那样,沿着大小为1的参差不齐维度进行广播

最简单的例子如下:

这是有效的(在
参差不齐的情况下=1

但事实并非如此(如果
参差不齐_rank=2

我必须处理
ragged_rank=2
r.t.,因为我将其作为
tf.data.Dataset
批处理管道的映射函数的输入。 我还希望有一个将
ragged_rank
减少到1的解决方案(如果可能的话),因为内部尺寸应该是均匀的(长度为4)

UPD:好的,我通过重新创建一个张量,成功地降低了参差不齐的_等级,如下所示:

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)
在此之后,就广播而言,在内部维度(平面_值)之前或中添加新轴效果良好。但在参差不齐的维度之前添加newaxis仍然不起作用。这是一种预期的行为吗

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