class_docstr: Implementation of a LeNet model
  
  :param img_size (int): Dimension of input image
  :param hidden_size (int): Hidden layer dimension
  :param num_classes (int): Number of classes for classification
  :param in_channels (int): Number of channels in input specimens
code: def __init__(self, img_size=32, num_classes=10, in_channels=3):
      super(LeNet, self).__init__()
  
      self.img_size = img_size
      self.in_channels = in_channels
      self.num_classes = num_classes
      self.fc_inp = (int((self.img_size - 12) / 4) ** 2) * 16
  
      self.cnn = nn.Sequential(
          nn.Conv2d(self.in_channels, 6, 5),
          nn.Tanh(),
          nn.AvgPool2d(2, stride=2),
          nn.Conv2d(6, 16, 5),
          nn.Tanh(),
          nn.AvgPool2d(2, stride=2),
      )
      self.fc = nn.Sequential(
          nn.Linear(self.fc_inp, 120),
          nn.Tanh(),
          nn.Linear(120, 84),
          nn.Tanh(),
          nn.Linear(84, self.num_classes),
      )
  
file_path: KD_Lib/KD_Lib/models/lenet.py
imports: import torch.nn
label_desc: Use image node_id 1 to create a new LeNet object from inherited base classes: nn with example: obj = LeNet(img_size, num_classes, in_channels)