class_docstr: Layer-sequential unit-variance (LSUV) initialization as described in
  `All you need is a good init <https://arxiv.org/abs/1511.06422>`_ and
  modified from the code by  `ducha-aiki <https://github.com/ducha-aiki/LSUV-pytorch>`__.
  To be consistent with the paper, LsuvInit should be preceeded by a ZeroBias init on the Linear and Conv layers.
  
  
  Example: ::
  
      >>> import torch
      >>> import torch.nn as nn
      >>> from torchbearer import Trial
      >>> from torchbearer.callbacks.init import LsuvInit
  
      # 100 random data points
      >>> data = torch.rand(100, 3, 5, 5)
      >>> example_batch = data[:3]
      >>> lsuv = LsuvInit(example_batch)
  
      # Model and trail using lsuv init for some random data
      >>> model = nn.Sequential(nn.Conv2d(3, 1, 3), nn.ReLU())
      >>> trial = Trial(model, callbacks=[lsuv]).with_train_data(data, data+5)
  
  Args:
      data_item (torch.Tensor): A representative data item to put through the model
      weight_lambda (lambda): A function that takes a module and returns the weight attribute. If none defaults to 
          module.weight.
      needed_std: See `paper <https://arxiv.org/abs/1511.06422>`__, where needed_std is always 1.0
      std_tol: See `paper <https://arxiv.org/abs/1511.06422>`__, Tol_{var}
      max_attempts: See `paper <https://arxiv.org/abs/1511.06422>`__, T_{max}
      do_orthonorm: See `paper <https://arxiv.org/abs/1511.06422>`__, first pre-initialise with orthonormal matricies
  
  State Requirements:
      - :attr:`torchbearer.state.MODEL`: Model should have the `modules` method if modules is None
class_docstr_tok: ["Layer-sequential","unit-variance","(","LSUV",")","initialization","as","described","in","`","All","you","need","is","a","good","init","<","https",":","\/\/arxiv.org\/abs\/1511.06422",">","`","_","and","modified","from","the","code","by","`","ducha-aiki","<","https",":","\/\/github.com\/ducha-aiki\/LSUV-pytorch",">","`","__",".","To","be","consistent","with","the","paper",",","LsuvInit","should","be","preceeded","by","a","ZeroBias","init","on","the","Linear","and","Conv","layers",".","Example",":",":",":",">",">",">","import","torch",">",">",">","import","torch.nn","as","nn",">",">",">","from","torchbearer","import","Trial",">",">",">","from","torchbearer.callbacks.init","import","LsuvInit","#","100","random","data","points",">",">",">","data","=","torch.rand","(","100",",","3",",","5",",","5",")",">",">",">","example_batch","=","data","[",":3","]",">",">",">","lsuv","=","LsuvInit","(","example_batch",")","#","Model","and","trail","using","lsuv","init","for","some","random","data",">",">",">","model","=","nn.Sequential","(","nn.Conv2d","(","3",",","1",",","3",")",",","nn.ReLU","(",")",")",">",">",">","trial","=","Trial","(","model",",","callbacks=","[","lsuv","]",")",".with_train_data","(","data",",","data+5",")","Args",":","data_item","(","torch.Tensor",")",":","A","representative","data","item","to","put","through","the","model","weight_lambda","(","lambda",")",":","A","function","that","takes","a","module","and","returns","the","weight","attribute",".","If","none","defaults","to","module.weight",".","needed_std",":","See","`","paper","<","https",":","\/\/arxiv.org\/abs\/1511.06422",">","`","__",",","where","needed_std","is","always","1.0","std_tol",":","See","`","paper","<","https",":","\/\/arxiv.org\/abs\/1511.06422",">","`","__",",","Tol_","{","var","}","max_attempts",":","See","`","paper","<","https",":","\/\/arxiv.org\/abs\/1511.06422",">","`","__",",","T_","{","max","}","do_orthonorm",":","See","`","paper","<","https",":","\/\/arxiv.org\/abs\/1511.06422",">","`","__",",","first","pre-initialise","with","orthonormal","matricies","State","Requirements",":","-",":","attr",":","`","torchbearer.state.MODEL","`",":","Model","should","have","the","`","modules","`","method","if","modules","is","None"]
code: def on_init(self, state):
      lsuv = self.lsuv_init()
      state[torchbearer.MODEL] = lsuv.init_model(
          state[torchbearer.MODEL],
          self.data,
          self.weight_lambda,
          self.needed_std,
          self.std_tol,
          self.max_attempts,
          self.do_arthonorm,
      )
  
imports: import torchbearer
  from torchbearer import cite
  from torchbearer.callbacks import Callback
  import torch.nn.init
label_desc: Use image node_id 2 for calling the LsuvInit obj's underlying member method code with example usage: obj.on_init(state) without return types