From 8b0d4cba40dbefbbec6bccced449e4a6c47a65dd Mon Sep 17 00:00:00 2001 From: Donghyeon Jeong Date: Wed, 2 Aug 2023 14:15:51 +0900 Subject: [PATCH] [Compiler] Preserve connection order in multi-out realizer Create multiout nodes with a given connection order in building a frequency map. Signed-off-by: Donghyeon Jeong --- nntrainer/layers/layer_node.cpp | 1 - test/unittest/compiler/unittest_realizer.cpp | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/nntrainer/layers/layer_node.cpp b/nntrainer/layers/layer_node.cpp index 776430b..2e9b2c2 100644 --- a/nntrainer/layers/layer_node.cpp +++ b/nntrainer/layers/layer_node.cpp @@ -162,7 +162,6 @@ LayerNode::LayerNode(std::unique_ptr &&l) : needs_calc_derivative(false), needs_calc_gradient(false), output_connections(), - tensor_type(TensorDim::Format::NCHW), run_context(nullptr), layer_node_props( new PropsType(props::Name(), props::Distribute(), props::Trainable(), {}, diff --git a/test/unittest/compiler/unittest_realizer.cpp b/test/unittest/compiler/unittest_realizer.cpp index 1696cd3..5759fa0 100644 --- a/test/unittest/compiler/unittest_realizer.cpp +++ b/test/unittest/compiler/unittest_realizer.cpp @@ -778,6 +778,28 @@ TEST(MultioutRealizer, multiout_p) { EXPECT_NO_THROW(realizeAndEqual(r, before, after)); } + { // source has single output, all are referred multiple times + std::vector before = { + {"split", {"name=a", "input_shape=1:1:1:2", "axis=3"}}, + {"fully_connected", {"name=b", "input_layers=a"}}, + {"fully_connected", {"name=c", "input_layers=a(0)"}}, + {"fully_connected", {"name=d", "input_layers=a(1)"}}, + {"fully_connected", {"name=e", "input_layers=a(1)"}}, + }; + std::vector after = { + {"split", {"name=a", "input_shape=1:1:1:2", "axis=3"}}, + {"multiout", {"name=a/generated_out_0", "input_layers=a(0)"}}, + {"multiout", {"name=a/generated_out_1", "input_layers=a(1)"}}, + {"fully_connected", {"name=b", "input_layers=a/generated_out_0(0)"}}, + {"fully_connected", {"name=c", "input_layers=a/generated_out_0(1)"}}, + {"fully_connected", {"name=d", "input_layers=a/generated_out_1(0)"}}, + {"fully_connected", {"name=e", "input_layers=a/generated_out_1(1)"}}, + }; + + MultioutRealizer r; + EXPECT_NO_THROW(realizeAndEqual(r, before, after)); + } + { // source has single output, some are referred multiple times std::vector before = { {"split", {"name=a", "input_shape=1:1:1:2", "axis=3"}}, -- 2.7.4