code: def forward_iter(self, X, training=False, device='cpu'):
          
          dataset = self.get_dataset(X)
          iterator = self.get_iterator(dataset, training=training)
          for data in iterator:
              Xi = unpack_data(data)[0]
              yp = self.evaluation_step(Xi, training=training)
              if isinstance(yp, tuple):
                  yield tuple(n.to(device) for n in yp)
              else:
                  yield yp.to(device)
docs: Yield outputs of module forward calls on each batch of data.
          The storage device of the yielded tensors is determined
          by the ``device`` parameter.
  
          Parameters
          ----------
          X : input data, compatible with skorch.dataset.Dataset
            By default, you should be able to pass:
  
              * numpy arrays
              * torch tensors
              * pandas DataFrame or Series
              * scipy sparse CSR matrices
              * a dictionary of the former three
              * a list/tuple of the former three
              * a Dataset
  
            If this doesn't work with your data, you have to pass a
            ``Dataset`` that can deal with the data.
  
          training : bool (default=False)
            Whether to set the module to train mode or not.
  
          device : string (default='cpu')
            The device to store each inference result on.
            This defaults to CPU memory since there is genereally
            more memory available there. For performance reasons
            this might be changed to a specific CUDA device,
            e.g. 'cuda:0'.
  
          Yields
          ------
          yp : torch tensor
            Result from a forward call on an individual batch.