class_docstr: Image to Patch Embedding
  
  Args:
      img_size (int): Image size.  Default: 224.
      patch_size (int): Patch token size. Default: 4.
      in_chans (int): Number of input image channels. Default: 3.
      embed_dim (int): Number of linear projection output channels. Default: 96.
      norm_layer (nn.Module, optional): Normalization layer. Default: None
code: def forward(self, x):
      B, C, H, W = x.shape
      # FIXME look at relaxing size constraints
      assert (
          H == self.img_size[0] and W == self.img_size[1]
      ), f"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]})."
      x = self.proj(x).flatten(2).transpose(1, 2)  # B Ph*Pw C
      if self.norm is not None:
          x = self.norm(x)
      return x
  
imports: from typing import List, Optional
  import torch
  import torch.nn
  import torch.utils.checkpoint
  from vissl.config import AttrDict
  from vissl.models.model_helpers import DropPath, to_2tuple, trunc_normal_
  from vissl.models.trunks import register_model_trunk
label_desc: Use image node_id 2 for calling the PatchEmbed obj's underlying member method code with example usage: obj.forward(x) and returns: x