From e641c6382e67f8e05a5a356e1be5042b62a07650 Mon Sep 17 00:00:00 2001 From: ceci3 Date: Mon, 13 Sep 2021 16:19:14 +0800 Subject: [PATCH] fix instance norm index error (#35341) * fix instance norm index error * add unittest * update * fix --- python/paddle/fluid/layers/nn.py | 4 ++++ .../fluid/tests/unittests/test_instance_norm_op.py | 10 ++++++++++ .../fluid/tests/unittests/test_instance_norm_op_v2.py | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/python/paddle/fluid/layers/nn.py b/python/paddle/fluid/layers/nn.py index b44e249ee9..0cb348c5dd 100755 --- a/python/paddle/fluid/layers/nn.py +++ b/python/paddle/fluid/layers/nn.py @@ -3198,6 +3198,10 @@ def instance_norm(input, dtype = core.VarDesc.VarType.FP32 input_shape = input.shape + if len(input.shape) < 2 or len(input.shape) > 5: + raise ValueError( + 'expected 2D or 3D or 4D or 5D input (got {}D input, input shape is: {})'. + format(len(input.shape), input_shape)) channel_num = input_shape[1] param_shape = [channel_num] diff --git a/python/paddle/fluid/tests/unittests/test_instance_norm_op.py b/python/paddle/fluid/tests/unittests/test_instance_norm_op.py index b7fcc63ca5..aa184dd42e 100644 --- a/python/paddle/fluid/tests/unittests/test_instance_norm_op.py +++ b/python/paddle/fluid/tests/unittests/test_instance_norm_op.py @@ -15,6 +15,7 @@ from __future__ import print_function import unittest import numpy as np +import paddle import paddle.fluid.core as core import paddle.fluid as fluid from paddle.fluid.op import Operator @@ -215,6 +216,15 @@ class TestInstanceNormOpError(unittest.TestCase): self.assertRaises(TypeError, fluid.layers.instance_norm, x2) +class TestInstanceNormOpErrorCase1(unittest.TestCase): + def test_errors(self): + with program_guard(Program(), Program()): + # the first dimension of input for instance_norm must between [2d, 5d] + x = fluid.layers.data( + name='x', shape=[3], dtype="float32", append_batch_size=False) + self.assertRaises(ValueError, paddle.static.nn.instance_norm, x) + + class TestElasticNormOp(unittest.TestCase): def init_test_case(self): self.epsilon = 1e-5 diff --git a/python/paddle/fluid/tests/unittests/test_instance_norm_op_v2.py b/python/paddle/fluid/tests/unittests/test_instance_norm_op_v2.py index 19d0b1ea98..102e08e36a 100644 --- a/python/paddle/fluid/tests/unittests/test_instance_norm_op_v2.py +++ b/python/paddle/fluid/tests/unittests/test_instance_norm_op_v2.py @@ -45,12 +45,12 @@ class TestInstanceNorm(unittest.TestCase): def error3d(): x_data_4 = np.random.random(size=(2, 1, 3, 3)).astype('float32') - instance_norm3d = paddle.nn.BatchNorm3D(1) + instance_norm3d = paddle.nn.InstanceNorm3D(1) instance_norm3d(fluid.dygraph.to_variable(x_data_4)) def weight_bias_false(): x_data_4 = np.random.random(size=(2, 1, 3, 3)).astype('float32') - instance_norm3d = paddle.nn.BatchNorm3D( + instance_norm3d = paddle.nn.InstanceNorm3D( 1, weight_attr=False, bias_attr=False) with fluid.dygraph.guard(p): -- GitLab