def dense_layers(sizes):
return tfk.Sequential([tfkl.Dense(size, activation=tf.nn.leaky_relu) for size in sizes])
encoder = tfk.Sequential([
tfkl.InputLayer(input_shape=input_shape, name='encoder_input'),
dense_layers(intermediary_dims),
tfkl.Dense(latent_dim, activation = tf.nn.leaky_relu),
tfkl.Dense(tfpl.MultivariateNormalTriL.params_size(latent_dim), activation=None),
tfpl.MultivariateNormalTriL(latent_dim,activity_regularizer=tfpl.KLDivergenceRegularizer(prior)),
], name='encoder')
encoder.summary()
plot_model(encoder, to_file='vae_mlp_encoder.png', show_shapes=True)
decoder = tfk.Sequential([
tfkl.InputLayer(input_shape=[latent_dim]),
dense_layers(reversed(intermediary_dims)),
tfkl.Dense(tfpl.IndependentNormal.params_size(original_dim), activation=None),
tfpl.IndependentNormal(original_dim),
], name='decoder')
decoder.summary()
plot_model(decoder, to_file='vae_mlp_decoder.png', show_shapes=True)
vae = tfk.Model(inputs=encoder.inputs,
outputs=decoder(encoder.outputs[0]),
name='vae_mlp')
negloglik = lambda x, rv_x: -rv_x.log_prob(x)
vae.compile(optimizer=tf.keras.optimizers.Nadam(),
loss=negloglik)
vae.summary()
plot_model(vae,
to_file='vae_mlp.png',
show_shapes=True)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-29-236f8f195100> in <module>()
7 tfkl.Dense(tfpl.MultivariateNormalTriL.params_size(latent_dim), activation=None),
8 tfpl.MultivariateNormalTriL(latent_dim,activity_regularizer=tfpl.KLDivergenceRegularizer(prior)),
----> 9 ], name='encoder')
10
11 encoder.summary()
9 frames
/usr/local/lib/python3.6/dist-packages/tensorflow_probability/python/layers/distribution_layer.py in kl_divergence_fn(distribution_a, distribution_b)
1086 z = test_points_fn(distribution_a)
1087 return tf.reduce_mean(
-> 1088 distribution_a.log_prob(z) - distribution_b.log_prob(z),
1089 axis=test_points_reduce_axis)
1090
AttributeError: 'Tensor' object has no attribute 'log_prob'