You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by ma...@apache.org on 2021/02/26 05:37:31 UTC
[tvm] branch main updated: [Torch] Pool ops,
convert strides and pool_size to int (#7517)
This is an automated email from the ASF dual-hosted git repository.
masahi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new c46b187 [Torch] Pool ops, convert strides and pool_size to int (#7517)
c46b187 is described below
commit c46b1876f5bba743c864d3fbeeb3d8df4664aa5f
Author: Alex Wong <11...@users.noreply.github.com>
AuthorDate: Thu Feb 25 21:37:11 2021 -0800
[Torch] Pool ops, convert strides and pool_size to int (#7517)
* Convert strides and pool_size to int
* Make helper function, add test
* Fix lint
---
python/tvm/relay/frontend/pytorch.py | 16 ++++++++++++----
tests/python/frontend/pytorch/test_forward.py | 9 +++++++++
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/python/tvm/relay/frontend/pytorch.py b/python/tvm/relay/frontend/pytorch.py
index 6795410..fdebd2f 100644
--- a/python/tvm/relay/frontend/pytorch.py
+++ b/python/tvm/relay/frontend/pytorch.py
@@ -825,11 +825,19 @@ class PyTorchOpConverter:
output_size = inputs[1]
return _op.nn.adaptive_avg_pool3d(data, output_size=output_size)
+ @staticmethod
+ def convert_const_list(data):
+ if isinstance(data, list):
+ for i, _ in enumerate(data):
+ if isinstance(data[i], _expr.Expr):
+ data[i] = int(_infer_value_simulated(data[i], {}).asnumpy())
+ return data
+
def maxpool_2d(self, inputs, input_types):
data = inputs[0]
- pool_size = inputs[1]
- strides = inputs[2] if inputs[2] else pool_size
+ pool_size = self.convert_const_list(inputs[1])
+ strides = self.convert_const_list(inputs[2] if inputs[2] else pool_size)
padding = inputs[3]
dilation = inputs[4]
ceil_mode = int(inputs[5])
@@ -1309,8 +1317,8 @@ class PyTorchOpConverter:
def avg_pool2d(self, inputs, input_types):
data = inputs[0]
- pool_size = inputs[1]
- strides = inputs[2] if inputs[2] else pool_size
+ pool_size = self.convert_const_list(inputs[1])
+ strides = self.convert_const_list(inputs[2] if inputs[2] else pool_size)
padding = inputs[3]
ceil_mode = int(inputs[4])
count_include_pad = int(inputs[5])
diff --git a/tests/python/frontend/pytorch/test_forward.py b/tests/python/frontend/pytorch/test_forward.py
index 0cf4839..9060475 100644
--- a/tests/python/frontend/pytorch/test_forward.py
+++ b/tests/python/frontend/pytorch/test_forward.py
@@ -736,7 +736,16 @@ def test_forward_maxpool2d():
output, indices = self.pool(args[0])
return output
+ class MaxPool2DWithIntStrides(Module):
+ def forward(self, *args):
+ # Makes kernel_size and strides a Relay expr to test converting back to int
+ x_shape = args[0].shape
+ kernel_size = [torch.tensor(x_shape[1]).int(), torch.tensor(x_shape[1]).int()]
+ strides = [torch.tensor(x_shape[0]).int(), torch.tensor(x_shape[0]).int()]
+ return torch.nn.functional.max_pool2d(args[0], kernel_size=[4, 4], stride=strides)
+
verify_model(MaxPool2DWithIndices().float().eval(), input_data=input_data)
+ verify_model(MaxPool2DWithIntStrides().float().eval(), input_data=input_data)
@tvm.testing.uses_gpu