Невозможно передать tf.RaggedTensor из ragged_rank = 2

#python #tensorflow2.x

#python #tensorflow2.x

Вопрос:

Я пытаюсь добавить значения некоторого неровного тензора к каждому значению другого тензора отдельно и получить в результате другой неровный тензор с еще одним измерением. Но я получаю сообщение об ошибке трансляции:

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

Таким образом, эта ошибка возникает вместо трансляции по неровному измерению размера 1, как указано в общем правиле трансляции tf.

Самый простой пример выглядит следующим образом:

Это работает (с ragged_rank=1 )

 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=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,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)
  

Мне приходится иметь дело с 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) отлично работает в срок трансляции. Но добавление новой оси перед неровными измерениями все еще не работает. Это ожидаемое поведение?