Source code for mlprodict.onnxrt.ops_cpu.op_reduce_log_sum_exp
# -*- encoding: utf-8 -*-
# pylint: disable=E0203,E1101,C0111
"""
Runtime operator.
:githublink:`%|py|7`
"""
import numpy
from ._op import OpRunReduceNumpy
[docs]class ReduceLogSumExp(OpRunReduceNumpy):
atts = {'axes': [], 'keepdims': 1}
[docs] def __init__(self, onnx_node, desc=None, **options):
OpRunReduceNumpy.__init__(self, onnx_node, desc=desc,
expected_attributes=ReduceLogSumExp.atts,
**options)
[docs] def _run(self, data): # pylint: disable=W0221
tax = tuple(self.axes) if self.axes else None
data_max = data.copy()
ind = numpy.isinf(data_max)
data_max[ind] = -numpy.inf
mx = data_max.max(axis=tax, keepdims=True)
sub = numpy.subtract(data, mx)
exp = numpy.exp(sub, out=sub)
mxs = numpy.sum(exp, axis=tax,
keepdims=True,
dtype=data.dtype)
res = numpy.log(mxs) + mx
if not self.keepdims:
res = numpy.squeeze(res, axis=tax)
return (res, )