code: def forward(self, x, top_k=None):
      x = self.conv1(x)
      x = F.relu(x)
      x = self.conv2(x)
      x = F.relu(x)
      x = F.max_pool2d(x, 2)
      x = self.dropout1(x)
  
      x = self.conv3(x)
      x = F.relu(x)
      x = self.conv4(x)
      x = F.relu(x)
      x = F.max_pool2d(x, 2)
      x = self.dropout2(x)
  
      x = torch.flatten(x, 1)
  
      if self.use_moe:
          x = self.moe_ffn(x, top_k=top_k)
      else:
          x = self.fc1(x)
          x = self.dropout3(F.relu(x))
          x = self.fc2(x)
  
      output = F.log_softmax(x, dim=1)
      return output
  
file_path: tutel/tutel/examples/moe_cifar10.py
imports: import argparse
  import torch
  import torch.nn
  import torch.nn.functional
  import torch.optim
  from torchvision import datasets, transforms
  from torch.optim.lr_scheduler import StepLR
  from tutel import system
  from tutel import moe
  from tutel import net
  import logging
label_desc: Use image node_id 2 for calling the Net obj's underlying member method code with example usage: obj.forward(x, top_k) and returns: output