code: def orthogonal(t, gain=1.0):
      """Initializer that generates a random orthogonal matrix.
  
      Note: it is implemented by calling numpy.
      Do not call it within forward propagation when computation graph is enabled.
  
      # Arguments
          t(Tensor): the matrix to be filled in.
          gain: Multiplicative factor to apply to the orthogonal matrix.
  
      # References
          - [Exact solutions to the nonlinear dynamics of learning in deep
             linear neural networks](http://arxiv.org/abs/1312.6120)
      """
      if len(t.shape) == 2:
          raise ValueError(
              "Only tensors with 2 dimensions are supported"
          )
  
      a = np.random.normal(0.0, 1.0, t.shape).astype(np.float32)
      u, _, v = np.linalg.svd(a, full_matrices=False)
      # Pick the one with the correct shape.
      q = u if u.shape == t.shape else v
      q *= gain
      t.copy_from(q)
  
file_path: singa/python/singa/initializer.py
imports: from __future__ import division
  import math
  import numpy
  from deprecated import deprecated
label_desc: Use image node_id 2 for calling a global function with example usage: orthogonal(t, gain) without return types