class_docstr: Implements a resnet31 block with shortcut
  
  Args:
  ----
      conv_shortcut: Use of shortcut
      output_channels: number of channels to use in Conv2D
      kernel_size: size of square kernels
      strides: strides to use in the first convolution of the block
code: def __init__(
      self,
      output_channels: int,
      conv_shortcut: bool,
      strides: int = 1,
      **kwargs,
  ) -> None:
      super().__init__(**kwargs)
      if conv_shortcut:
          self.shortcut = Sequential(
              [
                  layers.Conv2D(
                      filters=output_channels,
                      strides=strides,
                      padding="same",
                      kernel_size=1,
                      use_bias=False,
                      kernel_initializer="he_normal",
                  ),
                  layers.BatchNormalization(),
              ]
          )
      else:
          self.shortcut = layers.Lambda(lambda x: x)
      self.conv_block = Sequential(
          self.conv_resnetblock(output_channels, 3, strides)
      )
      self.act = layers.Activation("relu")
  
imports: from copy import deepcopy
  from typing import Any, Callable, Dict, List, Optional, Tuple
  import tensorflow
  from tensorflow.keras import layers
  from tensorflow.keras.applications import ResNet50
  from tensorflow.keras.models import Sequential
  from doctr.datasets import VOCABS
  from ...utils import conv_sequence, load_pretrained_params
label_desc: Use image node_id 1 to create a new ResnetBlock object from inherited base classes: layers with example: obj = ResnetBlock(output_channels, conv_shortcut, strides)