class_docstr: Implementation of "Regularizing Class-wise Predictions via Self-knowledge Distillation"
   https://arxiv.org/pdf/2003.13964.pdf
  
  :param teacher_model (torch.nn.Module): Teacher model -> Should be None
  :param student_model (torch.nn.Module): Student model
  :param train_loader (torch.utils.data.DataLoader): Dataloader for training
  :param val_loader (torch.utils.data.DataLoader): Dataloader for validation/testing
  :param optimizer_teacher (torch.optim.*): Optimizer used for training teacher -> Should be None
  :param optimizer_student (torch.optim.*): Optimizer used for training student
  :param loss_fn (torch.nn.Module):  Calculates loss during distillation
  :param temp (float): Temperature parameter for distillation
  :param lambda (float): loss controlling parameter for distillation
  :param distil_weight (float): Weight paramter for distillation loss
  :param device (str): Device used for training; 'cpu' for cpu and 'cuda' for gpu
  :param log (bool): True if logging required
  :param logdir (str): Directory for storing logs
class_docstr_tok: ["Implementation","of","``","Regularizing","Class-wise","Predictions","via","Self-knowledge","Distillation","''","https",":","\/\/arxiv.org\/pdf\/2003.13964.pdf",":","param","teacher_model","(","torch.nn.Module",")",":","Teacher","model","-",">","Should","be","None",":","param","student_model","(","torch.nn.Module",")",":","Student","model",":","param","train_loader","(","torch.utils.data.DataLoader",")",":","Dataloader","for","training",":","param","val_loader","(","torch.utils.data.DataLoader",")",":","Dataloader","for","validation\/testing",":","param","optimizer_teacher","(","torch.optim",".","*",")",":","Optimizer","used","for","training","teacher","-",">","Should","be","None",":","param","optimizer_student","(","torch.optim",".","*",")",":","Optimizer","used","for","training","student",":","param","loss_fn","(","torch.nn.Module",")",":","Calculates","loss","during","distillation",":","param","temp","(","float",")",":","Temperature","parameter","for","distillation",":","param","lambda","(","float",")",":","loss","controlling","parameter","for","distillation",":","param","distil_weight","(","float",")",":","Weight","paramter","for","distillation","loss",":","param","device","(","str",")",":","Device","used","for","training",";","'cpu","'","for","cpu","and","'cuda","'","for","gpu",":","param","log","(","bool",")",":","True","if","logging","required",":","param","logdir","(","str",")",":","Directory","for","storing","logs"]
docstr: Function used for distilling knowledge to student
  
  :param plot_losses (bool): True if the loss curves need to be plotted
  :param save_model (bool): True if the model needs to be saved
  :param save_model_path (str): Path used for storing the trained student model
docstr_tok: ["Function","used","for","distilling","knowledge","to","student",":","param","plot_losses","(","bool",")",":","True","if","the","loss","curves","need","to","be","plotted",":","param","save_model","(","bool",")",":","True","if","the","model","needs","to","be","saved",":","param","save_model_path","(","str",")",":","Path","used","for","storing","the","trained","student","model"]
code: def train_student(
      self,
      epochs=20,
      plot_losses=True,
      save_model=True,
      save_model_pth="./models/student.pth",
  ):
      """
      Function used for distilling knowledge to student
  
      :param plot_losses (bool): True if the loss curves need to be plotted
      :param save_model (bool): True if the model needs to be saved
      :param save_model_path (str): Path used for storing the trained student model
      """
  
      self.train_distil_model(
          self.student_model,
          self.optimizer_student,
          epochs,
          plot_losses,
          save_model,
          save_model_pth,
      )
  
file_path: KD_Lib/KD_Lib/KD/vision/CSKD/cskd.py
imports: from copy import deepcopy
  import matplotlib.pyplot
  import torch
  import torch.nn
  import torch.nn.functional
  import torch.optim
  from KD_Lib.KD.common import BaseClass
label_desc: Use image node_id 4 for calling the CSKD obj's underlying member method code with example usage: obj.train_student(epochs, plot_losses, save_model, save_model_pth) without return types