def __encode__(self, **kwargs):
        inputs = kwargs['inputs']
        for k, v in inputs.items():
            if inputs[k].shape == self.get_inputs_shape():
                inputs[k] = tf.reshape(inputs[k],
                                       (1, ) + self.get_inputs_shape())
            inputs[k] = tf.cast(inputs[k], tf.float32)
        kwargs['model'] = self.get_variable
        kwargs['latents_shape'] = (self.batch_size, self.latents_dim)

        encoded = self.encode_fn(**kwargs)
        covariance_mean  = infer_prior(latent_mean=encoded['z_latents'], \
                                       regularize=False, lambda_d=self.lambda_d, lambda_od=self.lambda_od)

        covariance_sigma = tf.exp(encoded['z_latents'] + epsilon)
        latents_sigma = covariance_sigma
        prior_distribution = tfp.distributions.Normal(loc=covariance_mean,
                                                      scale=covariance_sigma)
        posterior_distribution = tfp.distributions.Normal(
            loc=encoded['z_latents'], scale=latents_sigma)
        bayesian_divergent = tfp.distributions.kl_divergence(
            posterior_distribution, prior_distribution)
        bayesian_divergent = tf.identity(bayesian_divergent,
                                         name='bayesian_divergent')
        return {**encoded, 'bayesian_divergent': bayesian_divergent}
예제 #2
0
    def __encode__(self, **kwargs):
        inputs = kwargs['inputs']
        for k, v in  inputs.items():
            if inputs[k].shape == self.get_inputs_shape():
                inputs[k] = tf.reshape(inputs[k], (1, ) + self.get_inputs_shape())
            inputs[k] = tf.cast(inputs[k], tf.float32)
        kwargs['model']  = self.get_variable
        kwargs['latents_shape'] = (self.batch_size, self.latents_dim)

        encoded = self.encode_fn(**kwargs)
        _, covariance_regularizer = infer_prior(latent_mean=encoded['z_latents'], \
                                                regularize=True, lambda_d=self.lambda_d, lambda_od=self.lambda_od)
        return {**encoded, 'covariance_regularized': covariance_regularizer}