diff --git a/src/common/transformations/src/transformations/common_optimizations/moc_transformations.cpp b/src/common/transformations/src/transformations/common_optimizations/moc_transformations.cpp index e67fc4d4d62..bfe4daa66d8 100644 --- a/src/common/transformations/src/transformations/common_optimizations/moc_transformations.cpp +++ b/src/common/transformations/src/transformations/common_optimizations/moc_transformations.cpp @@ -255,8 +255,8 @@ bool ov::pass::MOCTransformations::run_on_model(const std::shared_ptrget_parameters()) { param->set_partial_shape(input_shapes.at(param.get())); } - f->validate_nodes_and_infer_types(); } + f->validate_nodes_and_infer_types(); return false; } diff --git a/src/common/transformations/tests/common_optimizations/moc_transformations.cpp b/src/common/transformations/tests/common_optimizations/moc_transformations.cpp new file mode 100644 index 00000000000..2e90bd5de67 --- /dev/null +++ b/src/common/transformations/tests/common_optimizations/moc_transformations.cpp @@ -0,0 +1,60 @@ +// Copyright (C) 2018-2023 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#include + +#include +#include + +#include "openvino/core/model.hpp" +#include "openvino/opsets/opset12.hpp" +#include "openvino/pass/manager.hpp" + +using namespace testing; +using namespace ov; +using namespace ov::opset12; + +TEST(TransformationTests, TestModelTensorsConsistencyUseShapesTrue) { + auto input = std::make_shared(element::f32, Shape{1}); + auto const1 = opset12::Constant::create(element::f32, Shape{1}, {1}); + auto const2 = opset12::Constant::create(element::f32, Shape{1}, {2}); + auto const3 = opset12::Constant::create(element::f32, Shape{1}, {3}); + auto add1 = std::make_shared(input, const1); + auto add2 = std::make_shared(add1, const2); + auto add3 = std::make_shared(add2, const3); + + auto model = std::make_shared(NodeVector{add3}, ParameterVector{input}); + ov::pass::Manager m; + m.register_pass(true); + m.run_passes(model); + + std::unordered_set new_tensors = {"new_name"}; + model->outputs()[0].set_names(new_tensors); + EXPECT_TRUE(model->outputs()[0].get_names() == new_tensors); + + model->validate_nodes_and_infer_types(); + EXPECT_TRUE(model->outputs()[0].get_names() == new_tensors); +} + +TEST(TransformationTests, TestModelTensorsConsistencyUseShapesFalse) { + auto input = std::make_shared(element::f32, Shape{1}); + auto const1 = opset12::Constant::create(element::f32, Shape{1}, {1}); + auto const2 = opset12::Constant::create(element::f32, Shape{1}, {2}); + auto const3 = opset12::Constant::create(element::f32, Shape{1}, {3}); + auto add1 = std::make_shared(input, const1); + auto add2 = std::make_shared(add1, const2); + auto add3 = std::make_shared(add2, const3); + + auto model = std::make_shared(NodeVector{add3}, ParameterVector{input}); + ov::pass::Manager m; + m.register_pass(false); + m.run_passes(model); + + std::unordered_set new_tensors = {"new_name"}; + model->outputs()[0].set_names(new_tensors); + EXPECT_TRUE(model->outputs()[0].get_names() == new_tensors); + + model->validate_nodes_and_infer_types(); + EXPECT_TRUE(model->outputs()[0].get_names() == new_tensors); +} diff --git a/tests/layer_tests/mo_python_api_tests/test_mo_convert_tf.py b/tests/layer_tests/mo_python_api_tests/test_mo_convert_tf.py index b7b2c85032b..59c90cd7b3d 100644 --- a/tests/layer_tests/mo_python_api_tests/test_mo_convert_tf.py +++ b/tests/layer_tests/mo_python_api_tests/test_mo_convert_tf.py @@ -903,6 +903,38 @@ class TestMoConvertTF(CommonMOConvertTest): assert CommonLayerTest().compare_ie_results_with_framework(ov_infer2, {"add:0": fw_infer2}, eps) assert CommonLayerTest().compare_ie_results_with_framework(ov_infer1, {"add:0": [2.6, 9.6, 12.4]}, eps) + def test_tensor_names(self, ie_device, precision, ir_version, temp_dir): + import tensorflow as tf + class LayerModel(tf.Module): + def __init__(self): + super(LayerModel, self).__init__() + self.var1 = tf.Variable([7., 5., 6.], name='var1') + self.var2 = tf.Variable([5., 7., 3.], name='var2') + self.var3 = tf.Variable([5., 7., 3.], name='var2') + + + @tf.function + def sub_function(self, input): + return input + self.var1 + self.var2 + self.var3 + + @tf.function() + def __call__(self, input): + return self.sub_function(input) + + from openvino.tools.ovc import convert_model + model = LayerModel() + ov_model = convert_model(model) + + ov_model.outputs[0].get_tensor().set_names({"name1"}) + assert ov_model.outputs[0].names == {"name1"} + + ov_model.validate_nodes_and_infer_types() + assert ov_model.outputs[0].names == {"name1"} + + ov_model.outputs[0].get_tensor().set_names({"name2"}) + assert ov_model.outputs[0].names == {"name2"} + + class TFConvertTest(unittest.TestCase): @pytest.mark.nightly