You are creating an object called loss from the MSE_ITL_RegLoss class:
loss = MSE_ITL_RegLoss(latent_code=latent_code, prior=PRIOR_DIST, 
                               regularization_factor=REGULARIZER, kernel=KERNEL, batch_size=BATCH_SIZE)

but are never actually calculating the final_loss computed in the forward.
Based on the class definition you would need to call this object (same as calling a model with inputs) to get the loss:
loss = MSE_ITL_RegLoss(latent_code=latent_code, prior=PRIOR_DIST, 
                               regularization_factor=REGULARIZER, kernel=KERNEL, batch_size=BATCH_SIZE)
final_loss = loss(y_true, y_pred)
final_loss.backward()