computeOutputShape(inputShape) {
    tf.util.assert(inputShape.length === 2 && Array.isArray(inputShape[0]),
        () => `Expected exactly 2 input shapes. But got: ${inputShape}`);
    return inputShape[0];
  }
This layer implements the 'reparameterization trick' described in
https://blog.keras.io/building-autoencoders-in-keras.html.

The implementation is in the call method.
Instead of sampling from Q(z|X):
   sample epsilon = N(0,I)
   z = z_mean + sqrt(var) * epsilon