class_docstr: Generate the ENet model.
  
  :param num_classes: (int): the number of classes to segment.
  :param encoder_relu: (bool, optional): When ``True`` ReLU is used as the
      activation function in the encoder blocks/layers; otherwise, PReLU
      is used. Default: False.
  :param decoder_relu: (bool, optional): When ``True`` ReLU is used as the
      activation function in the decoder blocks/layers; otherwise, PReLU
      is used. Default: True.
class_docstr_tok: ["Generate","the","ENet","model",".",":","param","num_classes",":","(","int",")",":","the","number","of","classes","to","segment",".",":","param","encoder_relu",":","(","bool",",","optional",")",":","When","``","True","``","ReLU","is","used","as","the","activation","function","in","the","encoder","blocks\/layers",";","otherwise",",","PReLU","is","used",".","Default",":","False",".",":","param","decoder_relu",":","(","bool",",","optional",")",":","When","``","True","``","ReLU","is","used","as","the","activation","function","in","the","decoder","blocks\/layers",";","otherwise",",","PReLU","is","used",".","Default",":","True","."]
code: def __init__(
      self, num_classes, encoder_relu=False, decoder_relu=True, **kwargs
  ):
      super().__init__()
  
      self.initial_block = InitialBlock(
          3, 16, padding=1, relu=encoder_relu
      )
  
      # Stage 1 - Encoder
      self.downsample1_0 = DownsamplingBottleneck(
          16,
          64,
          padding=1,
          return_indices=True,
          dropout_prob=0.01,
          relu=encoder_relu,
      )
      self.regular1_1 = RegularBottleneck(
          64, padding=1, dropout_prob=0.01, relu=encoder_relu
      )
      self.regular1_2 = RegularBottleneck(
          64, padding=1, dropout_prob=0.01, relu=encoder_relu
      )
      self.regular1_3 = RegularBottleneck(
          64, padding=1, dropout_prob=0.01, relu=encoder_relu
      )
      self.regular1_4 = RegularBottleneck(
          64, padding=1, dropout_prob=0.01, relu=encoder_relu
      )
  
      # Stage 2 - Encoder
      self.downsample2_0 = DownsamplingBottleneck(
          64,
          128,
          padding=1,
          return_indices=True,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.regular2_1 = RegularBottleneck(
          128, padding=1, dropout_prob=0.1, relu=encoder_relu
      )
      self.dilated2_2 = RegularBottleneck(
          128,
          dilation=2,
          padding=2,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.asymmetric2_3 = RegularBottleneck(
          128,
          kernel_size=5,
          padding=2,
          asymmetric=True,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.dilated2_4 = RegularBottleneck(
          128,
          dilation=4,
          padding=4,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.regular2_5 = RegularBottleneck(
          128, padding=1, dropout_prob=0.1, relu=encoder_relu
      )
      self.dilated2_6 = RegularBottleneck(
          128,
          dilation=8,
          padding=8,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.asymmetric2_7 = RegularBottleneck(
          128,
          kernel_size=5,
          asymmetric=True,
          padding=2,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.dilated2_8 = RegularBottleneck(
          128,
          dilation=16,
          padding=16,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
  
      # Stage 3 - Encoder
      self.regular3_0 = RegularBottleneck(
          128, padding=1, dropout_prob=0.1, relu=encoder_relu
      )
      self.dilated3_1 = RegularBottleneck(
          128,
          dilation=2,
          padding=2,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.asymmetric3_2 = RegularBottleneck(
          128,
          kernel_size=5,
          padding=2,
          asymmetric=True,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.dilated3_3 = RegularBottleneck(
          128,
          dilation=4,
          padding=4,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.regular3_4 = RegularBottleneck(
          128, padding=1, dropout_prob=0.1, relu=encoder_relu
      )
      self.dilated3_5 = RegularBottleneck(
          128,
          dilation=8,
          padding=8,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.asymmetric3_6 = RegularBottleneck(
          128,
          kernel_size=5,
          asymmetric=True,
          padding=2,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
      self.dilated3_7 = RegularBottleneck(
          128,
          dilation=16,
          padding=16,
          dropout_prob=0.1,
          relu=encoder_relu,
      )
  
      # Stage 4 - Decoder
      self.upsample4_0 = UpsamplingBottleneck(
          128, 64, padding=1, dropout_prob=0.1, relu=decoder_relu
      )
      self.regular4_1 = RegularBottleneck(
          64, padding=1, dropout_prob=0.1, relu=decoder_relu
      )
      self.regular4_2 = RegularBottleneck(
          64, padding=1, dropout_prob=0.1, relu=decoder_relu
      )
  
      # Stage 5 - Decoder
      self.upsample5_0 = UpsamplingBottleneck(
          64, 16, padding=1, dropout_prob=0.1, relu=decoder_relu
      )
      self.regular5_1 = RegularBottleneck(
          16, padding=1, dropout_prob=0.1, relu=decoder_relu
      )
      self.transposed_conv = nn.ConvTranspose2d(
          16,
          num_classes,
          kernel_size=3,
          stride=2,
          padding=1,
          output_padding=1,
          bias=False,
      )
  
imports: import torch.nn
  import torch
label_desc: Use image node_id 1 to create a new ENet object from inherited base classes: nn with example: obj = ENet(num_classes, encoder_relu, decoder_relu)