class_docstr: Linear layer where the weights are normalized, equivalent to the output
  of "nn.utils.weight_norm" but compatible with FSDP
class_docstr_tok: ["Linear","layer","where","the","weights","are","normalized",",","equivalent","to","the","output","of","``","nn.utils.weight_norm","''","but","compatible","with","FSDP"]
code: def forward(self, input: torch.Tensor) -> torch.Tensor:
      # The following code is equivalent to, but keeps more
      # precision than:
      #
      #   norm = self.weight_v.norm(dim=-1, keepdim=True)
      #   weight = self.weight_v / norm * self.weight_g
      #
      # And wo we keep it that way:
      weight_norm = WeightNorm(name="weight", dim=0)
      weight = weight_norm.compute_weight(self)
      return F.linear(input, weight)
  
file_path: vissl/vissl/models/heads/dino_head.py
imports: from typing import List, Optional
  import torch
  import torch.nn
  import torch.nn.functional
  from torch.nn.utils.weight_norm import WeightNorm
  from vissl.config import AttrDict
  from vissl.models.heads import register_model_head
  from vissl.models.model_helpers import trunc_normal_
  from vissl.utils.fsdp_utils import fsdp_wrapper
label_desc: Use image node_id 2 for calling the NormalizedLinearLayer obj's underlying member method code with example usage: obj.forward(input) and returns: F