Моему исследованию необходимо изменить предыдущие параметры распределения для обучения модели байесовской нейронной сети. Более конкретно, я хочу изменить предыдущее распределение Гаусса 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?
Большое спасибо за вашу помощь,