aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Xu <charles.xu@arm.com>2020-08-18 08:41:54 +0200
committerpatrik.gustavsson <patrik.gustavsson@arm.com>2020-08-21 08:12:00 +0000
commitf8992314d5631d724fa9041a86b843164bb09af2 (patch)
tree9f6887b93b0af76f6755c92e54efb663ddc57e82
parentbb1b09ea438067d71d6dc3bbf55a3f6b41aaa75f (diff)
downloadethos-u-vela-f8992314d5631d724fa9041a86b843164bb09af2.tar.gz
MLBEDSW-2611: Update global scale for 16 bit to tanh and sigmoid
Signed-off-by: Charles Xu <charles.xu@arm.com> Change-Id: Ia83ab5ba28d193215e3f8fbc52552b0356111723
-rw-r--r--ethosu/vela/register_command_stream_generator.py18
1 files changed, 9 insertions, 9 deletions
diff --git a/ethosu/vela/register_command_stream_generator.py b/ethosu/vela/register_command_stream_generator.py
index f8bee6c3..013128b4 100644
--- a/ethosu/vela/register_command_stream_generator.py
+++ b/ethosu/vela/register_command_stream_generator.py
@@ -650,17 +650,17 @@ def generate_register_command_stream(nng, sg, arch, verbose=False):
# For valid padding vela has to output scaling values
if faf == "Sigmoid" or faf == "Tanh":
rescale = 0x3000 * cmd.ifm_tensor.quantization.scale_f32
-
- if cmd.ifm_tensor.dtype == DataType.int16:
- multiplier = max(1, int(4096 * cmd.ifm_tensor.quantization.scale_f32 + 0.5))
- rescale *= 3 * multiplier
-
- rescale_bits = len(bin(round_up_to_int(rescale))) - 2 + 1
- scale, shift = scaling.quantise_pooling_scale(k_height * k_width, rescale_bits)
-
if cmd.ifm_tensor.dtype == DataType.int16:
- scale = (1 << shift) * 3 * multiplier
+ # Calculate scale and shift for the output scale of 1/(3*4096)
+ shift = 0
+ max_rescale = np.iinfo(np.int16).max / 2
+ while rescale <= max_rescale and shift <= 30:
+ shift += 1
+ rescale *= 2
+ scale = int(rescale)
else:
+ rescale_bits = len(bin(round_up_to_int(rescale))) - 2 + 1
+ scale, shift = scaling.quantise_pooling_scale(k_height * k_width, rescale_bits)
scale = int(round_away_zero(scale * rescale))
elif fused_quantize:
# Quantize op requires different scaling