code: def forward(self, prev_hidden, batch_H, char_onehots):
      batch_H_proj = self.i2h(batch_H)
      prev_hidden_proj = paddle.unsqueeze(self.h2h(prev_hidden), axis=1)
  
      res = paddle.add(batch_H_proj, prev_hidden_proj)
      res = paddle.tanh(res)
      e = self.score(res)
  
      alpha = F.softmax(e, axis=1)
      alpha = paddle.transpose(alpha, [0, 2, 1])
      context = paddle.squeeze(paddle.mm(alpha, batch_H), axis=1)
      concat_context = paddle.concat([context, char_onehots], 1)
  
      cur_hidden = self.rnn(concat_context, prev_hidden)
  
      return cur_hidden, alpha
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import paddle
  import paddle.nn
  import paddle.nn.functional
  import numpy
label_desc: Use image node_id 2 for calling the AttentionGRUCell obj's underlying member method code with example usage: obj.forward(prev_hidden, batch_H, char_onehots) and returns: cur_hidden,  alpha