[loco] Introduce BiasEncode (#3766)
author박종현/On-Device Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Fri, 14 Jun 2019 05:08:23 +0000 (14:08 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Fri, 14 Jun 2019 05:08:23 +0000 (14:08 +0900)
This commit extends loco with BiasEncode node which converts a tensor as
a bias.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/loco/include/loco/IR/CanonicalNodes.lst
contrib/loco/include/loco/IR/Domain.h
contrib/loco/include/loco/IR/Nodes.h
contrib/loco/src/IR/Nodes.test.cpp

index 593d124..004e49d 100644 (file)
@@ -8,6 +8,7 @@
 
 // CANONICAL_NODE(OPCODE, CLASS)
 CANONICAL_NODE(AvgPool2D, AvgPool2D)
+CANONICAL_NODE(BiasEncode, BiasEncode)
 CANONICAL_NODE(ConstGen, ConstGen)
 CANONICAL_NODE(Conv2D, Conv2D)
 CANONICAL_NODE(Forward, Forward)
index d4ca518..7158ef3 100644 (file)
@@ -42,6 +42,7 @@ enum class Domain
   Tensor,
   Feature,
   Filter,
+  Bias,
   /* ... */
 };
 
index 89d8b56..0fb9e55 100644 (file)
@@ -414,6 +414,21 @@ private:
   // TODO Support "Dilation"
 };
 
+/**
+ * @brief Create a "Bias" from a "Tensor"
+ *
+ * BiasEncode currently requires a rank-1 tensor as its input.
+ */
+class BiasEncode final : public FixedArityNode<1, CanonicalNodeImpl<CanonicalOpcode::BiasEncode>>
+{
+public:
+  BiasEncode() = default;
+
+public:
+  Node *input(void) const { return at(0)->node(); }
+  void input(Node *node) { at(0)->node(node); }
+};
+
 } // namespace loco
 
 #endif // __LOCO_IR_NODES_H__
index f618831..247a898 100644 (file)
@@ -329,3 +329,13 @@ TEST(Conv2DTest, constructor)
   ASSERT_EQ(conv2d.stride()->vertical(), 1);
   ASSERT_EQ(conv2d.stride()->horizontal(), 1);
 }
+
+TEST(BiasEncodeTest, constructor)
+{
+  loco::BiasEncode bias_encode;
+
+  ASSERT_EQ(bias_encode.dialect(), loco::CanonicalDialect::get());
+  ASSERT_EQ(bias_encode.opcode(), loco::CanonicalOpcode::BiasEncode);
+
+  ASSERT_EQ(bias_encode.input(), nullptr);
+}