docstr: The identity block is the block that has no conv layer at shortcut.
  # Arguments
      kernel_size: default 3, the kernel size of
          middle conv layer at main path
      filters: list of integers, the filters of 3 conv layer at main path
      stage: integer, current stage label, used for generating layer names
      block: 'a','b'..., current block label, used for generating layer names
  # Returns
      Output tensor for the block.
docstr_tok: ["The","identity","block","is","the","block","that","has","no","conv","layer","at","shortcut",".","#","Arguments","kernel_size",":","default","3",",","the","kernel","size","of","middle","conv","layer","at","main","path","filters",":","list","of","integers",",","the","filters","of","3","conv","layer","at","main","path","stage",":","integer",",","current","stage","label",",","used","for","generating","layer","names","block",":","'","a","'",",","'","b","'","...",",","current","block","label",",","used","for","generating","layer","names","#","Returns","Output","tensor","for","the","block","."]
code: def __init__(self, kernel_size, filters, stage, block):
      """The identity block is the block that has no conv layer at shortcut.
      # Arguments
          kernel_size: default 3, the kernel size of
              middle conv layer at main path
          filters: list of integers, the filters of 3 conv layer at main path
          stage: integer, current stage label, used for generating layer names
          block: 'a','b'..., current block label, used for generating layer names
      # Returns
          Output tensor for the block.
      """
      super().__init__(name="identity" + str(stage) + block)
      filters1, filters2, filters3 = filters
      if K.image_data_format() == "channels_last":
          bn_axis = 3
      else:
          bn_axis = 1
  
      conv_name_base = "res" + str(stage) + block + "_branch"
      bn_name_base = "bn" + str(stage) + block + "_branch"
  
      self.conv1 = layers.Conv2D(
          filters1,
          (1, 1),
          kernel_initializer="he_normal",
          name=conv_name_base + "2a",
      )
      self.bn1 = layers.BatchNormalization(
          axis=bn_axis, name=bn_name_base + "2a"
      )
      self.act1 = layers.Activation("relu")
  
      self.conv2 = layers.Conv2D(
          filters2,
          kernel_size,
          padding="same",
          kernel_initializer="he_normal",
          name=conv_name_base + "2b",
      )
      self.bn2 = layers.BatchNormalization(
          axis=bn_axis, name=bn_name_base + "2b"
      )
      self.act2 = layers.Activation("relu")
  
      self.conv3 = layers.Conv2D(
          filters3,
          (1, 1),
          kernel_initializer="he_normal",
          name=conv_name_base + "2c",
      )
      self.bn3 = layers.BatchNormalization(
          axis=bn_axis, name=bn_name_base + "2c"
      )
  
      self.add = layers.Add()
      self.act = layers.Activation("relu")
  
file_path: delta/delta/layers/resnet.py
imports: import delta.compat
  from tensorflow.python.keras import backend
  from delta.layers.base_layer import Layer
label_desc: Use image node_id 1 to create a new IdentityBlock object from inherited base classes: Layer with example: obj = IdentityBlock(kernel_size, filters, stage, block)