diff --git a/hls4ml/converters/keras/convolution.py b/hls4ml/converters/keras/convolution.py index d6be2c518a..58b1c5479c 100644 --- a/hls4ml/converters/keras/convolution.py +++ b/hls4ml/converters/keras/convolution.py @@ -8,6 +8,10 @@ def parse_conv1d_layer(keras_layer, input_names, input_shapes, data_reader): layer = parse_default_keras_layer(keras_layer, input_names) + dilation = keras_layer['config'].get('dilation_rate', [1])[0] + if dilation != 1: + raise NotImplementedError(f'Layer {layer["name"]}: dilation_rate > 1 is not supported.') + (*_, layer['in_width'], layer['n_chan']) = parse_data_format(input_shapes[0], layer['data_format']) if layer['class_name'] in ['Conv1D', 'QConv1D']: diff --git a/test/pytest/test_keras_converter.py b/test/pytest/test_keras_converter.py new file mode 100644 index 0000000000..0c81461380 --- /dev/null +++ b/test/pytest/test_keras_converter.py @@ -0,0 +1,23 @@ +from unittest.mock import Mock + +import pytest + +from hls4ml.converters.keras.convolution import parse_conv1d_layer + + +def test_conv1d_rejects_unsupported_dilation(): + keras_layer = { + 'class_name': 'Conv1D', + 'config': { + 'name': 'dilated_conv', + 'data_format': 'channels_last', + 'filters': 4, + 'kernel_size': [3], + 'strides': [1], + 'padding': 'same', + 'dilation_rate': [2], + }, + } + + with pytest.raises(NotImplementedError, match='dilation_rate > 1 is not supported'): + parse_conv1d_layer(keras_layer, ['input'], [[None, 64, 1]], data_reader=Mock())