class_docstr: Split-Attention (aka Splat)
      
code: def forward(self, x):
      x = self.conv(x)
      x = self.bn0(x)
      x = self.drop(x)
      x = self.act0(x)
  
      B, RC, H, W = x.shape
      if self.radix > 1:
          x = x.reshape((B, self.radix, RC // self.radix, H, W))
          x_gap = x.sum(dim=1)
      else:
          x_gap = x
      x_gap = x_gap.mean((2, 3), keepdim=True)
      x_gap = self.fc1(x_gap)
      x_gap = self.bn1(x_gap)
      x_gap = self.act1(x_gap)
      x_attn = self.fc2(x_gap)
  
      x_attn = self.rsoftmax(x_attn).view(B, -1, 1, 1)
      if self.radix > 1:
          out = (
              x
              * x_attn.reshape((B, self.radix, RC // self.radix, 1, 1))
          ).sum(dim=1)
      else:
          out = x * x_attn
      return out.contiguous()
  
file_path: pytorch-image-models/timm/layers/split_attn.py
imports: import torch
  import torch.nn.functional
  from torch import nn
  from .helpers import make_divisible
label_desc: Use image node_id 2 for calling the SplitAttn obj's underlying member method code with example usage: obj.forward(x) and returns: out