问题描述
我尝试将某个参差不齐的张量的值与另一个张量的每个值分别相加,结果得到另一个参差不齐的张量的一个维度。但出现广播错误:
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 (将#修改为@)