MLBEDSW-3153: Fix overflow in sigmoid LUT
Overflow could occur in the calculation of the LUT table for sigmoid,
for big negative inputs.
Change-Id: I62a33c68de03e9a7a7e4fe2cbd5835c384dc3643
Signed-off-by: Louis Verhaard <louis.verhaard@arm.com>
diff --git a/ethosu/vela/graph_optimiser.py b/ethosu/vela/graph_optimiser.py
index 81d5a18..e7c15cd 100644
--- a/ethosu/vela/graph_optimiser.py
+++ b/ethosu/vela/graph_optimiser.py
@@ -27,9 +27,9 @@
from .data_type import DataType
from .errors import UnsupportedFeatureError
from .ethos_u55_regs.ethos_u55_regs import resampling_mode
+from .numeric_util import clamp_sigmoid
from .numeric_util import full_shape
from .numeric_util import round_away_zero
-from .numeric_util import sigmoid
from .operation import create_avgpool_nop
from .operation import NpuBlockType
from .operation import Operation
@@ -447,6 +447,7 @@
return op
+
def fixup_unpack_output(tens, arch):
op = tens.ops[0]
if op.type in set(("Unpack", "StridedSlice")):
@@ -974,7 +975,7 @@
def convert_tanh_sigmoid_to_lut(op, arch):
# Converts int8/uint8 Sigmoid and Tanh to a LUT based solution
if op.type == "Sigmoid":
- return convert_to_lut8(op, sigmoid)
+ return convert_to_lut8(op, clamp_sigmoid)
elif op.type == "Tanh":
return convert_to_lut8(op, math.tanh)
return op