class_docstr: Implementation of the upsampling layer with residual like connections,
  described in paper:
  
      Wojna et al., The devil is in the decoder,
      https://arxiv.org/abs/1707.05847
docstr: output is an elementwise sum of deconvolution and additive upsampling::
  
      --(inputs)--o--deconvolution-------+--(outputs)--
                  |                      |
                  o--additive upsampling-o
  :param input_tensor:
  :param is_training:
  :return: an upsampled tensor with ``n_input_channels/n_splits``
      feature channels.
docstr_tok: ["output","is","an","elementwise","sum","of","deconvolution","and","additive","upsampling",":",":","--","(","inputs",")","--","o","--","deconvolution","--","--","--","-+","--","(","outputs",")","--","|","|","o","--","additive","upsampling-o",":","param","input_tensor",":",":","param","is_training",":",":","return",":","an","upsampled","tensor","with","``","n_input_channels\/n_splits","``","feature","channels","."]
code: def layer_op(self, input_tensor, is_training=True):
      """
      output is an elementwise sum of deconvolution and additive upsampling::
  
          --(inputs)--o--deconvolution-------+--(outputs)--
                      |                      |
                      o--additive upsampling-o
      :param input_tensor:
      :param is_training:
      :return: an upsampled tensor with ``n_input_channels/n_splits``
          feature channels.
      """
      n_output_chns = check_divisible_channels(
          input_tensor, self.n_splits
      )
      # deconvolution path
      deconv_output = Deconv(
          n_output_chns=n_output_chns,
          with_bias=False,
          feature_normalization="batch",
          **self.deconv_param,
      )(input_tensor, is_training)
  
      # additive upsampling path
      additive_output = AdditiveUpsampleLayer(
          new_size=deconv_output.get_shape().as_list()[1:-1],
          n_splits=self.n_splits,
      )(input_tensor)
  
      output_tensor = ElementwiseLayer("SUM")(
          deconv_output, additive_output
      )
      return output_tensor
  
file_path: NiftyNet/niftynet/layer/additive_upsample.py
imports: from __future__ import absolute_import, print_function
  import tensorflow
  from niftynet.layer.base_layer import Layer
  from niftynet.layer.base_layer import TrainableLayer
  from niftynet.layer.linear_resize import LinearResizeLayer
  from niftynet.layer.deconvolution import DeconvolutionalLayer
  from niftynet.layer.layer_util import check_divisible_channels
  from niftynet.layer.elementwise import ElementwiseLayer
label_desc: Use image node_id 2 for calling the ResidualUpsampleLayer obj's underlying member method code with example usage: obj.layer_op(input_tensor, is_training) and returns: output_tensor