提交 5cb959e4 编写于 作者: Z Zhang Ting 提交者: Aurelius84

[cherry-pick] fix Attr(scale)'s bug for image_resize and modified unittest,...

[cherry-pick] fix Attr(scale)'s bug for image_resize and modified unittest, test=release/1.6 (#19983) (#20460)
上级 9a9f097f
...@@ -9723,10 +9723,13 @@ def image_resize(input, ...@@ -9723,10 +9723,13 @@ def image_resize(input,
if isinstance(scale, Variable): if isinstance(scale, Variable):
scale.stop_gradient = True scale.stop_gradient = True
inputs["Scale"] = scale inputs["Scale"] = scale
if isinstance(scale, float): elif isinstance(scale, float) or isinstance(scale, int):
if scale <= 0: if scale <= 0:
raise ValueError("scale should be greater than zero.") raise ValueError("Attr(scale) should be greater than zero.")
attrs['scale'] = float(scale) attrs['scale'] = float(scale)
else:
raise TypeError(
"Attr(scale)'s type should be float, int or Variable.")
if isinstance(actual_shape, Variable): if isinstance(actual_shape, Variable):
warnings.warn( warnings.warn(
......
...@@ -425,26 +425,14 @@ class TestNearestInterp_attr_tensor_Case3(TestNearestInterpOp_attr_tensor): ...@@ -425,26 +425,14 @@ class TestNearestInterp_attr_tensor_Case3(TestNearestInterpOp_attr_tensor):
class TestNearestAPI(OpTest): class TestNearestAPI(OpTest):
def test_case(self): def test_case(self):
x = fluid.layers.data(name="x", shape=[3, 6, 6], dtype="float32") x = fluid.data(name="x", shape=[1, 3, 6, 6], dtype="float32")
y = fluid.layers.data(name="y", shape=[6, 6, 3], dtype="float32") y = fluid.data(name="y", shape=[1, 6, 6, 3], dtype="float32")
dim = fluid.layers.data( dim = fluid.data(name="dim", shape=[1], dtype="int32")
name="dim", shape=[1], dtype="int32", append_batch_size=False) shape_tensor = fluid.data(name="shape_tensor", shape=[2], dtype="int32")
shape_tensor = fluid.layers.data( actual_size = fluid.data(name="actual_size", shape=[2], dtype="int32")
name="shape_tensor", scale_tensor = fluid.data(
shape=[2], name="scale_tensor", shape=[1], dtype="float32")
dtype="int32",
append_batch_size=False)
actual_size = fluid.layers.data(
name="actual_size",
shape=[2],
dtype="int32",
append_batch_size=False)
scale_tensor = fluid.layers.data(
name="scale_tensor",
shape=[1],
dtype="float32",
append_batch_size=False)
out1 = fluid.layers.resize_nearest( out1 = fluid.layers.resize_nearest(
y, out_shape=[12, 12], data_format='NHWC') y, out_shape=[12, 12], data_format='NHWC')
...@@ -481,15 +469,25 @@ class TestNearestAPI(OpTest): ...@@ -481,15 +469,25 @@ class TestNearestAPI(OpTest):
for i in range(len(results) - 1): for i in range(len(results) - 1):
self.assertTrue(np.allclose(results[i + 1], expect_res)) self.assertTrue(np.allclose(results[i + 1], expect_res))
class TestNearestInterpException(OpTest):
def test_exception(self): def test_exception(self):
# for 4-D input, data_format can only be NCHW or NHWC input = fluid.data(name="input", shape=[1, 3, 6, 6], dtype="float32")
input = fluid.layers.data(
name="input", shape=[3, 6, 6], dtype="float32") def attr_data_format():
try: # for 4-D input, data_format can only be NCHW or NHWC
out = fluid.layers.resize_nearest( out = fluid.layers.resize_nearest(
input, out_shape=[4, 8], data_format='NDHWC') input, out_shape=[4, 8], data_format='NDHWC')
except:
pass def attr_scale_type():
out = fluid.layers.resize_nearest(input, scale='scale')
def attr_scale_value():
out = fluid.layers.resize_nearest(input, scale=-0.3)
self.assertRaises(ValueError, attr_data_format)
self.assertRaises(TypeError, attr_scale_type)
self.assertRaises(ValueError, attr_scale_value)
if __name__ == "__main__": if __name__ == "__main__":
......
...@@ -625,15 +625,18 @@ class TestTrilinearInterpAPI(OpTest): ...@@ -625,15 +625,18 @@ class TestTrilinearInterpAPI(OpTest):
for i in range(len(results) - 1): for i in range(len(results) - 1):
self.assertTrue(np.allclose(results[i + 1], expect_res)) self.assertTrue(np.allclose(results[i + 1], expect_res))
class TestTrilinearInterpOpException(OpTest):
def test_exception(self): def test_exception(self):
input = fluid.layers.data( input = fluid.layers.data(
name="input", shape=[3, 6, 9, 4], dtype="float32") name="input", shape=[3, 6, 9, 4], dtype="float32")
try:
def attr_data_format():
# for 5-D input, data_format only can be NCDHW or NDHWC # for 5-D input, data_format only can be NCDHW or NDHWC
out = fluid.layers.resize_trilinear( out = fluid.layers.resize_trilinear(
input, out_shape=[4, 8, 4], data_format='NHWC') input, out_shape=[4, 8, 4], data_format='NHWC')
except:
pass self.assertRaises(ValueError, attr_data_format)
if __name__ == "__main__": if __name__ == "__main__":
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册