2017-02-13 4 views
1

テンソルが部分的に未知の形状とマスク(テンソルがまたはで埋められているテンソル)を持っていて、これをSparseTensorに変換したいだけです項目はマスク内の1.0に対応します。だから、私は私のようなものに行かなければならないと思う:この時点でテンソルが未知の形状のテンソルをテンソルフローのSparseTensorに変換する

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

あなたの場合、SparseTensorの形状は[BATCH、LENGTH]だけではありませんか? –

+0

@ abhisheknaik96が試行されました。明示的な '[BATCH、LENGTH]'リストを使用して得た3番目のエラーを追加しました。 – petrux

+0

私は参照してください。とにかくLENGTH変数がどのように設定されるのか聞いてもよろしいですか? –

答えて

0

私のケースでは、最初のアプローチでshape=tf.cast(tf.shape(dense), tf.int64)という形をキャストすると、前述のエラーが解決されました。

関連する問題