С учетом гауссовского декодера для вариационных автоэнкодеров - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь реализовать вариационный авто-кодер для реальных данных, где и кодер, и декодер моделируются с помощью многомерного гауссова. Я нашел несколько реализаций онлайн для случая, когда кодировщик является гауссовским, а декодер - Бернулли, но ничего для случая гауссовского декодера. Для случая декодера Бернулли потери на восстановление можно определить следующим образом:

reconstr_loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=x,logits=x_out_logit)

где x_out_logit моделируется DNN. Я не уверен, как записать потери при реконструкции для гауссовского случая. Я предположил, что декодер должен также вывести среднее (gz_mean) и дисперсию (gz_log_sigma_sq) (аналогично гауссовскому кодеру), и поскольку потери при восстановлении являются гауссовой вероятностью, я определил ее как

mvn = tf.contrib.distributions.MultivariateNormalDiag(loc=self.gz_mean,scale_diag=tf.sqrt(tf.exp(self.gz_log_sigma_sq)))
reconstr_loss = tf.log(1e-20+mvn.prob(self.x))

Однако эта потеря, похоже, не работает, mvn.prob (self.x) всегда равен нулю независимо от того, какой этап обучения. Пожалуйста, дайте мне знать о любых идеях или любом источнике git-hub, который рассматривает этот случай.

...