diff --git a/python/tvm/relay/frontend/keras.py b/python/tvm/relay/frontend/keras.py index 86131a6216bc..16192617fe13 100644 --- a/python/tvm/relay/frontend/keras.py +++ b/python/tvm/relay/frontend/keras.py @@ -421,6 +421,8 @@ def _convert_convolution(inexpr, keras_layer, etab, data_layout, input_shape=Non params["groups"] = in_channels else: params["channels"] = n_filters + if is_deconv and keras_layer.output_padding: + params["output_padding"] = keras_layer.output_padding if keras_layer.padding == "valid": pass # we insert a separate pad operator @@ -507,6 +509,8 @@ def _convert_convolution3d(inexpr, keras_layer, etab, data_layout, input_shape=N "kernel_layout": kernel_layout, } params["channels"] = n_filters + if is_deconv and keras_layer.output_padding: + params["output_padding"] = keras_layer.output_padding if keras_layer.padding == "valid": pass diff --git a/tests/python/frontend/keras/test_forward.py b/tests/python/frontend/keras/test_forward.py index 4a3b0108f888..debd50b37a2e 100644 --- a/tests/python/frontend/keras/test_forward.py +++ b/tests/python/frontend/keras/test_forward.py @@ -321,6 +321,9 @@ def test_forward_conv_transpose(self, keras_mod): data = keras_mod.layers.Input(shape=(32, 32, 128)) conv_funcs = [ keras_mod.layers.Conv2DTranspose(filters=64, kernel_size=(2, 2), padding="valid"), + keras_mod.layers.Conv2DTranspose( + filters=2, kernel_size=(3, 3), strides=(2, 2), output_padding=(1, 1) + ), ] for conv_func in conv_funcs: x = conv_func(data) @@ -619,6 +622,9 @@ def test_forward_conv3d_transpose(self, keras_mod): filters=1, kernel_size=(3, 3, 3), padding="valid", use_bias=False ), keras_mod.layers.Conv3DTranspose(filters=10, kernel_size=(2, 2, 2), padding="valid"), + keras_mod.layers.Conv3DTranspose( + filters=2, kernel_size=(3, 3, 3), strides=(2, 2, 2), output_padding=(1, 1, 1) + ), ] for conv_func in conv_funcs: x = conv_func(data)