TensorFlow: нарисовать тензор float64 для float32
Я пытаюсь использовать: train = optimizer.minimize(loss)
, но стандартные оптимизаторы не работают с tf.float64
. Поэтому я хочу обрезать loss
tf.float64
только 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].
Ответы
Ответ 1
Короткий ответ заключается в том, что вы можете преобразовать тензор от tf.float64
в tf.float32
с помощью tf.cast()
op:
loss = tf.cast(loss, tf.float32)
Более длинный ответ заключается в том, что это не решит все ваши проблемы с оптимизаторами. (Отсутствие поддержки tf.float64
является известной проблемой.) Оптимизаторы требуют, чтобы все tf.Variable
объекты, которые вы пытаетесь оптимизировать, также должны иметь тип tf.float32
.