# Gaussian mixture with local parameters and global parameters via klqp method

**URL:** <https://discourse.edwardlib.org/t/gaussian-mixture-with-local-parameters-and-global-parameters-via-klqp-method/690>\
**Category:** General\
**Created:** [March 22, 2018, 3:50am UTC](https://discourse.edwardlib.org/t/gaussian-mixture-with-local-parameters-and-global-parameters-via-klqp-method/690 "2018-03-22T03:50:29Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![tanaka-hiroki1989](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.edwardlib.org/tanaka-hiroki1989/32/275_2.png) [@tanaka-hiroki1989](https://discourse.edwardlib.org/u/tanaka-hiroki1989)\
**Post date:** [March 22, 2018, 3:50am UTC](https://discourse.edwardlib.org/t/gaussian-mixture-with-local-parameters-and-global-parameters-via-klqp-method/690/1 "2018-03-22T03:50:29Z")

</div>

We would like to implement the BBVI, which inferences simultaneously local parameters and global parameters in GMM.

[https://github.com/EmergentSystemLabStudent/BBVI\_edward/blob/master/GMM.ipynb](https://github.com/EmergentSystemLabStudent/BBVI_edward/blob/master/GMM.ipynb)

We have already implemented the BBVI, which inferences only local parameters in GMM. (In [3])

We have already implemented the BBVI, which inferences only global parameters in GMM. (In [7])

However, we could not implement the BBVI, which inferences  
simultaneously local parameters and global parameters in GMM.  
The code(In [11]) and the error messages(In[12]) are shown below.

> #generative model  
> alpha = tf.constant([1.0, 1.0, 1.0])  
> pi = Dirichlet(concentration = alpha)  
> mu = [MultivariateNormalFullCovariance(loc=tf.constant([3.0,3.0]),covariance\_matrix=tf.constant([[1.0,0.0],[0.0,1.0]]))for k in range(K)]  
> z = [Categorical(probs = pi) for n in range(N)]  
> x = [Mixture(cat=z[n],  
> components=[MultivariateNormalFullCovariance(loc=mu[k],covariance\_matrix=sigma[k]) for k in range(K)]) for n in range(N)]  
> #variational model  
> lambda\_pi = tf.nn.softplus(tf.Variable([0.0 , 0.0 , 0.0]))  
> qpi = Dirichlet(concentration = lambda\_pi)  
> qmu = [MultivariateNormalFullCovariance(loc=tf.Variable([4.0,4.0]),covariance\_matrix=tf.constant([[1.0,0.0],[0.0,1.0]])) for k in range(K)]  
> y = [tf.Variable([0.0,0.0,0.0]) for n in range(N)]  
> lambda\_z = [tf.nn.softmax(y[n]) for n in range(N)]  
> qz = [Categorical(probs = lambda\_z[n]) for n in range(N)]  
> latent\_vars = {z[n]:qz[n] for n in range(N)}  
> latent\_vars[pi] = qpi  
> for k in range(K):  
> latent\_vars[mu[k]]=qmu[k]  
> data = {x[n]:x\_data[n] for n in range(N)}  
> inference = ed.KLqp(latent\_vars=latent\_vars,data=data)  
> inference.initialize(n\_iter=100)

> TypeError: cat must be a Categorical distribution, but saw: Tensor(“inference\_4/sample\_4/Categorical\_111/sample/Reshape\_2:0”, shape=(), dtype=int32)

Please tell me a good idea to solve this problem.
