class_docstr: Xception optimized for the ImageNet dataset, as specified in
  https://arxiv.org/pdf/1610.02357.pdf
class_docstr_tok: ["Xception","optimized","for","the","ImageNet","dataset",",","as","specified","in","https",":","\/\/arxiv.org\/pdf\/1610.02357.pdf"]
docstr: Constructor
  Args:
      num_classes: number of classes
docstr_tok: ["Constructor","Args",":","num_classes",":","number","of","classes"]
code: def __init__(self, num_classes=1000):
      """Constructor
      Args:
          num_classes: number of classes
      """
      super(Xception, self).__init__()
      self.num_classes = num_classes
  
      self.conv1 = layer.Conv2d(3, 32, 3, 2, 0, bias=False)
      self.bn1 = layer.BatchNorm2d(32)
      self.relu1 = layer.ReLU()
  
      self.conv2 = layer.Conv2d(32, 64, 3, 1, 1, bias=False)
      self.bn2 = layer.BatchNorm2d(64)
      self.relu2 = layer.ReLU()
      # Relu Layer
  
      self.block1 = Block(
          64,
          128,
          2,
          2,
          padding=0,
          start_with_relu=False,
          grow_first=True,
      )
      self.block2 = Block(
          128,
          256,
          2,
          2,
          padding=0,
          start_with_relu=True,
          grow_first=True,
      )
      self.block3 = Block(
          256,
          728,
          2,
          2,
          padding=0,
          start_with_relu=True,
          grow_first=True,
      )
  
      self.block4 = Block(
          728, 728, 3, 1, start_with_relu=True, grow_first=True
      )
      self.block5 = Block(
          728, 728, 3, 1, start_with_relu=True, grow_first=True
      )
      self.block6 = Block(
          728, 728, 3, 1, start_with_relu=True, grow_first=True
      )
      self.block7 = Block(
          728, 728, 3, 1, start_with_relu=True, grow_first=True
      )
  
      self.block8 = Block(
          728, 728, 3, 1, start_with_relu=True, grow_first=True
      )
      self.block9 = Block(
          728, 728, 3, 1, start_with_relu=True, grow_first=True
      )
      self.block10 = Block(
          728, 728, 3, 1, start_with_relu=True, grow_first=True
      )
      self.block11 = Block(
          728, 728, 3, 1, start_with_relu=True, grow_first=True
      )
  
      self.block12 = Block(
          728, 1024, 2, 2, start_with_relu=True, grow_first=False
      )
  
      self.conv3 = layer.SeparableConv2d(1024, 1536, 3, 1, 1)
      self.bn3 = layer.BatchNorm2d(1536)
      self.relu3 = layer.ReLU()
  
      # Relu Layer
      self.conv4 = layer.SeparableConv2d(1536, 2048, 3, 1, 1)
      self.bn4 = layer.BatchNorm2d(2048)
  
      self.relu4 = layer.ReLU()
      self.globalpooling = layer.MaxPool2d(10, 1)
      self.flatten = layer.Flatten()
      self.fc = layer.Linear(2048, num_classes)
  
file_path: singa/examples/cifar_distributed_cnn/autograd/xceptionnet.py
imports: from singa import autograd
  from singa import tensor
  from singa import device
  from singa import layer
  from singa import opt
  import numpy
  from tqdm import trange
label_desc: Use image node_id 1 to create a new Xception object from inherited base classes: layer with example: obj = Xception(num_classes)