code: def se_bottleneck(l, ch_out, stride):
      shortcut = l
      l = Conv2D("conv1", l, ch_out, 1, activation=BNReLU)
      l = Conv2D(
          "conv2", l, ch_out, 3, strides=stride, activation=BNReLU
      )
      l = Conv2D(
          "conv3", l, ch_out * 4, 1, activation=get_bn(zero_init=True)
      )
  
      squeeze = GlobalAvgPooling("gap", l)
      squeeze = FullyConnected(
          "fc1", squeeze, ch_out // 4, activation=tf.nn.relu
      )
      squeeze = FullyConnected(
          "fc2", squeeze, ch_out * 4, activation=tf.nn.sigmoid
      )
      data_format = get_arg_scope()["Conv2D"]["data_format"]
      ch_ax = 1 if data_format in ["NCHW", "channels_first"] else 3
      shape = [-1, 1, 1, 1]
      shape[ch_ax] = ch_out * 4
      l = l * tf.reshape(squeeze, shape)
      out = l + resnet_shortcut(
          shortcut,
          ch_out * 4,
          stride,
          activation=get_bn(zero_init=False),
      )
      return tf.nn.relu(out)
  
file_path: tensorpack/examples/Saliency/resnet_model.py
imports: import tensorflow
  from tensorpack import tfv1
  from tensorpack.models import BatchNorm, BNReLU, Conv2D, FullyConnected, GlobalAvgPooling, MaxPooling
  from tensorpack.tfutils.argscope import argscope, get_arg_scope
label_desc: Use image node_id 9 for calling a global function with example usage: se_bottleneck(l, ch_out, stride) and returns: tf