【问题标题】:Complex convolution in tensorflow张量流中的复杂卷积
【发布时间】:2018-05-14 14:50:44
【问题描述】:

我正在尝试使用复数运行简单的卷积:

r = np.random.random([1,10,10,10])
i = np.random.random([1,10,10,10])
x = tf.complex(r,i)

conv_layer = tf.layers.conv2d(
            inputs=x,
            filters=10,
            kernel_size=[3,3],
            kernel_initializer=utils.truncated_normal_complex(),
            activation=tf.nn.sigmoid)

但是我得到了这个错误:

TypeError: Value passed to parameter 'input' has DataType complex128 not in list of allowed values: float16, float32

有谁知道如何在 Tensorflow 中实现这样的卷积?

我需要实现自定义操作,还是这里有更好的选择?

令人沮丧的是,复杂的矩阵乘法是可能的,例如以下运行良好:

def r():
    return np.random.random([10,10])
A = tf.complex(r(),r())
B = tf.complex(r(),r())
C = tf.multiply(A,B)
sess.run(C)

所以我认为卷积没有真正的理由不起作用(因为卷积本质上只是矩阵乘法)。

谢谢

【问题讨论】:

  • 您使用的是哪个版本的 Tensrflow?当我使用 TF 1.0.1 时,同样的问题存在。
  • 追踪到 github 上的一个问题:github.com/tensorflow/tensorflow/issues/2255;虽然问题已解决,但我不清楚如何在内核中使用复数。

标签: tensorflow convolution complex-numbers


【解决方案1】:

可能为时已晚,但对于任何仍然感兴趣的人来说:将卷积应用于复数值数据并不像通常的数据类型(如 float32)那么简单。有一些研究为此目的研究了不同的网络结构(例如,参见 link 的“Deep Complex U-Net”)。在pytorchtensorflow 中有这些结构的实现。

【讨论】:

    【解决方案2】:

    所有复值特征都分为笛卡尔(实数、虚数)或极坐标(模数、角度)表示。没有人真正尝试使用纯粹复杂的单一功能。我很想被证明是错的!

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      相关资源
      最近更新 更多