Как найти пересечение между двумя матричными массивами в Tensorflow 2.0 - PullRequest
1 голос
/ 19 июня 2020
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_boxes на ragged_tensor Я хочу найти пересечение буксиров set_1 и set_2. Как исправить и как подойти?

1 Ответ

0 голосов
/ 19 июня 2020

Эта операция не поддерживается для рваных тензоров, но она работает с разреженными тензорами, поэтому вы можете просто преобразовать рваный тензор в этот с помощью .to_sparse():

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

You также можно преобразовать его в обычный тензор с .to_tensor(), но это будет дороже, а также потребует от вас найти default_value, которого нет в данных.

...