aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Verhaard <louis.verhaard@arm.com>2020-09-30 12:11:49 +0200
committerLouis Verhaard <louis.verhaard@arm.com>2020-09-30 16:04:23 +0200
commit8912c5311d4ccf2ad1bbb57fdc71c1f25037f56e (patch)
tree69f1774a1b6a88ed7e2b0c748d44a8596c29ce93
parent530992a3943eb21e12f6d0e638940d7df27a9f51 (diff)
downloadethos-u-vela-8912c5311d4ccf2ad1bbb57fdc71c1f25037f56e.tar.gz
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>
-rw-r--r--ethosu/vela/graph_optimiser.py5
-rw-r--r--ethosu/vela/numeric_util.py6
2 files changed, 4 insertions, 7 deletions
diff --git a/ethosu/vela/graph_optimiser.py b/ethosu/vela/graph_optimiser.py
index 81d5a188..e7c15cdc 100644
--- a/ethosu/vela/graph_optimiser.py
+++ b/ethosu/vela/graph_optimiser.py
@@ -27,9 +27,9 @@ from . import scaling
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 @@ def unfuse_activation_function(op, arch):
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_lrelu(op, arch):
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
diff --git a/ethosu/vela/numeric_util.py b/ethosu/vela/numeric_util.py
index 3d26444a..4ebef8e5 100644
--- a/ethosu/vela/numeric_util.py
+++ b/ethosu/vela/numeric_util.py
@@ -77,17 +77,13 @@ def clamp_tanh(x):
return y
-def sigmoid(x):
- return 1 / (1 + math.exp(-x))
-
-
def clamp_sigmoid(x):
if x <= -8:
y = 0.0
elif x >= 8:
y = 1.0
else:
- y = sigmoid(x)
+ y = 1 / (1 + math.exp(-x))
return y