From: 박천교/On-Device Lab(SR)/Engineer/삼성전자 Date: Thu, 25 Jul 2019 03:51:56 +0000 (+0900) Subject: [moco-tf] Introduce TFReshape dialect node (#5863) X-Git-Tag: submit/tizen/20190809.050447~420 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1480670a82b3350153700d517e17410a56ca70b6;p=platform%2Fcore%2Fml%2Fnnfw.git [moco-tf] Introduce TFReshape dialect node (#5863) This commit introduces TFReshape dialect node. Signed-off-by: Cheongyo Bahk --- diff --git a/compiler/moco-tf/src/Dialect/TFNodes.h b/compiler/moco-tf/src/Dialect/TFNodes.h index d034c60..ad83b41 100644 --- a/compiler/moco-tf/src/Dialect/TFNodes.h +++ b/compiler/moco-tf/src/Dialect/TFNodes.h @@ -25,6 +25,7 @@ #include "IR/TFFusedBatchNorm.h" #include "IR/TFIdentity.h" #include "IR/TFMul.h" +#include "IR/TFReshape.h" #include "IR/TFRsqrt.h" #endif // __MOCO_TF_DIALECT_TFNODES_H__ diff --git a/compiler/moco-tf/src/Dialect/TFNodes.lst b/compiler/moco-tf/src/Dialect/TFNodes.lst index 2c25558..4ac0c53 100644 --- a/compiler/moco-tf/src/Dialect/TFNodes.lst +++ b/compiler/moco-tf/src/Dialect/TFNodes.lst @@ -15,4 +15,5 @@ TENSORFLOW_NODE(Conv2D, TFConv2D) TENSORFLOW_NODE(FusedBatchNorm, TFFusedBatchNorm) TENSORFLOW_NODE(Identity, TFIdentity) TENSORFLOW_NODE(Mul, TFMul) +TENSORFLOW_NODE(Reshape, TFReshape) TENSORFLOW_NODE(Rsqrt, TFRsqrt) diff --git a/compiler/moco-tf/src/IR/TFReshape.h b/compiler/moco-tf/src/IR/TFReshape.h new file mode 100644 index 0000000..7b8fb4a --- /dev/null +++ b/compiler/moco-tf/src/IR/TFReshape.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MOCO_TF_IR_TFRESHAPE_H__ +#define __MOCO_TF_IR_TFRESHAPE_H__ + +#include "Dialect/TFNodeDecl.h" + +namespace moco +{ +namespace tf +{ + +/// @note TFReshape corresponds to the following GraphDef +/* +node { + name: "reshape" + op: "Reshape" + input: "tensor" + input: "shape" + attr { + key: "T" + value { type: DT_FLOAT } + } +} +*/ + +class TFReshape final : public loco::FixedArityNode<2, TFNodeImpl> +{ +public: + TFReshape() = default; + +public: + Node *tensor(void) const { return at(0)->node(); } + void tensor(Node *node) { at(0)->node(node); } + + Node *shape(void) const { return at(1)->node(); } + void shape(Node *node) { at(1)->node(node); } +}; + +} // namespace tf +} // namespace moco + +#endif // __MOCO_TF_IR_TFRESHAPE_H__ diff --git a/compiler/moco-tf/src/IR/TFReshape.test.cpp b/compiler/moco-tf/src/IR/TFReshape.test.cpp new file mode 100644 index 0000000..39d77e4 --- /dev/null +++ b/compiler/moco-tf/src/IR/TFReshape.test.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "IR/TFReshape.h" + +#include "Dialect/TFDialect.h" + +#include + +TEST(TFReshapeTest, constructor) +{ + moco::tf::TFReshape reshape_node; + + ASSERT_EQ(reshape_node.dialect(), moco::tf::TFDialect::get()); + ASSERT_EQ(reshape_node.opcode(), moco::tf::TFOpcode::Reshape); + + ASSERT_EQ(reshape_node.tensor(), nullptr); + ASSERT_EQ(reshape_node.shape(), nullptr); +} diff --git a/compiler/moco-tf/src/Transforms/FixPaddingTransform.cpp b/compiler/moco-tf/src/Transforms/FixPaddingTransform.cpp index 1fc92d4..e7d520b 100644 --- a/compiler/moco-tf/src/Transforms/FixPaddingTransform.cpp +++ b/compiler/moco-tf/src/Transforms/FixPaddingTransform.cpp @@ -463,6 +463,12 @@ bool fix_padding(moco::tf::TFMul *node) return false; } +bool fix_padding(moco::tf::TFReshape *node) +{ + // Nothing to do with padding + return false; +} + bool fix_padding(moco::tf::TFRsqrt *node) { // Nothing to do with padding diff --git a/compiler/moco-tf/src/Transforms/FixShapeTransform.cpp b/compiler/moco-tf/src/Transforms/FixShapeTransform.cpp index e5a68da..415ef62 100644 --- a/compiler/moco-tf/src/Transforms/FixShapeTransform.cpp +++ b/compiler/moco-tf/src/Transforms/FixShapeTransform.cpp @@ -742,6 +742,12 @@ bool fix_shape(moco::tf::TFMul *node) return copy_shapedata(x, node); } +bool fix_shape(moco::tf::TFReshape *node) +{ + // TODO implement + throw std::runtime_error("NYI fix_shape TFReshape"); +} + bool fix_shape(moco::tf::TFRsqrt *node) { // Output shape is same as the input x