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

时间:2019-11-15 00:17:50

标签: python tensorflow keras

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

 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 

但是输入(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)

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

1 个答案:

答案 0 :(得分:0)

您的DNN需要通过反向传播来最小化损失函数。为了最小化某些内容,它自然需要进行排序。复数不是有序的,而实数是有序的。 因此,您通常需要损失函数L: Complex -> Reals

从简单正方形更改复杂值损失函数:

error = K.cast(K.mean(K.square(y_pred_propgation - y_true)),tf.complex64)

到复数的实值幅度||。|| ^ 2:

error = K.mean(K.square(K.abs(y_true-y_pred)))