class_docstr: History contains the information about the training history of
  a :class:`.NeuralNet`, facilitating some of the more common tasks
  that are occur during training.
  
  When you want to log certain information during training (say, a
  particular score or the norm of the gradients), you should write
  them to the net's history object.
  
  It is basically a list of dicts for each epoch, that, again,
  contains a list of dicts for each batch. For convenience, it has
  enhanced slicing notation and some methods to write new items.
  
  To access items from history, you may pass a tuple of up to four
  items:
  
    1. Slices along the epochs.
    2. Selects columns from history epochs, may be a single one or a
       tuple of column names.
    3. Slices along the batches.
    4. Selects columns from history batchs, may be a single one or a
       tuple of column names.
  
  You may use a combination of the four items.
  
  If you select columns that are not present in all epochs/batches,
  only those epochs/batches are chosen that contain said columns. If
  this set is empty, a ``KeyError`` is raised.
  
  Examples
  --------
  >>> # ACCESSING ITEMS
  >>> # history of a fitted neural net
  >>> history = net.history
  >>> # get current epoch, a dict
  >>> history[-1]
  >>> # get train losses from all epochs, a list of floats
  >>> history[:, 'train_loss']
  >>> # get train and valid losses from all epochs, a list of tuples
  >>> history[:, ('train_loss', 'valid_loss')]
  >>> # get current batches, a list of dicts
  >>> history[-1, 'batches']
  >>> # get latest batch, a dict
  >>> history[-1, 'batches', -1]
  >>> # get train losses from current batch, a list of floats
  >>> history[-1, 'batches', :, 'train_loss']
  >>> # get train and valid losses from current batch, a list of tuples
  >>> history[-1, 'batches', :, ('train_loss', 'valid_loss')]
  
  >>> # WRITING ITEMS
  >>> # add new epoch row
  >>> history.new_epoch()
  >>> # add an entry to current epoch
  >>> history.record('my-score', 123)
  >>> # add a batch row to the current epoch
  >>> history.new_batch()
  >>> # add an entry to the current batch
  >>> history.record_batch('my-batch-score', 456)
  >>> # overwrite entry of current batch
  >>> history.record_batch('my-batch-score', 789)
docstr: Load the history of a ``NeuralNet`` from a json file.
  
  Parameters
  ----------
  f : file-like object or str
code: def from_file(cls, f):
      """Load the history of a ``NeuralNet`` from a json file.
  
      Parameters
      ----------
      f : file-like object or str
  
      """
  
      with open_file_like(f, "r") as fp:
          return cls(json.load(fp))
  
imports: import json
  import pickle
  from skorch.utils import open_file_like
label_desc: Use image node_id 6 for calling the History obj's underlying member method code with example usage: obj.from_file(cls, f) and returns: cls