code: def conv_block_downsample(x,
                            kernel,
                            strides,
                            padding,
                            separability=0,
                            name=None,
                            reuse=None):
    
    with tf.variable_scope(
        name, default_name="conv_block_downsample", values=[x], reuse=reuse):
      hidden_size = int(x.get_shape()[-1])
      res = conv_block(
          x,
          int(1.25 * hidden_size), [((1, 1), kernel)],
          padding=padding,
          strides=strides,
          name="res_conv")
  
      x = subseparable_conv_block(
          x,
          hidden_size, [((1, 1), kernel)],
          padding=padding,
          separability=separability,
          name="conv0")
      x = subseparable_conv_block(
          x,
          int(1.25 * hidden_size), [((1, 1), kernel)],
          padding=padding,
          separability=separability,
          name="conv1")
      x = pool(x, kernel, "MAX", padding, strides=strides)
  
      x += res
  
      x = subseparable_conv_block(
          x,
          2 * hidden_size, [((1, 1), kernel)],
          first_relu=False,
          padding=padding,
          separability=separability,
          name="conv2")
      x = subseparable_conv_block(
          x,
          int(2.5 * hidden_size), [((1, 1), kernel)],
          padding=padding,
          separability=separability,
          name="conv3")
      return x
docs: Implements a downwards-striding conv block, like Xception exit flow.