class_docstr: Residual block with expansion convolution followed by pointwise-linear w/ stride
  
  Originally introduced in `EfficientNet-EdgeTPU: Creating Accelerator-Optimized Neural Networks with AutoML`
      - https://ai.googleblog.com/2019/08/efficientnet-edgetpu-creating.html
  
  This layer is also called FusedMBConv in the MobileDet, EfficientNet-X, and EfficientNet-V2 papers
    * MobileDet - https://arxiv.org/abs/2004.14525
    * EfficientNet-X - https://arxiv.org/abs/2102.05610
    * EfficientNet-V2 - https://arxiv.org/abs/2104.00298
class_docstr_tok: ["Residual","block","with","expansion","convolution","followed","by","pointwise-linear","w\/","stride","Originally","introduced","in","`","EfficientNet-EdgeTPU",":","Creating","Accelerator-Optimized","Neural","Networks","with","AutoML","`","-","https",":","\/\/ai.googleblog.com\/2019\/08\/efficientnet-edgetpu-creating.html","This","layer","is","also","called","FusedMBConv","in","the","MobileDet",",","EfficientNet-X",",","and","EfficientNet-V2","papers","*","MobileDet","-","https",":","\/\/arxiv.org\/abs\/2004.14525","*","EfficientNet-X","-","https",":","\/\/arxiv.org\/abs\/2102.05610","*","EfficientNet-V2","-","https",":","\/\/arxiv.org\/abs\/2104.00298"]
code: def forward(self, x):
      shortcut = x
      x = self.conv_exp(x)
      x = self.bn1(x)
      x = self.se(x)
      x = self.conv_pwl(x)
      x = self.bn2(x)
      if self.has_skip:
          x = self.drop_path(x) + shortcut
      return x
  
imports: import torch
  import torch.nn
  from torch.nn import functional
  from timm.layers import create_conv2d, DropPath, make_divisible, create_act_layer, get_norm_act_layer
label_desc: Use image node_id 3 for calling the EdgeResidual obj's underlying member method code with example usage: obj.forward(x) and returns: x