张量流中的复卷积

时间:2017-11-30 15:54:34

标签: tensorflow convolution complex-numbers

我正在尝试运行简单的卷积,但数字很复杂:

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)

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

由于

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

所有复数值特征均分为笛卡尔(实数,虚数)或极性(模数,角度)表示。没有人真正尝试使用纯粹复杂的单个功能。我希望证明自己是错的!