class_docstr: Generates an orthogonal matrix weights proposed by Saxe et al.
  
  Args:
      gain (float): scaling factor which should be decided depending on a type of units.
      rng (numpy.random.RandomState): Random number generator.
  
  Example:
  
  .. code-block:: python
  
      import numpy as np
      import nnabla as nn
      import nnabla.parametric_functions as PF
      import nnabla.initializer as I
  
      x = nn.Variable([60,1,28,28])
      w = I.OrthogonalInitializer(np.sqrt(2.0))
      b = I.ConstantInitializer(0.0)
      h = PF.convolution(x, 64, [3, 3], w_init=w, b_init=b, pad=[1, 1], name='conv')
  
  References:
      * `Saxe, et al. Exact solutions to the nonlinear dynamics of
        learning in deep linear neural networks.
        <https://arxiv.org/abs/1312.6120>`_
code: def __call__(self, shape):
      flat_shape = (shape[0], int(np.prod(shape[1:])))
      x = self.rng.normal(0.0, 1.0, flat_shape)
      u, _, v = np.linalg.svd(x, full_matrices=False)
      q = u if u.shape == flat_shape else v
      return random_float_type(q.reshape(shape) * self.gain)
  
imports: import numpy
  from .None import random
label_desc: Use image node_id 3 for calling the OrthogonalInitializer obj's underlying member method code with example usage: obj.__call__(shape) and returns: random_float_type