group_norm op 计算结果精度存在问题
Created by: zhangting2020
问题描述:
group_norm的单测脚本中,Python API的测试继承了OpTest。 https://github.com/PaddlePaddle/Paddle/blob/3706ea67f87a291896ca2a85b834af64fca09489/python/paddle/fluid/tests/unittests/test_group_norm_op.py#L196-L222 由于是对Python API的测试,并不会用到OpTest类的方法,因此无需继承OpTest。 当修改为继承unittest.TestCase后,该case会失败。下图显示了失败的是NCHW格式输入的计算: 与继承OpTest对比,发现不同之处在于OpTest类的setUpClass中设置了随机种子 https://github.com/PaddlePaddle/Paddle/blob/3706ea67f87a291896ca2a85b834af64fca09489/python/paddle/fluid/tests/unittests/op_test.py#L144-L155 当对该Case按如下方式修改后,测试可以通过
class TestGroupNormAPI_With_NHWC(unittest.TestCase):
def setUp(self):
np.random.seed(123)
random.seed(124)
def test_case1(self):
...
问题:
- 随机种子的设置在这里应该只影响到输入数据的生成,是否说明该Op对某些输入,计算的结果与理论值存在较大误差?为什么会受输入数据的影响?
- 该op的实现是否存在精度问题?所以在单测中会有atol和inplace_atol设置 https://github.com/PaddlePaddle/Paddle/blob/3706ea67f87a291896ca2a85b834af64fca09489/python/paddle/fluid/tests/unittests/test_group_norm_op.py#L70-L81