class_docstr: Basic CNN architecture.
class_docstr_tok: ["Basic","CNN","architecture","."]
code: def __init__(self, in_channels=1):
      super(CNN, self).__init__()
      self.conv1 = nn.Conv2d(
          in_channels, 64, 8, 1
      )  # (batch_size, 3, 28, 28) --> (batch_size, 64, 21, 21)
      self.conv2 = nn.Conv2d(
          64, 128, 6, 2
      )  # (batch_size, 64, 21, 21) --> (batch_size, 128, 8, 8)
      self.conv3 = nn.Conv2d(
          128, 128, 5, 1
      )  # (batch_size, 128, 8, 8) --> (batch_size, 128, 4, 4)
      self.fc1 = nn.Linear(
          128 * 4 * 4, 128
      )  # (batch_size, 128, 4, 4) --> (batch_size, 2048)
      self.fc2 = nn.Linear(128, 10)
  
file_path: cleverhans/tutorials/torch/mnist_tutorial.py
imports: from absl import app, flags
  from easydict import EasyDict
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  import torchvision
  from datasets import MNISTDataset
  from cleverhans.torch.attacks.fast_gradient_method import fast_gradient_method
  from cleverhans.torch.attacks.projected_gradient_descent import projected_gradient_descent
label_desc: Use image node_id 1 to create a new CNN object from inherited base classes: torch.nn with example: obj = CNN(in_channels)