code: def __init__(self, nb_filters=64):
      super(CNN, self).__init__()
      img_size = 32
      log_resolution = int(round(math.log(img_size) / math.log(2)))
      conv_args = dict(
          activation=tf.nn.leaky_relu, kernel_size=3, padding="same"
      )
      self.layers_obj = []
      for scale in range(log_resolution - 2):
          conv1 = Conv2D(nb_filters << scale, **conv_args)
          conv2 = Conv2D(nb_filters << (scale + 1), **conv_args)
          pool = AveragePooling2D(pool_size=(2, 2), strides=(2, 2))
          self.layers_obj.append(conv1)
          self.layers_obj.append(conv2)
          self.layers_obj.append(pool)
      conv = Conv2D(10, **conv_args)
      self.layers_obj.append(conv)
  
file_path: cleverhans/tutorials/tf2/cifar10_tutorial.py
imports: import math
  import numpy
  import tensorflow
  import tensorflow_datasets
  from absl import app, flags
  from easydict import EasyDict
  from tensorflow.keras import Model
  from tensorflow.keras.layers import AveragePooling2D, Conv2D
  from cleverhans.tf2.attacks.projected_gradient_descent import projected_gradient_descent
  from cleverhans.tf2.attacks.fast_gradient_method import fast_gradient_method
label_desc: Use image node_id 1 to create a new CNN object from inherited base classes: Model with example: obj = CNN(nb_filters)