Определение DirichletMultinomial в вероятности тензорного потока - PullRequest
0 голосов
/ 07 июня 2018

Это, вероятно, довольно просто, но я не могу понять - у меня есть матрица 100x5 y, которая сгенерирована из Dirichlet-Multinomial, и я хочу вывести гамму параметров, используя вероятность тензорного потока.Ниже приведена модель, которую я реализовал (для простоты я предполагаю, что гамма на данный момент одинакова для всех 5 классов):

def dirichlet_multinomial_model(S, p, N, tau):
    gamma = ed.Gamma(2.0, 3.0, name='gamma')
    y = ed.DirichletMultinomial(500, tf.ones(5)*gamma, name='y')
    return y

log_joint = ed.make_log_joint_fn(dirichlet_multinomial_model)

def target_log_prob_fn(gamma):
  return log_joint(
     S=S, p=p, N=N, tau=tau,
     gamma=gamma,
     y=y)

Когда я пытаюсь сэмплировать это с помощью HMC, я получаю следующую ошибку:

ValueError: Несовместимая форма для аргумента инициализации 'value'.Expected (5,), got (100, 5).

Таким образом, указание вектора гамма-длины длиной 5 привело к тому, что программа ожидала, что мои данные будут иметь форму 5x1.Я не могу понять, как правильно указать модель - любые указатели будут признательны.

1 Ответ

0 голосов
/ 08 июня 2018

Как указано в моем комментарии, исправление здесь заключается в использовании sample_shape=[100,] вместо sample_shape=[100, 5].У нас есть три понятия формы в библиотеке распределений TF (которую Эдвард переносит): форма образца, форма пакета и форма события.

Форма события описывает форму одиночного рисования из распределения.Например, многомерное нормальное распределение в 5 измерениях имеет event_shape=[5,]

Форма пакета описывает независимые, не идентично распределенные тиражи;«партия» распределений.Например, Normal(loc=[1., 2., 3], scale=1.) имеет batch_shape 3 из-за 3 значений, переданных параметру loc.

Образец формы описывает IID-отрисовки из партии распределений.Результирующая выборка Tensor имеет форму S + B + E, где S, B и E - это формы выборки, партии и события соответственно.

В вашем примере DirichletMultinomial имеетпараметр концентрации с формой [5,].Это соответствует форме события в распределении: каждый розыгрыш из этого распределения будет набором из 5 целых чисел, суммирующим до total_count.Когда вы выбираете распределение 100 раз, вы действительно получаете результат с shape=[100, 5], но 5 неявно присутствует в форме события распределения - вы рисуете только 100 выборок, следовательно, sample_shape=[100,]

Большая часть вышеприведенного текста взята из этого замечательного блокнота , в котором гораздо больше деталей о формах TF Distribution.

Надеюсь, это поможет прояснить ситуацию!Удачной выборки!^ _ ^

...