我正在我的变分自动编码器模型中定义自定义损失函数。我想对编码表示和原始输入对之间的汉明损失进行加权,并将其添加到重构和KL散度损失中。
但是我可能会因为0/0或1/0类型的错误而遭受损失。我是keras的新手,我不知道如何避免使用这些条件。
我的代码段是:
def differences(pair_of_tensors):
x, y = pair_of_tensors
return y / x
def enc_ham_loss(y_true,y_pred):
# calculate pairwise hamming distance matrix
# differences of y_pred probabilities)
pairwise_diff_pred = K.abs(K.expand_dims(y_pred[0], 0) -
K.expand_dims(y_pred[0], 1))
pairwise_distance_pred = K.sum(pairwise_diff_pred, axis=-1)
# calculate pairwise hamming distance matrix for inputs
pairwise_diff_true = K.abs(K.expand_dims(y_true[0], 0) -
K.expand_dims(y_true[0], 1))
pairwise_distance_true = K.sum(pairwise_diff_true, axis=-1)
hamm_sum = Lambda(lambda inputs: pairwise_distance_pred /
pairwise_distance_true)([pairwise_distance_true, pairwise_distance_true])
return K.sum(hamm_sum, axis=-1)
我正在使用y_pred[0]
,因为我的模型有多个输出。我只想知道如何更改函数enc_ham_loss
,以便仅分割有效值,而不分割导致Nan的值。
不胜感激。
预先感谢