class_docstr: Initializer that generates an orthogonal matrix.
  
  NOTE: Does not support 1D tensors.
  
  The implementation is based on :cite:`saxe2013exact`.
  
  If the shape of the tensor to initialize is two-dimensional, it is initialized
  with an orthogonal matrix obtained from the QR decomposition of a matrix of
  random numbers drawn from a normal distribution.
  If the matrix has fewer rows than columns then the output will have orthogonal
  rows. Otherwise, the output will have orthogonal columns.
  
  If the shape of the tensor to initialize is more than two-dimensional,
  a matrix of shape ``(shape[0] * ... * shape[n - 2], shape[n - 1])``
  is initialized, where ``n`` is the length of the shape vector.
  The matrix is subsequently reshaped to give a tensor of the desired shape.
class_docstr_tok: ["Initializer","that","generates","an","orthogonal","matrix",".","NOTE",":","Does","not","support","1D","tensors",".","The","implementation","is","based","on",":","cite",":","`","saxe2013exact","`",".","If","the","shape","of","the","tensor","to","initialize","is","two-dimensional",",","it","is","initialized","with","an","orthogonal","matrix","obtained","from","the","QR","decomposition","of","a","matrix","of","random","numbers","drawn","from","a","normal","distribution",".","If","the","matrix","has","fewer","rows","than","columns","then","the","output","will","have","orthogonal","rows",".","Otherwise",",","the","output","will","have","orthogonal","columns",".","If","the","shape","of","the","tensor","to","initialize","is","more","than","two-dimensional",",","a","matrix","of","shape","``","(","shape","[","0","]","*","...","*","shape","[","n","-","2","]",",","shape","[","n","-","1","]",")","``","is","initialized",",","where","``","n","``","is","the","length","of","the","shape","vector",".","The","matrix","is","subsequently","reshaped","to","give","a","tensor","of","the","desired","shape","."]
docstr: Constructs an orthogonal initializer.
  
  Args:
    gain: Multiplicative factor to apply to the orthogonal matrix
    seed: ``int``, the seed used in the generation of random numbers.
docstr_tok: ["Constructs","an","orthogonal","initializer",".","Args",":","gain",":","Multiplicative","factor","to","apply","to","the","orthogonal","matrix","seed",":","``","int","``",",","the","seed","used","in","the","generation","of","random","numbers","."]
code: def __init__(self, gain: float = 1.0, seed: Optional[int] = None):
      """Constructs an orthogonal initializer.
  
      Args:
        gain: Multiplicative factor to apply to the orthogonal matrix
        seed: ``int``, the seed used in the generation of random numbers.
      """
      self.gain = gain
      self.seed = seed
  
imports: import abc
  import collections
  from typing import Iterable, Mapping, Optional, Union
  import numpy
  from sonnet.src import types
  import tensorflow
label_desc: Use image node_id 1 to create a new Orthogonal object from inherited base classes: Initializer with example: obj = Orthogonal(gain, seed)