class_docstr: DSNT module to translate heatmap to coordinates
  
  Parameters
  ----------
  size : int or tuple,
      (width, height) of the input heatmap
  norm : str, the normalization method for heatmap
      available methods are 'softmax', or 'sum'
  axis : the axis for input heatmap
class_docstr_tok: ["DSNT","module","to","translate","heatmap","to","coordinates","Parameters","--","--","--","--","--","size",":","int","or","tuple",",","(","width",",","height",")","of","the","input","heatmap","norm",":","str",",","the","normalization","method","for","heatmap","available","methods","are","'softmax","'",",","or","'sum'","axis",":","the","axis","for","input","heatmap"]
code: def hybrid_forward(self, F, M):
      # pylint: disable=missing-function-docstring
      if self.norm == "softmax":
          Z = self.softmax(M)
      elif self.norm == "sum":
          norm = F.sum(M, axis=self.axis, keepdims=True)
          Z = F.broadcast_div(M, norm)
      else:
          Z = M
      x = F.linspace(self.wfirst, self.wlast, self.size[0]).expand_dims(
          0
      )
      y = (
          F.linspace(self.hfirst, self.hlast, self.size[1])
          .expand_dims(0)
          .transpose()
      )
      output_x = F.sum(F.broadcast_mul(Z, x), axis=self.axis)
      output_y = F.sum(F.broadcast_mul(Z, y), axis=self.axis)
      res = F.stack(output_x, output_y, axis=2)
      return res, Z
  
imports: from __future__ import absolute_import
  from mxnet import initializer
  from mxnet.gluon import nn, contrib
  from mxnet.gluon.nn import BatchNorm, HybridBlock
label_desc: Use image node_id 2 for calling the DSNT obj's underlying member method code with example usage: obj.hybrid_forward(F, M) and returns: res,  Z