以下代码的tf.float32版本有效。但是,当我们尝试运行以下内容时,我们会得到一个异常(在我们尝试定义优化器的行上)。
import tensorflow as tf
tf.InteractiveSession()
complex_weights = tf.Variable(tf.complex(tf.truncated_normal([3, 4]),
tf.truncated_normal([3, 4])))
complex_target = tf.complex(tf.zeros([3,4]),
tf.zeros([3,4]))
loss = tf.reduce_mean(tf.pow(tf.real(complex_weights - complex_target), 2))
optimizer = tf.train.AdamOptimizer(1.0).minimize(loss)
以下是来自堆栈顶部的错误消息:
....../local/lib/python2.7/site-packages/tensorflow/python/training/optimizer.pyc in _assert_valid_dtypes(self, tensors)
352 raise ValueError(
353 "Invalid type %r for %s, expected: %s." % (
--> 354 dtype, t.name, [v for v in valid_dtypes]))
355
356 # --------------
ValueError: Invalid type tf.complex64 for Variable_3:0, expected: [tf.float32].
这是否意味着在尝试进行优化时,不支持复数作为中间步骤?如果没有手动编码复数运算,是否有任何变通方法?
答案 0 :(得分:2)
是的,你遇到了没有复杂支持的中间操作。有关代码的一些指示,请参阅此question,您可以在其中查看为哪些设备注册了哪些数据类型。总的来说,我认为复杂的支持相当渺茫,大多数运营商都不支持它。