code: def _train_single_batch(self, text, cls, weight, optimizer):
      train_loss = 0.0
      train_acc = 0.0
  
      optimizer.zero_grad()
  
      text, cls, weight = (
          text.to(self.device),
          cls.to(self.device),
          weight.to(self.device),
      )
      output = self.model(text)
  
      with torch.no_grad():
          if self.num_classes == 2:
              target = F.one_hot(cls, 2).float()
          else:
              target = cls
      loss = self.criterion(output, target)
      loss = loss * weight
      loss = loss.mean()
  
      loss.backward()
  
      torch.nn.utils.clip_grad_norm_(self.model.parameters(), 3)
  
      optimizer.step()
  
      train_loss += loss.item()
      train_acc += self.sum_up_accuracy_(output, cls)
  
      del text, cls, output
  
      return train_loss, train_acc
  
imports: import datetime
  import logging
  import tempfile
  import numpy
  from functools import partial
  from sklearn.preprocessing import MultiLabelBinarizer
  from small_text.classifiers.classification import EmbeddingMixin
  from small_text.integrations.pytorch.classifiers.base import PytorchClassifier
  from small_text.integrations.pytorch.exceptions import PytorchNotFoundError
  from small_text.integrations.pytorch.models.kimcnn import KimCNN
  from small_text.utils.classification import get_splits
  from small_text.utils.context import build_pbar_context
  from small_text.utils.data import check_training_data, list_length
  from small_text.utils.annotations import early_stopping_deprecation_warning
  from small_text.utils.labels import csr_to_list, get_num_labels
  from small_text.utils.datetime import format_timedelta
  from small_text.utils.logging import verbosity_logger, VERBOSITY_MORE_VERBOSE
  from small_text.utils.system import get_tmp_dir_base
label_desc: Use image node_id 9 for calling the KimCNNClassifier obj's underlying member method code with example usage: obj._train_single_batch(text, cls, weight, optimizer) and returns: train_loss,  train_acc