2016-04-05 14 views
0

Tensorflow dizisinde sıralı bir RNN kurmaya çalışıyorum seq2seq.rnn_decoder(). Rnn_decoder() 'nin istediği girdi tensörlerin bir listesidir, bu yüzden bunu oluşturmak için bir sıra-3 tensörüne girdim ve bir liste haline getirmek için tf.unpack() kullandım. Sorun, içinde geçtiğim float32 dizisi, tf.unpack() tarafından bir float64 tensörüne dönüştürüldüğünde, modelin geri kalanıyla uyumsuz hale geldiğinde ortaya çıkar. İşte beni ikna etmeye araya kodu() tf.unpack suçlu olduğunu var:Tensorflow unpack() yönteminin dökülmesini önlemek için float64

inputDat = loader.getSequential(BATCH_SIZE) 
print(inputDat.shape) 

çıkışı (batch_size beş ise, dizi uzunluğu ondur):

(10, 5, 3) 

Sonra bu yükleyebilirsiniz bir Tensorflow oturumda veriler:

sess = tf.InteractiveSession() 
input_tensor = tf.constant(inputDat.astype('float32'), dtype=tf.float32) 
print "Input tensor type: " + str(type(input_tensor.eval()[0,0,0])) 
input_tensor = tf.unpack(inputDat) 
print "Input tensor shape: " + str(len(input_tensor)) + "x" + str(input_tensor[0].eval().shape) 
print "Input tensor type: " + str(type(input_tensor[0].eval()[0,0])) 

Çıktı:

Input tensor type: <type 'numpy.float32'> 
Input tensor shape: 10x(5, 3) 
Input tensor type: <type 'numpy.float64'> 

Neler oluyor burda? Sıralı girişlerin her biri boyunca yinelemek ve yeniden oluşturmak için bir FOR döngüsünü kullanmak, bunu yapmak için yanlış bir yol gibi görünüyor ve bir listenin her üyesini yayınlamak için Tensorflow'un içinde bir yöntem bulamıyorum.

cevap

0

For döngüsüne ihtiyacınız yoktur: tf.cast() öğesini kullanabilirsiniz.

Örnek:

input_tensor = tf.unpack(inputDat) # result is 64-bit 
input_tensor = tf.cast(input_tensor, tf.float32) # now it's 32-bit