def compute_apply_gradients()

in src/model_def.py [0:0]


def compute_apply_gradients(encoder_mean, encoder_lgvar, vae, x, optimizer):
    """Compute the gradient and apply gradient to optimizer
    
    PARAMETERS
    ----------
    encoder_mean: model part to output means in the hidden layer 
    encoder_lgvar: model part to output vars in the hidden layer
    vae: Variational Autoencoders
    x : tensors
    optimizer : tensorflow optimizer object
    
    RETURNS
    -------
    None, but weights are updated
    """
    with tf.GradientTape() as tape:
        recon_loss, loss = compute_vae_loss(encoder_mean, encoder_lgvar, vae, x)
    gradients = tape.gradient(loss, vae.trainable_variables)
    optimizer.apply_gradients(zip(gradients, vae.trainable_variables))