2016-03-01 160 views
11

我試圖使用:train = optimizer.minimize(loss),但標準優化器不適用於tf.float64。因此我想將我的losstf.float64截斷爲僅tf.float32TensorFlow:將float64張量施加到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

所以你想從float64轉換成float32嗎? –

+0

是的。作爲一個臨時解決方案,我將浮點數組從float64移動到了float32,這是我的float64張量來自哪裏並且解決了我的問題,但是必須有一種在tf本身中進行轉換的方法 –

回答

25

簡短的回答是,你可以將張從tf.float64使用tf.cast()運算轉換爲tf.float32

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

較長的答案是,這不會解決你所有的問題與優化。 (缺少tf.float64的支持是known issue。)優化程序要求您要優化的所有對象都必須具有類型tf.float32