Мне нужна помощь для записи функции потери для модели ниже:
![My model](https://i.stack.imgur.com/oy7m1.png)
Существует 5 входов и выходов. Первые 2 слоя являются категориальными переменными, переменные 3 и 4 являются двоичными переменными, а пятая переменная является непрерывной переменной, которую я масштабировал от 0 до 1. Из VAE я хочу восстановить их все. Не могли бы вы помочь мне с кодом для функции потери?
Класс KL_divergence выглядит следующим образом:
Этот уровень представляет собой слой идентификации, который добавляет потерю KL к окончательной потере. Тогда ваша последняя потеря может быть той, которую вы использовали выше. класс KLDivergenceLayer (Layer):
""" Identity transform layer that adds KL divergence
to the final model loss.
"""
def __init__(self, *args, **kwargs):
self.is_placeholder = True
super(KLDivergenceLayer, self).__init__(*args, **kwargs)
def call(self, inputs):
mu, log_var = inputs
kl_batch = - .5 * K.sum(1 + log_var -
K.square(mu) -
K.exp(log_var), axis=-1)
self.add_loss(K.mean(kl_batch), inputs=inputs)
return inputs
и функция потерь выглядит так:
def nll(y_true, y_pred):
""" Negative log likelihood (Bernoulli). """
#keras.losses.binary_crossentropy gives the mean
#over the last axis. we require the sum
return K.sum(K.binary_crossentropy(y_true, y_pred), axis=-1)
С этим кодом я не могу получить правильную реконструкцию.