Tensorflow是否具有涉及complex64张量的计算图的优化器?

时间:2016-02-23 18:59:22

标签: tensorflow

以下代码的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].

这是否意味着在尝试进行优化时,不支持复数作为中间步骤?如果没有手动编码复数运算,是否有任何变通方法?

1 个答案:

答案 0 :(得分:2)

是的,你遇到了没有复杂支持的中间操作。有关代码的一些指示,请参阅此question,您可以在其中查看为哪些设备注册了哪些数据类型。总的来说,我认为复杂的支持相当渺茫,大多数运营商都不支持它。