code: def forward(self, f_common):
      f_shape = paddle.shape(f_common)
      # print('f_shape: ', f_shape)
  
      f_theta = self.theta_conv(f_common)
      f_phi = self.phi_conv(f_common)
      f_g = self.g_conv(f_common)
  
      ######## horizon ########
      fh_weight = self._cal_fweight(
          [f_theta, f_phi, f_g], [f_shape[0], f_shape[2], f_shape[3]]
      )
      fh_weight = paddle.transpose(fh_weight, [0, 3, 1, 2])
      fh_weight = self.fh_weight_conv(fh_weight)
      # short cut
      fh_sc = self.fh_sc_conv(f_common)
      f_h = F.relu(fh_weight + fh_sc)
  
      ######## vertical ########
      fv_theta = paddle.transpose(f_theta, [0, 1, 3, 2])
      fv_phi = paddle.transpose(f_phi, [0, 1, 3, 2])
      fv_g = paddle.transpose(f_g, [0, 1, 3, 2])
      fv_weight = self._cal_fweight(
          [fv_theta, fv_phi, fv_g], [f_shape[0], f_shape[3], f_shape[2]]
      )
      fv_weight = paddle.transpose(fv_weight, [0, 3, 2, 1])
      fv_weight = self.fv_weight_conv(fv_weight)
      # short cut
      fv_sc = self.fv_sc_conv(f_common)
      f_v = F.relu(fv_weight + fv_sc)
  
      ######## merge ########
      f_attn = paddle.concat([f_h, f_v], axis=1)
      f_attn = self.f_attn_conv(f_attn)
      return f_attn
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import paddle
  from paddle import nn
  import paddle.nn.functional
  from paddle import ParamAttr
label_desc: Use image node_id 3 for calling the Cross_Attention obj's underlying member method code with example usage: obj.forward(f_common) and returns: f_attn