Как мне спроектировать функцию потери комплексной нейронной сети? - PullRequest
0 голосов
/ 15 апреля 2019

Ниже приведен базовый дизайн 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)
...