Я пытаюсь реализовать Байес Бэкпропом. При вычислении апостериорного значения, если я использую параметр в качестве входных данных, а параметр.data в качестве входных данных, точность результата резко меняется.
self.w_post = Normal(self.w_mu.data, torch.log(1+torch.exp(self.w_rho)))
self.b_post = Normal(self.b_mu.data, torch.log(1+torch.exp(self.b_rho)))
self.log_post = self.w_post.log_prob(self.w).sum() + self.b_post.log_prob(self.b).sum()
Это работает, а следующий блок - нет.
self.w_post = Normal(self.w_mu, torch.log(1+torch.exp(self.w_rho)))
self.b_post = Normal(self.b_mu, torch.log(1+torch.exp(self.b_rho)))
self.log_post = self.w_post.log_prob(self.w).sum() + self.b_post.log_prob(self.b).sum()
Поскольку w_post и b_post не являются параметрами, так почему это влияет на мой ответ. Этот фрагмент кода находится в прямой функции пользовательского линейного слоя.
В то время как значение log_posterior не изменяется в течение эпох. Может ли это быть как-то связано с семенем?