docs: def _weight_init(self, m, n, name):
          """
          Uses the Xavier Glorot method for initializing weights. This is
          built in to TensorFlow as `tf.contrib.layers.xavier_initializer`,
          but it's nice to see all the details.
          """
          x = np.sqrt(6.0/(m+n))
          with tf.name_scope(name) as scope:
              return tf.Variable(
                  tf.random_uniform(
                      [m, n], minval=-x, maxval=x), name=name)