Добавление пользовательской функции потерь для вариационного автоэнкодера keras - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь добавить пользовательскую функцию потерь для вариационного автоэнкодера. Наряду с потерями на реконструкцию, дивергенцией KL я хотел бы добавить потери, основанные на разнице расстояний Хэмминга пар входов и выходов.

Но проблема, с которой я сталкиваюсь, заключается в том, что с или без этой дополнительной потери результаты одинаковы. Может ли кто-нибудь указать, что я должен делать, чтобы исправить это? Это связано с размерами или с чем-то еще.

Вот мой фрагмент кода:

def ham_loss(y_true,y_pred):
    # calculate pairwise hamming distance matrix
    # differences of y_pred probabilities)
    pairwise_diff_pred = K.expand_dims(y_pred, 0) - K.expand_dims(y_pred, 1)
    pairwise_distance_pred = K.sum(pairwise_diff_pred, axis=-1)

    # calculate pairwise hamming distance matrix for inputs
    pairwise_diff_true = K.expand_dims(y_true, 0) - K.expand_dims(y_true, 1)
    pairwise_distance_true = K.sum(pairwise_diff_true, axis=-1)

    #Difference between the distances of y_true and y_predictions
    hamm_sum= Lambda(differences)([pairwise_distance_true, pairwise_distance_pred])
    print(hamm_sum)
    return K.sum(hamm_sum, axis=-1)

def vae_loss(y_true, y_pred):
    """ Calculate loss = reconstruction loss + KL loss for each data in minibatch """
         # E[log P(X|z)]

         recon = K.sum(K.binary_crossentropy(y_true,y_pred),axis=1)
         # D_KL(Q(z|X) || P(z|X)); calculate in closed form as both dist. are Gaussian
         kl = 0.5 * K.sum(K.exp(z_log_var) + K.square(z_mean) - 1. - z_log_var, axis=1)

         hamming_loss = ham_loss(y_true,y_pred)

         return recon + kl + hamming_loss

Любая помощь высоко ценится!

Заранее спасибо ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...