class_docstr: The original paper refers to:
      Chen, Yunpeng, et al. "Graph-Based Global Reasoning Networks" (https://arxiv.org/abs/1811.12814)
code: def forward(self, x, inp):
      B = self.conv_theta(x)
      sizeB = paddle.shape(B)
      B = paddle.flatten(B, 2, 3)
  
      sizex = paddle.shape(x)
      x_reduce = self.conv_phi(x)
  
      x_reduce = paddle.flatten(x_reduce, 2, 3).transpose((0, 2, 1))
  
      V = paddle.bmm(B, x_reduce).transpose((0, 2, 1))
      V = paddle.divide(V, (sizex[2] * sizex[3]).astype("float32"))
  
      class_node, new_V = self.graph(inp, V)
      D = B.transpose((0, 2, 1))
      Y = paddle.bmm(D, new_V.transpose((0, 2, 1)))
      Y = Y.transpose((0, 2, 1)).reshape(
          (sizex[0], self.num_state, sizex[2], -1)
      )
      Y = self.extend_dim(Y)
      Y = self.bn(Y)
      out = Y + x
  
      return out, class_node
  
imports: import paddle
  import paddle.nn
  from paddle.nn import functional
  from paddleseg.utils import utils
  from paddleseg.models import layers
  from paddleseg.cvlibs import manager
label_desc: Use image node_id 2 for calling the GlobalReasonUnit obj's underlying member method code with example usage: obj.forward(x, inp) and returns: out,  class_node