docstr: Channel shuffle: [N,C,H,W] -> [N,g,C/g,H,W] -> [N,C/g,g,H,w] -> [N,C,H,W]
docstr_tok: ["Channel","shuffle",":","[","N",",","C",",","H",",","W","]","-",">","[","N",",","g",",","C\/g",",","H",",","W","]","-",">","[","N",",","C\/g",",","g",",","H",",","w","]","-",">","[","N",",","C",",","H",",","W","]"]
code: def forward(self, x):
      """Channel shuffle: [N,C,H,W] -> [N,g,C/g,H,W] -> [N,C/g,g,H,w] -> [N,C,H,W]"""
      N, C, H, W = x.size()
      g = self.groups
      return (
          x.view(N, g, C / g, H, W)
          .permute(0, 2, 1, 3, 4)
          .contiguous()
          .view(N, C, H, W)
      )
  
file_path: nni/examples/trials/cifar10_pytorch/models/shufflenet.py
imports: import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 2 for calling the ShuffleBlock obj's underlying member method code with example usage: obj.forward(x) and returns: x