2016-03-01 36 views
11

Sto tentando di utilizzare: train = optimizer.minimize(loss) ma gli ottimizzatori standard non funzionano con tf.float64. Pertanto voglio troncare il mio loss da tf.float64 a solo tf.float32.TensorFlow: lancia un tensore float64 a float32

Traceback (most recent call last): 
    File "q4.py", line 85, in <module> 
    train = optimizer.minimize(loss) 
    File "/Library/Python/2.7/site-packages/tensorflow/python/training/optimizer.py", line 190, in minimize 
    colocate_gradients_with_ops=colocate_gradients_with_ops) 
    File "/Library/Python/2.7/site-packages/tensorflow/python/training/optimizer.py", line 229, in compute_gradients 
    self._assert_valid_dtypes([loss]) 
    File "/Library/Python/2.7/site-packages/tensorflow/python/training/optimizer.py", line 354, in _assert_valid_dtypes 
    dtype, t.name, [v for v in valid_dtypes])) 
ValueError: Invalid type tf.float64 for Add_1:0, expected: [tf.float32]. 
+1

Quindi vuoi convertirlo in float32 da float64? –

+0

sì. Come correzione temporanea ho convertito la matrice numpy da float64 a float32, che è da dove il mio tensore float64 stava arrivando in primo luogo e che ha risolto il mio problema, ma ci deve essere un modo di convertire in tf stessa –

risposta

25

La risposta breve è che è possibile convertire un tensore da tf.float64 al tf.float32 utilizzando il tf.cast() op:

loss = tf.cast(loss, tf.float32) 

La risposta è più che questo non risolverà tutti i problemi con gli ottimizzatori. (La mancanza di supporto per tf.float64 è un known issue.) Gli ottimizzatori richiedono che tutti gli oggetti che si sta tentando di ottimizzare debbano avere anche il tipo tf.float32.

Problemi correlati