Skip to content

Commit 0887984

Browse files
[OpenVINO backend] fix ops.slice (#21580)
* [OpenVINO backend] fix ops.slice * add a simple test * update comment * modify test
1 parent 1bb85cf commit 0887984

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

keras/src/backend/openvino/core.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -843,9 +843,16 @@ def prepare_slice_index(val):
843843
start = ov_opset.concat(start, axis=0).output(0)
844844
stop = ov_opset.concat(stop, axis=0).output(0)
845845
axes = ov_opset.constant(axes, Type.i32).output(0)
846-
return OpenVINOKerasTensor(
847-
ov_opset.slice(inputs, start, stop, step, axes).output(0)
848-
)
846+
result = ov_opset.slice(inputs, start, stop, step, axes).output(0)
847+
848+
# Apply reshape to ensure output matches expected shape
849+
# Convert None (dynamic) dimensions to -1 for OpenVINO compatibility
850+
if all(dim is None or (isinstance(dim, int) and dim >= 0) for dim in shape):
851+
reshape_pattern = [(-1 if dim is None else dim) for dim in shape]
852+
target_shape = ov_opset.constant(reshape_pattern, Type.i32).output(0)
853+
result = ov_opset.reshape(result, target_shape, False).output(0)
854+
855+
return OpenVINOKerasTensor(result)
849856

850857

851858
def slice_update(inputs, start_indices, updates):

keras/src/ops/core_test.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,7 @@ def body(index, inputs, sum):
645645

646646
index, inputs, sum = 0, np.arange(10), np.array([0])
647647
index, inputs, sum = core.while_loop(cond, body, (index, inputs, sum))
648+
self.assertEqual(sum.shape, (1,))
648649
self.assertAllClose(sum, [45])
649650

650651
def test_fori_loop(self):

0 commit comments

Comments
 (0)