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 __init__(
      self,
      in_features: int,
      out_features: int,
      init_weight_v: Optional[torch.Tensor] = None,
  ):
      super().__init__()
      self.weight_v = nn.Parameter(
          torch.Tensor(out_features, in_features)
      )
      self.register_buffer("weight_g", torch.Tensor(out_features, 1))
      if init_weight_v is not None:
          self.weight_v.data.copy_(init_weight_v)
      self.weight_g.data.fill_(1)
  
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 1 to create a new NormalizedLinearLayer object from inherited base classes: nn with example: obj = NormalizedLinearLayer(in_features, out_features, init_weight_v)