call(inputs, kwargs) {
    const [zMean, zLogVar] = inputs;
    const batch = zMean.shape[0];
    const dim = zMean.shape[1];

    const mean = 0;
    const std = 1.0;
    // sample epsilon = N(0, I)
    const epsilon = tf.randomNormal([batch, dim], mean, std);

    // z = z_mean + sqrt(var) * epsilon
    return zMean.add(zLogVar.mul(0.5).exp().mul(epsilon));
  }
The actual computation performed by an instance of ZLayer.

@param {Tensor[]} inputs this layer takes two input tensors, z_mean and
    z_log_var
@return A tensor of the same shape as z_mean and z_log_var, equal to
    z_mean + sqrt(exp(z_log_var)) * epsilon, where epsilon is a random
    vector that follows the unit normal distribution (N(0, I)).