2017-02-13 5 views
1

Ich habe einen Tensor von teilweise unbekannter Form und eine Maske - ein Tensor der gleichen Form mit 1.0 oder 0.0 gefüllt - und ich möchte es nur in einen SparseTensor konvertieren die Elemente, die 1.0 in der Maske entsprechen. Also, ich denke, muss ich mit etwas gehen wie:Konvertieren Tensor unbekannter Form zu einem SparseTensor in Tensorflow

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) 

Zu diesem Zeitpunkt weiß ich nicht, wie es weitergehen, da sowohl die Art und Weise, dass ich versucht in verschiedenen Fehler endete, wie folgt. Der erste:

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)' 

Der zweite:

sparse = tf.SparseTensor(indices, values, shape=dense.get_shape()) 
ValueError: Cannot convert a partially known TensorShape to a Tensor: (3, ?) 

Der dritte:

sparse = tf.SparseTensor(indices, values, shape=[BATCH, LENGTH]) 
TypeError: Expected int64, got None of type '_Message' instead. 

Jeder Hinweis? Vielen Dank!

+0

In Ihrem Fall, ist nicht die Form für SparseTensor nur [BATCH, LÄNGE]? –

+0

@ abhisheknaik96 versucht. Der dritte Fehler wurde hinzugefügt, indem ich die explizite '[BATCH, LENGTH]' Liste verwende. – petrux

+0

Ich verstehe. Darf ich fragen, wie die Variable LENGTH überhaupt gesetzt wird? –

Antwort

0

In meinem Fall Typ Casting die Form als shape=tf.cast(tf.shape(dense), tf.int64) in Ihrem ersten Ansatz behoben den genannten Fehler.

Verwandte Themen