1
return tf.sets.intersection(set_1,set_2)

我收到了错误消息

    return ops.EagerTensor(value, ctx.device_name, dtype)
ValueError: TypeError: object of type 'RaggedTensor' has no len()

我的 set_1 和 set_2 的类型如下

> set_1-> <tf.RaggedTensor [[0.1733333319425583, 0.2866666615009308,
> 1.5666667222976685, 1.3966666460037231], [0.5233333110809326, 0.1433333307504654, 0.9599999785423279, 0.5533333420753479]]>
> 
> set_2-> tf.Tensor( [[-0.03684211 -0.03684211  0.06315789  0.06315789] 
> [-0.05755278 -0.05755278  0.08386857  0.08386857]  [-0.05755278
> -0.02219744  0.08386857  0.04851323]  ...  [ 0.          0.          1.          1.        ]  [-0.1363961   0.18180195  1.1363961   0.81819805]  [ 0.18180195 -0.1363961   0.81819805  1.1363961 ]], shape=(8732, 4), dtype=float64) set1-> <tf.RaggedTensor
> [[0.1733333319425583, 0.2866666615009308, 1.5666667222976685,
> 1.3966666460037231], [0.5233333110809326, 0.1433333307504654, 0.9599999785423279, 0.5533333420753479]]> set_2-> tf.Tensor( [[-0.03684211 -0.03684211  0.06315789  0.06315789]  [-0.05755278
> -0.05755278  0.08386857  0.08386857]  [-0.05755278 -0.02219744  0.08386857  0.04851323]  ...  [ 0.          0.          1.          1.        ]  [-0.1363961   0.18180195  1.1363961   0.81819805]  [ 0.18180195
> -0.1363961   0.81819805  1.1363961 ]], shape=(8732, 4), dtype=float64)

set_1 是参差不齐的张量,而 set_2 是张量,
因为

new_boxes = tf.ragged.constant(new_boxes)
dataset = tf.data.Dataset.from_tensor_slices((images,new_boxes,labels))

如果我没有更改new_boxesragged_tensor
我想找到两个 set_1 和 set_2 的交集,这将不起作用。
我应该如何解决它以及如何处理它?

4

1 回答 1

0

不规则张量不支持该操作,但它适用于稀疏张量,因此您可以将不规则张量转换为.to_sparse()

return tf.sets.intersection(set_1.to_sparse(), set_2)

您也可以使用 将其转换为常规张量.to_tensor(),但这会更昂贵,并且还需要您找到default_value数据中未出现的 a。

于 2020-06-19T09:38:16.477 回答