class_docstr: Unpooling over a set of 2d planes.
code: def _integer_scale_forward(self, x):
      xp = backend.get_array_module(x)
      b, c, h, w = x.shape
      bs, cs, hs, ws = x.strides
      if self.ph > 0 or self.pw > 0:
          x = x[
              :,
              :,
              self.ph // 2 : -self.ph // 2,
              self.pw // 2 : -self.pw // 2,
          ]
      y = xp.lib.stride_tricks.as_strided(
          x,
          (b, c, h - self.ph, self.kh, w - self.pw, self.kw),
          (bs, cs, hs, 0, ws, 0),
      )
      y = y.reshape(
          (b, c, self.kh * (h - self.ph), self.kw * (w - self.pw))
      )
      return (y,)
  
imports: import numpy
  import numpy.lib.stride_tricks
  from chainer import backend
  from chainer.backends import cuda
  from chainer import function_node
  from chainer.functions.pooling import pooling_2d
  from chainer.utils import conv
  from chainer.utils import type_check
label_desc: Use image node_id 3 for calling the Unpooling2D obj's underlying member method code with example usage: obj._integer_scale_forward(x) and returns: y