2016-03-01 2 views
11

私は使用しようとしています:train = optimizer.minimize(loss)標準オプティマイザはtf.float64で動作しません。したがって、losstf.float64からtf.float32に切り捨てたいと思います。TensorFlow:float32テンソルを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

float32からfloat32に変換しますか? –

+0

ええ。一時的な修正として、私はfloat64からfloat32へnumpyの配列を渡しました。これは私のfloat64テンソルが最初に来ていて、それが私の問題を解決しましたが、tf自体で変換する方法がなければなりません –

答えて

25

短い答えは、あなたがtf.cast()オペアンプを使用してtf.float64からtf.float32にテンソルを変換することができるということです。

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

長い答えは、これはオプティマイザを使用してすべての問題を解決することはできませんということです。 (tf.float64のサポートの欠如は、known issueです。)オプティマイザは、最適化しようとしているtf.Variableオブジェクトのタイプもすべてtf.float32である必要があります。

関連する問題