code: def test_linucb_training_multiple_epochs(self):
      obss = []
      for i in range(self.batch_size):
          obss.append(
              CBInput(
                  context_arm_features=self.batch.context_arm_features[
                      i : i + 1, :, :
                  ],
                  action=self.batch.action[[i]],
                  reward=self.batch.reward[[i]],
              )
          )
  
      scorer = CBFullyConnectedNetwork(self.x_dim, [7, 9])
      policy = Policy(scorer=scorer, sampler=GreedyActionSampler())
      trainer = SupervisedTrainer(policy)
  
      trainer.training_step(obss[0], 0)
      trainer.on_train_epoch_end()
      trainer.training_step(obss[1], 1)
      trainer.on_train_epoch_end()
  
file_path: ReAgent/reagent/test/training/cb/test_supervised_trainer.py
imports: import unittest
  import torch
  from reagent.core.types import CBInput
  from reagent.gym.policies.policy import Policy
  from reagent.gym.policies.samplers.discrete_sampler import GreedyActionSampler
  from reagent.models.cb_fully_connected_network import CBFullyConnectedNetwork
  from reagent.training.cb.supervised_trainer import SupervisedTrainer
  from reagent.training.parameters import SupervisedTrainerParameters
label_desc: Use image node_id 3 for calling the TestSupervisedTrainer obj's underlying member method code with example usage: obj.test_linucb_training_multiple_epochs() without return types