我可以训练具有复杂输入/输出的 Tensorflow keras 模型吗?

Rai*_*rop 6 python keras tensorflow

我正在尝试训练一个只有一个卷积层的非常简单的模型。

 def kernel_model(filters=1, kernel_size=3):
    input_layer = Input(shape=(250,1))
    conv_layer = Conv1D(filters=filters,kernel_size=kernel_size,padding='same',use_bias = False)(input_layer)
    model = Model(inputs=input_layer,output=conv_layer)
    return model 
Run Code Online (Sandbox Code Playgroud)

但是输入(X)、预测输出(y_pred)和true_output(y_true)都是复数。当我调用函数时model.fit(X,y_true)

有错误 TypeError: Gradients of complex tensors must set grad_ys (y.dtype = tf.complex64)

这是否意味着我必须手动编写反向传播?
我应该怎么做才能解决这个问题?谢谢

Mar*_*sen 8

您的 DNN 需要通过反向传播最小化损失函数。为了最小化某些东西,它自然需要有一个排序。复数是无序的,而实数是有序的。所以你通常需要一个损失函数L: Complex -> Reals

将复值损失函数从简单平方更改为:

error = K.cast(K.mean(K.square(y_pred_propgation - y_true)),tf.complex64)
Run Code Online (Sandbox Code Playgroud)

为复数的实值大小 ||.||^2:

error = K.mean(K.square(K.abs(y_true-y_pred)))
Run Code Online (Sandbox Code Playgroud)