class_docstr: Re-implementation of SE block -- squeezing spatially
  and exciting channel-wise described in::
  
      Roy et al., Concurrent Spatial and Channel Squeeze & Excitation
      in Fully Convolutional Networks, arXiv:1803.02579
class_docstr_tok: ["Re-implementation","of","SE","block","--","squeezing","spatially","and","exciting","channel-wise","described","in",":",":","Roy","et","al.",",","Concurrent","Spatial","and","Channel","Squeeze","&","Excitation","in","Fully","Convolutional","Networks",",","arXiv:1803.02579"]
code: def layer_op(self, input_tensor):
      # channel squeeze
      conv = ConvolutionalLayer(
          n_output_chns=1,
          kernel_size=1,
          feature_normalization=None,
          acti_func="sigmoid",
          name="se_conv",
      )
  
      squeeze_tensor = conv(input_tensor)
  
      # spatial excitation
      output_tensor = tf.multiply(input_tensor, squeeze_tensor)
  
      return output_tensor
  
file_path: NiftyNet/niftynet/layer/squeeze_excitation.py
imports: from __future__ import absolute_import, print_function
  import tensorflow
  from niftynet.layer.base_layer import Layer
  from niftynet.layer.fully_connected import FullyConnectedLayer
  from niftynet.layer.convolution import ConvolutionalLayer
  from niftynet.utilities.util_common import look_up_operations
label_desc: Use image node_id 2 for calling the SpatialSELayer obj's underlying member method code with example usage: obj.layer_op(input_tensor) and returns: output_tensor