From e46a60950f67cb25d1de1500fe138f22e3f8f38a Mon Sep 17 00:00:00 2001 From: lixiaoquan Date: Wed, 4 Nov 2020 00:25:24 +0800 Subject: [PATCH] [TF] Fix a bug in _stridedSlice() (#6829) When stride < 0, the slicing range for whole demension should be [-1, -(dim+1)) --- python/tvm/relay/frontend/tensorflow.py | 8 ++++++-- tests/python/frontend/tensorflow/test_forward.py | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/python/tvm/relay/frontend/tensorflow.py b/python/tvm/relay/frontend/tensorflow.py index 2c7adf03bad8..a6fd1db7e7b5 100644 --- a/python/tvm/relay/frontend/tensorflow.py +++ b/python/tvm/relay/frontend/tensorflow.py @@ -1616,11 +1616,15 @@ def _transform_mask(stride_dim, ellipsis_mask): if final_index == len(m_begin): break if mask & begin_mask: - m_begin[final_index] = data_shape[final_index] if stride[index] < 0 else 0 + m_begin[final_index] = -1 if stride[index] < 0 else 0 elif begin[index]: m_begin[final_index] = begin[index] if mask & end_mask: - m_end[final_index] = 0 if stride[index] < 0 else data_shape[final_index] + m_end[final_index] = ( + -(data_shape[final_index] + 1) + if stride[index] < 0 + else data_shape[final_index] + ) elif end[index]: m_end[final_index] = end[index] m_stride[final_index] = stride[index] diff --git a/tests/python/frontend/tensorflow/test_forward.py b/tests/python/frontend/tensorflow/test_forward.py index 6697cfd0d36f..90e639e36809 100644 --- a/tests/python/frontend/tensorflow/test_forward.py +++ b/tests/python/frontend/tensorflow/test_forward.py @@ -1895,6 +1895,16 @@ def test_forward_stridedslice(): begin_mask=5, end_mask=8, ) + _test_stridedslice( + (1, 13, 13, 3, 2), + [0, 0], + [1, 1], + [1, -1], + "float32", + ellipsis_mask=1, + begin_mask=2, + end_mask=2, + ) #######################################################################