Изменение вероятности Tensorflow Prior в tfp.layers (возможная проблема) - PullRequest
1 голос
/ 03 марта 2020

Моему исследованию необходимо изменить предыдущие параметры распределения для обучения модели байесовской нейронной сети. Более конкретно, я хочу изменить предыдущее распределение Гаусса mu и sigma.

Я прочитал основные коды вероятности Tensorflow и реализовал свой собственный код для изменения предыдущего. Однако после нескольких экстремальных экспериментов выяснилось, что результаты прямо противоречат теории. Здесь проблема заключается либо в том, как я реализую предыдущие версии, либо в байесовских обновлениях веса, которые реализует Tensorflow, либо в производных этих обновлений веса.

Теперь самый простой способ - убедиться, что я Я реализую изменение предыдущего в моих кодах правильно. Не могли бы вы дать мне знать, как правильно реализовать другой приоритет для tfp.layers?

Мой код для реализации этого выглядит следующим образом:

tfp.layers.Convolution2DReparameterization(
          filters=6, kernel_size=(5,5), padding='same', activation='relu', dtype=‘float64’,
          kernel_divergence_fn=lambda q, p, _: tfp.distributions.kl_divergence(q, p) / num_example,
          kernel_prior_fn= _Prior_fn(mean=initialization[0], scale=initialization[1]),
          bias_posterior_fn=tfp.layers.default_mean_field_normal_fn(),
          bias_prior_fn= _Prior_fn(mean=initialization[2], scale=initialization[3]),
          bias_divergence_fn=lambda q, p, _: tfp.distributions.kl_divergence(q, p) / num_example)

def _Prior_fn(mean, scale,*args, **kwargs):
    d = tfd.Normal(loc=mean, scale=scale)
    def fn(*args, **kwargs):
        return tfd.Independent(d, reinterpreted_batch_ndims=tf.size(d.batch_shape_tensor()))
    return fn

** Инициализация [0] инициализация [1] имеет точную форму kernel_posterior, а инициализация [3], инициализация [4] имеют точную форму bias_posterior.

Можете ли вы проверить этот код или дать мне другой пример кода для реализовать свой собственный до перехода на tfp.layers?

Большое спасибо за вашу помощь,

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