diff --git a/python/paddle/fluid/dygraph/nn.py b/python/paddle/fluid/dygraph/nn.py index 1da6948c51950baf3832e2159887ee8a61c9a302..bd03f27065b952538d8d107c367a87dc68230759 100644 --- a/python/paddle/fluid/dygraph/nn.py +++ b/python/paddle/fluid/dygraph/nn.py @@ -243,6 +243,9 @@ class Conv2D(layers.Layer): 'use_cudnn': self._use_cudnn, 'use_mkldnn': False, } + + check_variable_and_dtype(input, 'input', + ['float16', 'float32', 'float64'], 'Conv2D') pre_bias = self._helper.create_variable_for_type_inference( dtype=self._dtype) diff --git a/python/paddle/fluid/tests/unittests/test_layers.py b/python/paddle/fluid/tests/unittests/test_layers.py index 5b2653f59cd8c4521744e15f66f176eb7a8d22f5..543264be31ec457e343f7ddf86beb876de5746f9 100644 --- a/python/paddle/fluid/tests/unittests/test_layers.py +++ b/python/paddle/fluid/tests/unittests/test_layers.py @@ -286,6 +286,27 @@ class TestLayer(LayerTest): dy_ret = conv2d(base.to_variable(images)) self.assertTrue(conv2d.bias is None) + with self.static_graph(): + # the input of Conv2D must be Variable. + def test_Variable(): + images = np.ones([2, 3, 5, 5], dtype='float32') + conv2d = nn.Conv2D( + num_channels=3, num_filters=3, filter_size=[2, 2]) + conv2d_ret1 = conv2d(images) + + self.assertRaises(TypeError, test_Variable) + + # the input dtype of Conv2D must be float16 or float32 or float64 + # float16 only can be set on GPU place + def test_type(): + images = layers.data( + name='pixel', shape=[3, 5, 5], dtype='int32') + conv2d = nn.Conv2D( + num_channels=3, num_filters=3, filter_size=[2, 2]) + conv2d_ret2 = conv2d(images) + + self.assertRaises(TypeError, test_type) + self.assertTrue(np.allclose(static_ret, dy_ret_value)) self.assertTrue(np.allclose(static_ret, static_ret2))