class_docstr: Convolutional FFN Module.
class_docstr_tok: ["Convolutional","FFN","Module","."]
docstr: Build convolutional FFN module.
  
  Args:
      in_channels: Number of input channels.
      hidden_channels: Number of channels after expansion. Default: None
      out_channels: Number of output channels. Default: None
      act_layer: Activation layer. Default: ``GELU``
      drop: Dropout rate. Default: ``0.0``.
code: def __init__(
      self,
      in_channels: int,
      hidden_channels: Optional[int] = None,
      out_channels: Optional[int] = None,
      act_layer: nn.Module = nn.GELU,
      drop: float = 0.0,
  ) -> None:
      """Build convolutional FFN module.
  
      Args:
          in_channels: Number of input channels.
          hidden_channels: Number of channels after expansion. Default: None
          out_channels: Number of output channels. Default: None
          act_layer: Activation layer. Default: ``GELU``
          drop: Dropout rate. Default: ``0.0``.
      """
      super().__init__()
      out_channels = out_channels or in_channels
      hidden_channels = hidden_channels or in_channels
      self.conv = nn.Sequential()
      self.conv.add_module(
          "conv",
          nn.Conv2d(
              in_channels=in_channels,
              out_channels=out_channels,
              kernel_size=7,
              padding=3,
              groups=in_channels,
              bias=False,
          ),
      )
      self.conv.add_module(
          "bn", nn.BatchNorm2d(num_features=out_channels)
      )
      self.fc1 = nn.Conv2d(in_channels, hidden_channels, kernel_size=1)
      self.act = act_layer()
      self.fc2 = nn.Conv2d(hidden_channels, out_channels, kernel_size=1)
      self.drop = nn.Dropout(drop)
      self.apply(self._init_weights)
  
imports: import os
  import copy
  from functools import partial
  from typing import List, Tuple, Optional, Union
  import torch
  import torch.nn
  from timm.data import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD
  from timm.models.layers import DropPath, trunc_normal_
  from timm.models.registry import register_model
  from models.modules.mobileone import MobileOneBlock
  from models.modules.replknet import ReparamLargeKernelConv
label_desc: Use image node_id 1 to create a new ConvFFN object from inherited base classes: nn with example: obj = ConvFFN(in_channels, hidden_channels, out_channels, act_layer, drop)