web-dev-qa-db-fra.com

TensorFlow: transtypez un tenseur float64 en float32

J'essaie d'utiliser: train = optimizer.minimize(loss) mais les optimiseurs standard ne fonctionnent pas avec tf.float64. Par conséquent, je veux tronquer mon loss de tf.float64 à seulement tf.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].
16
Karishma Malkan

La réponse courte est que vous pouvez convertir un tenseur de tf.float64 En tf.float32 En utilisant l'opération tf.cast() :

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

La réponse la plus longue est que cela ne résoudra pas tous vos problèmes avec les optimiseurs. (Le manque de prise en charge de tf.float64 Est un problème conn .) Les optimiseurs nécessitent que tous les tf.Variable les objets que vous essayez d'optimiser doivent également avoir le type tf.float32.

42
mrry