Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

log_pdf in StocahsticGraph's get_output has the same size with the output tensor(Branch model) #12

Closed
ssydasheng opened this issue Nov 12, 2016 · 2 comments
Assignees
Labels

Comments

@ssydasheng
Copy link
Collaborator

In branch model,
the log_pdf in StocahsticGraph's get_output has the same size with the targeted output tensor, which differs from the master setting, in which the log_pdf will be shape (batch_size, n_samples) by reduce_sum.

In #42 of ../zhusuan/variational.py

    lower_bound = model.log_prob(latent_outputs, observed, given) - \
        sum(latent_logpdfs)_

will crash because of adding latent_logpdfs of different shapes.

@ssydasheng
Copy link
Collaborator Author

@thjashin

@thjashin
Copy link
Collaborator

thjashin commented Nov 13, 2016

Hi @ssydasheng ,
Actually that's what I intended to. In the new api, there is no further assumptions about shape of the Tensors. no (batch_size, n_samples) anymore. With new StochasticTensors, you can sample in any sample_dim you want. You can take a look at examples/vae.py. Over the days I have thought about for a graphical model, there is nothing special to batch_size, it's just a plate (a rectangle). So my choice in vae.py is just build the model (p(x,z)) like the graphical view (z_mean as (n_z,), z_logstd as (n_z,), z as (batch_size, n_z)), what I add to make it more suitable in variational setting is just adding a n_particles (i.e. n_samples) dimension before all of these shapes, which can be seen as we allow multiple samples (particles) to pass through a node in the graphical model. That meets the need when getting q(z) samples of shape (n_particles, batch_size, n_z) so that these samples can be passed into models.

Normal and Bernoulli actually means independent Normal and independent Bernoulli. Discrete will sum over the last dimension. If you look at my new vae under examples/, it sums logpdf by hand over the dimension you want and then gets passed to advi. I will further change the api of advi to make this more comfortable.

For your case, if w is of shape (n1, n2), I guess you can define w_mean, w_logstd, w as shape (n_particles, n1, n2), qw_mean, qw_logstd can be as shape (n1, n2), and qw=Normal(qw_mean, qw_logstd, sample_dim=0, n_samples=n_particles)

Above may be a little messy to understand, we can chat in details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants