code: def forward(
      self,
      inputs,
      gsrm_word_pos,
      gsrm_slf_attn_bias1,
      gsrm_slf_attn_bias2,
  ):
      # ===== GSRM Visual-to-semantic embedding block =====
      b, t, c = inputs.shape
      pvam_features = paddle.reshape(inputs, [-1, c])
      word_out = self.fc0(pvam_features)
      word_ids = paddle.argmax(F.softmax(word_out), axis=1)
      word_ids = paddle.reshape(x=word_ids, shape=[-1, t, 1])
  
      # ===== GSRM Semantic reasoning block =====
      """
          This module is achieved through bi-transformers,
          ngram_feature1 is the froward one, ngram_fetaure2 is the backward one
          """
      pad_idx = self.char_num
  
      word1 = paddle.cast(word_ids, "float32")
      word1 = F.pad(
          word1, [1, 0], value=1.0 * pad_idx, data_format="NLC"
      )
      word1 = paddle.cast(word1, "int64")
      word1 = word1[:, :-1, :]
      word2 = word_ids
  
      enc_inputs_1 = [word1, gsrm_word_pos, gsrm_slf_attn_bias1]
      enc_inputs_2 = [word2, gsrm_word_pos, gsrm_slf_attn_bias2]
  
      gsrm_feature1 = self.wrap_encoder0(enc_inputs_1)
      gsrm_feature2 = self.wrap_encoder1(enc_inputs_2)
  
      gsrm_feature2 = F.pad(
          gsrm_feature2, [0, 1], value=0.0, data_format="NLC"
      )
      gsrm_feature2 = gsrm_feature2[
          :,
          1:,
      ]
      gsrm_features = gsrm_feature1 + gsrm_feature2
  
      gsrm_out = self.mul(gsrm_features)
  
      b, t, c = gsrm_out.shape
      gsrm_out = paddle.reshape(gsrm_out, [-1, c])
  
      return gsrm_features, word_out, gsrm_out
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import math
  import paddle
  from paddle import nn, ParamAttr
  from paddle.nn import functional
  import numpy
  from .self_attention import WrapEncoderForFeature
  from .self_attention import WrapEncoder
  from paddle.static import Program
  from ppocr.modeling.backbones.rec_resnet_fpn import ResNetFPN
  from collections import OrderedDict
label_desc: Use image node_id 2 for calling the GSRM obj's underlying member method code with example usage: obj.forward(inputs, gsrm_word_pos, gsrm_slf_attn_bias1, gsrm_slf_attn_bias2) and returns: gsrm_features,  word_out,  gsrm_out