Ниже приведен базовый дизайн CVNN.
http://makeyourownneuralnetwork.blogspot.com/2016/05/complex-valued-neural-networks.html
Однако я принял оптимизатор Адама и расширил значение 2d-комплексов.В этом случае, хотя я решил XOR, набор данных mnist не смог решить.В mnist я выбрал двузначное число (ноль, один).
Поскольку фазы неверны, коэффициент точности равен 0%.
Потери сходятся на уровне 0,7.0,7 означает отклонение на 90 градусов.
Есть проблема с методом градиента или проблема с функцией потерь?
def loss_function_each(y, y_hat):
# predict, [Batch][Real/Imag]
y_hat_real = Lambda(lambda x: x[:, 0])(y_hat) # real
y_hat_imag = Lambda(lambda x: x[:, 1])(y_hat) # imag
# true, [Batch][Real/Imag][Period]
y_real_0 = Lambda(lambda x: x[:, 0, 0])(y) # real
y_imag_0 = Lambda(lambda x: x[:, 1, 0])(y) # imag
y_real_1 = Lambda(lambda x: x[:, 0, 1])(y) # real
y_imag_1 = Lambda(lambda x: x[:, 1, 1])(y) # imag
# calc errors
errors_real_0 = y_real_0 - y_hat_real
errors_imag_0 = y_imag_0 - y_hat_imag
errors_real_1 = y_real_1 - y_hat_real
errors_imag_1 = y_imag_1 - y_hat_imag
errors_0 = K.abs(errors_real_0) + K.abs(errors_imag_0)
errors_1 = K.abs(errors_real_1) + K.abs(errors_imag_1)
errors_0 = K.expand_dims(errors_0, 1)
errors_1 = K.expand_dims(errors_1, 1)
errors = keras.layers.concatenate([errors_0, errors_1], axis=1)
return K.min(errors, axis=1)