Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 31 additions & 29 deletions test/pytest/test_keras_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,36 +175,38 @@ def test_conv1d(test_case_id, padds, backend, strategy, io_type, synthesis_confi
# 5e-2 might be too high
np.testing.assert_allclose(hls_prediction, keras_prediction, rtol=0, atol=5e-2)

if not (backend in ['Vivado', 'Vitis'] and io_type == 'io_stream' and padds == 'same'):
# Vivado/Vitis inserts and additional layer for 'same' padding in io_stream
assert len(model.layers) + 2 == len(hls_model.get_layers())
assert list(hls_model.get_layers())[1].attributes['name'] == model.layers[0]._name
assert list(hls_model.get_layers())[1].attributes['class_name'] == 'Conv1D'
assert list(hls_model.get_layers())[1].attributes['activation'] == str(model.layers[0].activation).split()[1]
assert list(hls_model.get_layers())[1].attributes['in_width'] == model.layers[0]._batch_input_shape[1]
assert list(hls_model.get_layers())[1].attributes['filt_width'] == model.layers[0].kernel_size[0]
assert list(hls_model.get_layers())[1].attributes['n_chan'] == model.layers[0].input_shape[2]
assert list(hls_model.get_layers())[1].attributes['n_filt'] == model.layers[0].filters
assert list(hls_model.get_layers())[1].attributes['stride_width'] == model.layers[0].strides[0]
assert list(hls_model.get_layers())[1].attributes['data_format'] == model.layers[0].data_format
assert list(hls_model.get_layers())[1].attributes['out_width'] == list(model.layers[0].output_shape)[1]

out_width = math.ceil(float(model.layers[0]._batch_input_shape[2]) / float(model.layers[0].strides[0]))
pad_along_width = max(
(out_width - 1) * model.layers[0].strides[0]
+ model.layers[0].kernel_size[0]
- model.layers[0]._batch_input_shape[2],
0,
)
pad_left = pad_along_width // 2
pad_right = pad_along_width - pad_left
off = 0
# Vitis/Vivado adds a padding layer after the input in the io_stream case
if backend in ['Vitis', 'Vivado'] and io_type == 'io_stream' and padds == 'same':
off = 1
assert len(model.layers) + 2 + off == len(hls_model.get_layers())
assert list(hls_model.get_layers())[1 + off].attributes['name'] == model.layers[0]._name
assert list(hls_model.get_layers())[1 + off].attributes['class_name'] == 'Conv1D'
assert list(hls_model.get_layers())[1 + off].attributes['activation'] == str(model.layers[0].activation).split()[1]
assert list(hls_model.get_layers())[1].attributes['in_width'] == model.layers[0]._batch_input_shape[1]
assert list(hls_model.get_layers())[1 + off].attributes['filt_width'] == model.layers[0].kernel_size[0]
assert list(hls_model.get_layers())[1 + off].attributes['n_chan'] == model.layers[0].input_shape[2]
assert list(hls_model.get_layers())[1 + off].attributes['n_filt'] == model.layers[0].filters
assert list(hls_model.get_layers())[1 + off].attributes['stride_width'] == model.layers[0].strides[0]
assert list(hls_model.get_layers())[1 + off].attributes['data_format'] == model.layers[0].data_format
assert list(hls_model.get_layers())[1 + off].attributes['out_width'] == list(model.layers[0].output_shape)[1]

out_width = math.ceil(float(model.layers[0]._batch_input_shape[2]) / float(model.layers[0].strides[0]))
pad_along_width = max(
(out_width - 1) * model.layers[0].strides[0]
+ model.layers[0].kernel_size[0]
- model.layers[0]._batch_input_shape[2],
0,
)
pad_left = pad_along_width // 2
pad_right = pad_along_width - pad_left

if model.layers[0].padding == 'same':
assert list(hls_model.get_layers())[1].attributes['pad_left'] == pad_left
assert list(hls_model.get_layers())[1].attributes['pad_right'] == pad_right
elif model.layers[0].padding == 'valid':
assert list(hls_model.get_layers())[1].attributes['pad_left'] == 0
assert list(hls_model.get_layers())[1].attributes['pad_right'] == 0
if model.layers[0].padding == 'same':
assert list(hls_model.get_layers())[1].attributes['pad_left'] == pad_left
assert list(hls_model.get_layers())[1].attributes['pad_right'] == pad_right
elif model.layers[0].padding == 'valid':
assert list(hls_model.get_layers())[1 + off].attributes['pad_left'] == 0
assert list(hls_model.get_layers())[1 + off].attributes['pad_right'] == 0


chans_options = ['channels_last']
Expand Down