class_docstr: BERT language model pretraining.
class_docstr_tok: ["BERT","language","model","pretraining","."]
docstr: Called at the end of validation to aggregate outputs.
  
  Args:
      outputs (list): The individual outputs of each validation step.
  
  Returns:
      dict: Validation loss and tensorboard logs.
docstr_tok: ["Called","at","the","end","of","validation","to","aggregate","outputs",".","Args",":","outputs","(","list",")",":","The","individual","outputs","of","each","validation","step",".","Returns",":","dict",":","Validation","loss","and","tensorboard","logs","."]
code: def on_validation_epoch_end(self):
      """Called at the end of validation to aggregate outputs.
  
      Args:
          outputs (list): The individual outputs of each validation step.
  
      Returns:
          dict: Validation loss and tensorboard logs.
      """
      if self.validation_step_outputs:
          avg_loss = torch.stack(
              [x["val_loss"] for x in self.validation_step_outputs]
          ).mean()
          perplexity = self.validation_perplexity.compute()
          logging.info(
              f"evaluation perplexity {perplexity.cpu().item()}"
          )
          self.log(f"val_loss", avg_loss)
          self.validation_step_outputs.clear()
  
imports: import os
  from typing import Dict, Optional
  import torch
  from omegaconf import DictConfig, OmegaConf
  from pytorch_lightning import Trainer
  from torch.utils.data import DataLoader
  from nemo.collections.common.losses import AggregatorLoss, CrossEntropyLoss, SmoothedCrossEntropyLoss
  from nemo.collections.common.metrics import Perplexity
  from nemo.collections.nlp.data.language_modeling.lm_bert_dataset import BertPretrainingDataset, BertPretrainingPreprocessedDataloader
  from nemo.collections.nlp.modules.common import BertPretrainingTokenClassifier, SequenceClassifier
  from nemo.collections.nlp.modules.common.lm_utils import get_lm_model
  from nemo.collections.nlp.modules.common.tokenizer_utils import get_tokenizer
  from nemo.core.classes.common import PretrainedModelInfo, typecheck
  from nemo.core.classes.modelPT import ModelPT
  from nemo.core.neural_types import NeuralType
  from nemo.utils import logging
label_desc: Use image node_id 9 for calling the BERTLMModel obj's underlying member method code with example usage: obj.on_validation_epoch_end() without return types