我正在尝试训练一个只有一个卷积层的非常简单的模型。
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)
这是否意味着我必须手工编写反向传播?
我该怎么做才能解决这个问题?谢谢
答案 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)))