code: def identity_block(
      x: tf.Tensor, n_filters: int, n: int = 2
  ) -> tf.Tensor:
      """Construct a Bottleneck Residual Block of Convolutions
      x        : input into the block
      n_filters: number of filters
      n        : multiplier for filters out
      """
      # Save input vector (feature maps) for the identity link
      shortcut = x
  
      ## Construct the 1x1, 3x3, 1x1 residual block (fig 3c)
  
      # Dimensionality reduction
      x = BatchNormalization()(x)
      x = ReLU()(x)
      x = Conv2D(
          n_filters,
          (1, 1),
          strides=(1, 1),
          use_bias=False,
          kernel_regularizer=l2(WEIGHT_DECAY),
      )(x)
  
      # Bottleneck layer
      x = BatchNormalization()(x)
      x = ReLU()(x)
      x = Conv2D(
          n_filters,
          (3, 3),
          strides=(1, 1),
          padding="same",
          use_bias=False,
          kernel_regularizer=l2(WEIGHT_DECAY),
      )(x)
  
      # Dimensionality restoration - increase the number of output filters by
      # 2X or 4X
      x = BatchNormalization()(x)
      x = ReLU()(x)
      x = Conv2D(
          n_filters * n,
          (1, 1),
          strides=(1, 1),
          use_bias=False,
          kernel_regularizer=l2(WEIGHT_DECAY),
      )(x)
  
      # Add the identity link (input) to the output of the residual block
      x = Add()([x, shortcut])
      return x
  
file_path: neural-structured-learning/research/third_party/denoised_smoothing/models/resnet20.py
imports: from typing import Union
  import tensorflow
  from tensorflow.keras import Model, Input
  from tensorflow.keras.layers import Conv2D, Dense, BatchNormalization, ReLU, Add, AveragePooling2D, GlobalAvgPool2D
  from tensorflow.keras.regularizers import l2
label_desc: Use image node_id 4 for calling a global function with example usage: identity_block(x, n_filters, n) and returns: x