class_docstr: The :class:`InverseLayer` class performs inverse operations
  for a single layer of a neural network by applying the
  partial derivative of the layer to be inverted with
  respect to its input: transposed layer
  for a :class:`DenseLayer`, deconvolutional layer for
  :class:`Conv2DLayer`, :class:`Conv1DLayer`; or
  an unpooling layer for :class:`MaxPool2DLayer`.
  
  It is specially useful for building (convolutional)
  autoencoders with tied parameters.
  
  Note that if the layer to be inverted contains a nonlinearity
  and/or a bias, the :class:`InverseLayer` will include the derivative
  of that in its computation.
  
  Parameters
  ----------
  incoming : a :class:`Layer` instance or a tuple
      The layer feeding into this layer, or the expected input shape.
  layer : a :class:`Layer` instance or a tuple
      The layer with respect to which the instance of the
      :class:`InverseLayer` is inverse to.
  
  Examples
  --------
  >>> import lasagne
  >>> from lasagne.layers import InputLayer, Conv2DLayer, DenseLayer
  >>> from lasagne.layers import InverseLayer
  >>> l_in = InputLayer((100, 3, 28, 28))
  >>> l1 = Conv2DLayer(l_in, num_filters=16, filter_size=5)
  >>> l2 = DenseLayer(l1, num_units=20)
  >>> l_u2 = InverseLayer(l2, l2)  # backprop through l2
  >>> l_u1 = InverseLayer(l_u2, l1)  # backprop through l1
code: def __init__(self, incoming, layer, **kwargs):
      super(InverseLayer, self).__init__(
          [incoming, layer, layer.input_layer], **kwargs
      )
  
imports: import theano
  import theano.tensor
  import numpy
  from ..None import init
  from ..None import nonlinearities
  from ..utils import as_tuple, floatX, int_types
  from ..random import get_rng
  from .base import Layer, MergeLayer
  from theano.sandbox.rng_mrg import MRG_RandomStreams
label_desc: Use image node_id 1 to create a new InverseLayer object from inherited base classes: MergeLayer with example: obj = InverseLayer(incoming, layer)