Я пытался реализовать маскированные авторегрессионные потоки в pytorch, и я хочу оценить плотность точки данных x. В документе они упоминают, что этого можно добиться путем изменения формулы переменной, но я не понимаю, как заставить ее работать. В прямом проходе модели у меня есть u, log_det в качестве вывода для данной точки данных x. Как я могу использовать их для расчета плотности для p (x)? Соответствуют ли u, log_det частям в формуле изменения переменной?
def forward(self, x):
log_det_sum = torch.zeros(x.shape[0])
for layer in self.layers:
x, log_det = layer(x)
log_det_sum += log_det
return x, log_det_sum
def backward(self, x):
log_det_sum = torch.zeros(x.shape[0])
for maf in reversed(self.layers):
x, log_det = maf.backward(x)
log_det_sum += log_det
return x, log_det_sum
Я слежу за реализацией в этого репозитория GitHub .