在 Tensorflow 中设置交集
Set intersection in Tensorflow
我想检查一组给定值中的任何一个是否包含在稀疏张量中。稀疏张量称为 labels
,只有一个维度包含一个 id 列表。
最后这似乎是一个简单的集合交集问题,所以我试了一下。
sparse_ids = load_ids_as_sparse_tensor()
wanted_ids = tf.constant([34, 56, 12])
intersection = tf.sets.set_intersection(
wanted_ids,
tf.cast(sparse_ids.values, tf.int32)
)
contains_any_wanted_ids = tf.not_equal(tf.size(intersection), 0)
但是,我收到此错误:
ValueError: Shape must be at least rank 2 but is rank 1 for 'DenseToDenseSetOperation' (op: 'DenseToDenseSetOperation') with input shapes: [3], [?].
有什么想法吗?
以下代码有效。但是,我不确定结果是否是你想要的。
import tensorflow as tf
a = tf.constant([34, 56, 12])
b = tf.constant([56])
intersection = tf.sets.set_intersection(a[None,:],b[None,:])
sess=tf.Session()
sess.run(intersection)
输出:
SparseTensorValue(indices=array([[0, 0]], dtype=int64),
values=array([56]), dense_shape=array([1, 1], dtype=int64))
我想检查一组给定值中的任何一个是否包含在稀疏张量中。稀疏张量称为 labels
,只有一个维度包含一个 id 列表。
最后这似乎是一个简单的集合交集问题,所以我试了一下。
sparse_ids = load_ids_as_sparse_tensor()
wanted_ids = tf.constant([34, 56, 12])
intersection = tf.sets.set_intersection(
wanted_ids,
tf.cast(sparse_ids.values, tf.int32)
)
contains_any_wanted_ids = tf.not_equal(tf.size(intersection), 0)
但是,我收到此错误:
ValueError: Shape must be at least rank 2 but is rank 1 for 'DenseToDenseSetOperation' (op: 'DenseToDenseSetOperation') with input shapes: [3], [?].
有什么想法吗?
以下代码有效。但是,我不确定结果是否是你想要的。
import tensorflow as tf
a = tf.constant([34, 56, 12])
b = tf.constant([56])
intersection = tf.sets.set_intersection(a[None,:],b[None,:])
sess=tf.Session()
sess.run(intersection)
输出:
SparseTensorValue(indices=array([[0, 0]], dtype=int64), values=array([56]), dense_shape=array([1, 1], dtype=int64))