class_docstr: Custom updater for chainer.
  
  Args:
      train_iter (iterator | dict[str, iterator]): Dataset iterator for the
          training dataset. It can also be a dictionary that maps strings to
          iterators. If this is just an iterator, then the iterator is
          registered by the name ``'main'``.
      optimizer (optimizer | dict[str, optimizer]): Optimizer to update
          parameters. It can also be a dictionary that maps strings to
          optimizers. If this is just an optimizer, then the optimizer is
          registered by the name ``'main'``.
      converter (espnet.asr.chainer_backend.asr.CustomConverter): Converter
          function to build input arrays. Each batch extracted by the main
          iterator and the ``device`` option are passed to this function.
          :func:`chainer.dataset.concat_examples` is used by default.
      device (int or dict): The destination device info to send variables. In the
          case of cpu or single gpu, `device=-1 or 0`, respectively.
          In the case of multi-gpu, `device={"main":0, "sub_1": 1, ...}`.
      accum_grad (int):The number of gradient accumulation. if set to 2, the network
          parameters will be updated once in twice,
          i.e. actual batchsize will be doubled.
class_docstr_tok: ["Custom","updater","for","chainer",".","Args",":","train_iter","(","iterator","|","dict","[","str",",","iterator","]",")",":","Dataset","iterator","for","the","training","dataset",".","It","can","also","be","a","dictionary","that","maps","strings","to","iterators",".","If","this","is","just","an","iterator",",","then","the","iterator","is","registered","by","the","name","``","'main","'","``",".","optimizer","(","optimizer","|","dict","[","str",",","optimizer","]",")",":","Optimizer","to","update","parameters",".","It","can","also","be","a","dictionary","that","maps","strings","to","optimizers",".","If","this","is","just","an","optimizer",",","then","the","optimizer","is","registered","by","the","name","``","'main","'","``",".","converter","(","espnet.asr.chainer_backend.asr.CustomConverter",")",":","Converter","function","to","build","input","arrays",".","Each","batch","extracted","by","the","main","iterator","and","the","``","device","``","option","are","passed","to","this","function",".",":","func",":","`","chainer.dataset.concat_examples","`","is","used","by","default",".","device","(","int","or","dict",")",":","The","destination","device","info","to","send","variables",".","In","the","case","of","cpu","or","single","gpu",",","`","device=-1","or","0","`",",","respectively",".","In","the","case","of","multi-gpu",",","`","device=","{","``","main","''",":0",",","``","sub_1","''",":","1",",","...","}","`",".","accum_grad","(","int",")",":","The","number","of","gradient","accumulation",".","if","set","to","2",",","the","network","parameters","will","be","updated","once","in","twice",",","i.e",".","actual","batchsize","will","be","doubled","."]
code: def update(self):
      self.update_core()
      if self.forward_count == 0:
          self.iteration += 1
  
imports: import collections
  import logging
  import math
  import numpy
  from chainer import Variable, cuda, training
  from chainer.training.updaters.multiprocess_parallel_updater import gather_grads, gather_params, scatter_grads
label_desc: Use image node_id 3 for calling the CustomUpdater obj's underlying member method code with example usage: obj.update() without return types