code: def push_training_data(self, losses, lr):
      tb_datapack = tensorboard_helper.TensorboardDatapack()
      tb_datapack.set_training(True)
      tb_datapack.set_iteration(self.iteration)
      for key in losses.keys():
          if "loss" in key or "reg" in key:
              if key == "lpips_loss" and losses[key] == 0:
                  pass
              else:
                  tb_datapack.add_scalar(
                      {f"train_loss/{key}": losses[key]}
                  )
      tb_datapack.add_scalar({"lr/lr": lr})
      tb_datapack.add_scalar(
          {
              "hyper_params/offset_scale": self.net.offset_nets[
                  0
              ].nerf.scale
          }
      )
      tb_datapack.add_scalar(
          {"hyper_params/penalize_mask": self.penalize_mask}
      )
      tb_datapack.add_scalar(
          {
              "hyper_params/penalize_symmetric_alpha": self.penalize_symmetric_alpha
          }
      )
      tb_datapack.add_scalar(
          {"hyper_params/penalize_dummy": self.penalize_dummy}
      )
      tb_datapack.add_scalar(
          {"hyper_params/penalize_smpl_alpha": self.penalize_smpl_alpha}
      )
      self.tb_pusher.push_to_tensorboard(tb_datapack)
  
imports: import os
  import math
  import time
  import random
  import tqdm
  import torch
  import torch.nn.functional
  import numpy
  import torchvision.utils
  import igl
  import lpips
  from utils import utils, render_utils, ray_utils
  from trainers import tensorboard_helper
  from options import options
  from cameras.captures import ResizedPinholeCapture
  from cameras.pinhole_camera import PinholeCamera
  from models.vanilla import weight_reset
  from utils.constant import HARD_SURFACE_OFFSET, PATCH_SIZE, PATCH_SIZE_SQUARED, CANONICAL_ZOOM_FACTOR, CANONICAL_CAMERA_DIST
label_desc: Use image node_id 17 for calling the HumanNeRFTrainer obj's underlying member method code with example usage: obj.push_training_data(losses, lr) without return types