code: def __init__(
      self,
      nb_filters=(1, 32, 64),
      kernel_sizes=(5, 5),
      paddings=(2, 2),
      strides=(1, 1),
      pool_sizes=(2, 2),
      nb_hiddens=(7 * 7 * 64, 1024),
      nb_classes=10,
  ):
      super(LeNet5Madry, self).__init__()
      self.conv1 = nn.Conv2d(
          nb_filters[0],
          nb_filters[1],
          kernel_size=kernel_sizes[0],
          padding=paddings[0],
          stride=strides[0],
      )
      self.relu1 = nn.ReLU(inplace=True)
      self.maxpool1 = nn.MaxPool2d(pool_sizes[0])
      self.conv2 = nn.Conv2d(
          nb_filters[1],
          nb_filters[2],
          kernel_size=kernel_sizes[1],
          padding=paddings[0],
          stride=strides[0],
      )
      self.relu2 = nn.ReLU(inplace=True)
      self.maxpool2 = nn.MaxPool2d(pool_sizes[1])
      self.linear1 = nn.Linear(nb_hiddens[0], nb_hiddens[1])
      self.relu3 = nn.ReLU(inplace=True)
      self.linear2 = nn.Linear(nb_hiddens[1], nb_classes)
  
imports: import math
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 1 to create a new LeNet5Madry object from inherited base classes: nn with example: obj = LeNet5Madry(nb_filters, kernel_sizes, paddings, strides, pool_sizes, nb_hiddens, nb_classes)