code: def downsample_bottleneck(x, output_channels, dim='2d', stride=1, scope='h'):
    
    conv = CONFIG[dim]['conv']
    with tf.variable_scope(scope):
      x = conv(x, output_channels, 1, strides=stride, padding='SAME',
               activation=None)
      return x
docs: Downsamples 'x' by `stride` using a 1x1 convolution filter.
  
    Args:
      x: input tensor of size [N, H, W, C]
      output_channels: Desired number of output channels.
      dim: '2d' if 2-dimensional, '3d' if 3-dimensional.
      stride: What stride to use. Usually 1 or 2.
      scope: Optional variable scope.
  
    Returns:
      A downsampled tensor of size [N, H/2, W/2, output_channels] if stride
      is 2, else returns a tensor of size [N, H, W, output_channels] if
      stride is 1.