我有一个部分未知形状的张量和一个面具 - 一个充满1.0
或0.0
的相同形状的张量 - 我想将它转换为SparseTensor,仅考虑项目对应于掩码中的1.0
。所以,我想我必须采取类似的方式:
import tensorflow as tf
tf.reset_default_graph()
tf.set_random_seed(23)
BATCH = 3
LENGTH = None
dense = tf.placeholder(shape=[BATCH, LENGTH], dtype=tf.float32, name='dense')
mask = tf.placeholder(shape=[BATCH, LENGTH], dtype=tf.float32, name='mask')
indices = tf.where(tf.equal(mask, 0.0))
values = tf.gather_nd(dense, indices)
此时,我不知道如何继续,因为,我尝试的方式最终都出现了不同的错误,如下所示。第一个:
sparse = tf.SparseTensor(indices, values, shape=tf.shape(dense))
ValueError: Tensor conversion requested dtype int64 for Tensor with dtype int32: 'Tensor("Shape:0", shape=(2,), dtype=int32)'
第二个:
sparse = tf.SparseTensor(indices, values, shape=dense.get_shape())
ValueError: Cannot convert a partially known TensorShape to a Tensor: (3, ?)
第三个:
sparse = tf.SparseTensor(indices, values, shape=[BATCH, LENGTH])
TypeError: Expected int64, got None of type '_Message' instead.
任何提示?谢谢!
答案 0 :(得分:0)
在我的案例类型中,在第一种方法中将形状转换为shape=tf.cast(tf.shape(dense), tf.int64)
解决了上述错误。