将张量未知形状的张量转换为张量流中的SparseTensor

时间:2017-02-13 15:48:19

标签: python tensorflow neural-network deep-learning

我有一个部分未知形状的张量和一个面具 - 一个充满1.00.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.

任何提示?谢谢!

1 个答案:

答案 0 :(得分:0)

在我的案例类型中,在第一种方法中将形状转换为shape=tf.cast(tf.shape(dense), tf.int64)解决了上述错误。