2016-03-01 158 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