class_docstr: Random erase callback which replaces random patches of image data with random noise.
  Implementation a modified version of the cutout code found
  `here <https://github.com/uoguelph-mlrg/Cutout>`_.
  
  Example: ::
  
      >>> from torchbearer import Trial
      >>> from torchbearer.callbacks import RandomErase
  
      # Example Trial which does Cutout regularisation
      >>> erase = RandomErase(1, 10)
      >>> trial = Trial(None, callbacks=[erase], metrics=['acc'])
  
  Args:
      n_holes (int): Number of patches to cut out of each image.
      length (int): The length (in pixels) of each square patch.
  
  State Requirements:
      - :attr:`torchbearer.state.X`: State should have the current data stored
code: def on_sample(self, state):
      super(RandomErase, self).on_sample(state)
      mask = self.cutter(state[torchbearer.X])
      erase_locations = mask == 0
      random = torch.rand_like(state[torchbearer.X])
      state[torchbearer.X][erase_locations] = random[erase_locations]
  
imports: import torchbearer
  from torchbearer import Callback
  import torch
  from torch.distributions import Beta
  from torchbearer.bases import cite
label_desc: Use image node_id 2 for calling the RandomErase obj's underlying member method code with example usage: obj.on_sample(state) without return types