wrong batch_shape of distribution for observation distribution in HMM

Abierto
#1,850 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python

Línea de trabajo

Comienza con el comportamiento de batch_shape y event_shape de tfd.Mixture, tfd.MixtureSameFamily y tfd.HiddenMarkovModel mostrado en el issue. Compara las shapes de los parámetros de los componentes y categóricos con los requisitos de la distribución de transición de HMM. Se considera completado cuando se identifica una shape válida de la distribución de observaciones que represente ambos estados ocultos sin los errores de scalar-batch o last-dimension indicados.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

I got a serial of observations with shape of (N, 1). These observations correspond to two hidden states.

For hidden state 0, I declare the distribution as below:
dis0 = tfd.MixtureSameFamily( mixture_distribution=tfd.Categorical(probs=[0.4, 0.4, 0.2]), # mixture_distribution=tfd.Categorical(probs=[0.4, 0.4, 0.2]) components_distribution=tfd.Normal(loc=tf.Variable([100.0, 260.0, 180.0], trainable=True), scale=tf.Variable([10.0], trainable=True)) # tfd.Normal(loc=[100, 260, 180], scale=[10, 10, 10]) )
which mean it's a mixed Normal Distribution with three peaks.

For hidden. state 1, I declare the distribution as below:
dis1 = tfd.Normal(loc=tf.Variable(0.0, trainable=True), scale=tf.Variable(40.0, trainable=True))
which means it's a simple Normal Distribution

then I declare the 'observation distribution' as :
observation_distribution = tfd.Mixture( cat=tfd.Categorical(probs=[0.9, 0.1]), # 对应两个状态的概率 components=[dis_0, dis_1] )

After running the above code, I got observation_distribution.batch_shape = []

Even if I adjust the code as below:
`dis_swim = tfd.MixtureSameFamily(
mixture_distribution=tfd.Categorical(probs=[[0.4, 0.4, 0.2]]), # mixture_distribution=tfd.Categorical(probs=[0.4, 0.4, 0.2])
components_distribution=tfd.Normal(loc=tf.Variable([100.0, 260.0, 180.0], trainable=True), scale=tf.Variable([10.0], trainable=True)) # tfd.Normal(loc=[100, 260, 180], scale=[10, 10, 10])
)

dis_turn = tfd.Normal(loc=tf.Variable([0.0], trainable=True), scale=tf.Variable([40.0], trainable=True))
print(dis_turn.batch_shape, dis_turn.event_shape)

observation_distribution = tfd.Mixture(
cat=tfd.Categorical(probs=[[0.9, 0.1]]), # 对应两个状态的概率
components=[dis_swim, dis_turn]
)`

I got observation_distribution.batch_shape = [1]

!!!
However, the observation distribution in HMM needs batch_size equals 2 when I definate the HMM model as below:
hmm = tfd.HiddenMarkovModel( initial_distribution=tfd.Categorical(probs=[0.5, 0.5]), transition_distribution=tfd.Categorical(probs=[[0.9, 0.1], [0.1, 0.9]]), observation_distribution=observation_distribution, num_steps=N)

so I got the error "observation_distribution can't have scalar batches" or "transition_distribution and observation_distribution must agree on last dimension of batch size"

Is there anyone could introduct me to fix my code?

PS: Tensorflow:2.17.0 Tensorflow-probability 0.24.0

Lenguaje dominante
Jupyter Notebook
Estrellas
4.4k
Forks
1.1k
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de tensorflow/probability

Todos los issues de tensorflow/probability

Issues similares

Más issues de Machine Learning

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.