Я пытаюсь реализовать пользовательский tfd.Distribution, который представляет сложную модель перехода состояний (STM).Мне нужно вернуть кортеж из 2-х массивов с разными измерениями из реализации абстрактного метода tfd.Distribution._sample_n.Однако у меня возникают проблемы, когда метод-обертка (tfd.Distribution.sample) пытается упаковать эти массивы.
STM характеризует популяцию, которая существует в ряде взаимоисключающих состояний.Со временем индивиды в популяции переходят между состояниями по случайному процессу.Чтобы представить реализацию STM (то есть выборки), вы получите вектор длины T, содержащий времена, в которые произошли переходы, и многомерный массив формы [T, M, N], где T - количество временных шагов, M - это число штатов, а N - количество индивидуумов в населении.
Пока у меня есть:
class Foo(tfd.Distribution):
def __init__(self):
super().__init__(dtype=tf.float32,
#...other config here
)
def _sample_n(self, n, seed=None):
# Sampling algorithm here
# t.shape = [T]
# y.shape = [T, M, N]
return t, y
foo = Foo()
foo.sample()
Желаемый результат: вызов foo.sample()
должен вернутькортеж (tf.tensor, tf.tensor) с формами [T] и [T, M, N] соответственно.
Фактический:
ValueError: Shapes must be equal rank, but are 1 and 3
From merging shape 0 with other shapes. for 'MyEpidemic/sample/Shape/packed' (op: 'Pack') with input shapes: [11], [11,3,1000].