class_docstr: The Position-wise FFN layer used in Transformer-like architectures
  
  If pre_norm is True:
      norm(data) -> fc1 -> act -> act_dropout -> fc2 -> dropout -> res(+data)
  Else:
      data -> fc1 -> act -> act_dropout -> fc2 -> dropout -> norm(res(+data))
  Also, if we use gated projection. We will use
      fc1_1 * act(fc1_2(data)) to map the data
code: def init_weights(self):
      for module in self.children():
          if isinstance(module, nn.Linear):
              nn.init.xavier_uniform_(module.weight)
              if module.bias is not None:
                  nn.init.zeros_(module.bias)
  
imports: import math
  from collections import OrderedDict
  import torch
  import numpy
  from torch import nn
  from typing import Union
  from .utils import to_torch_dtype
label_desc: Use image node_id 2 for calling the PositionwiseFFN obj's underlying member method code with example usage: obj.init_weights() without return types