aboutsummaryrefslogtreecommitdiff
path: root/arm_compute/graph
diff options
context:
space:
mode:
authorIsabella Gottardi <isabella.gottardi@arm.com>2018-04-06 12:24:55 +0100
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:52:35 +0000
commit88d5b22eb5574d8b564474df2c758d222b3b5547 (patch)
tree92edf8ecc38a9349faf1ef958998abddcf5b9a8c /arm_compute/graph
parentbcedf513938fca9e33331bdef975f0488288bad4 (diff)
downloadComputeLibrary-88d5b22eb5574d8b564474df2c758d222b3b5547.tar.gz
COMPMID-1035 - Add ResneXt50 as a graph example
Change-Id: I42f0e7dab38e45b5eecfe6858eaecee8939c8585 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/129291 Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com> Reviewed-by: Anthony Barbier <anthony.barbier@arm.com> Tested-by: Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'arm_compute/graph')
-rw-r--r--arm_compute/graph/GraphBuilder.h14
-rw-r--r--arm_compute/graph/Types.h1
-rw-r--r--arm_compute/graph/frontend/Layers.h27
-rw-r--r--arm_compute/graph/nodes/EltwiseLayerNode.h20
4 files changed, 60 insertions, 2 deletions
diff --git a/arm_compute/graph/GraphBuilder.h b/arm_compute/graph/GraphBuilder.h
index aea28eb8d6..04edf673d1 100644
--- a/arm_compute/graph/GraphBuilder.h
+++ b/arm_compute/graph/GraphBuilder.h
@@ -213,6 +213,20 @@ public:
* @return Node ID of the created node, EmptyNodeID in case of error
*/
static NodeID add_reshape_node(Graph &g, NodeParams params, NodeIdxPair input, TensorShape shape);
+ /** Adds a scale layer node to the graph
+ * This layer computes a product of the input with a scale (read from mul_accessor) and it applies an offset (read from add_accessor).
+ * output = input * mul_w + add_w
+ *
+ * @param[in] g Graph to add the layer to
+ * @param[in] params Common node parameters
+ * @param[in] input Input to the fully connected layer node as a NodeID-Index pair
+ * @param[in] mul_accessor (Optional) Accessor of the mul node data
+ * @param[in] add_accessor (Optional) Accessor of the add node data
+ *
+ * @return Node ID of the created node, EmptyNodeID in case of error
+ */
+ static NodeID add_scale_layer(Graph &g, const NodeParams &params, NodeIdxPair input,
+ ITensorAccessorUPtr mul_accessor = nullptr, ITensorAccessorUPtr add_accessor = nullptr);
/** Adds a softmax node to the graph
*
* @param[in] g Graph to add the node to
diff --git a/arm_compute/graph/Types.h b/arm_compute/graph/Types.h
index a910610c7a..d4e4f99377 100644
--- a/arm_compute/graph/Types.h
+++ b/arm_compute/graph/Types.h
@@ -137,6 +137,7 @@ enum class NodeType
NormalizationLayer,
PoolingLayer,
ReshapeLayer,
+ ScaleLayer,
SoftmaxLayer,
SplitLayer,
diff --git a/arm_compute/graph/frontend/Layers.h b/arm_compute/graph/frontend/Layers.h
index d122a7a967..a97684453c 100644
--- a/arm_compute/graph/frontend/Layers.h
+++ b/arm_compute/graph/frontend/Layers.h
@@ -380,6 +380,33 @@ private:
TensorShape _shape;
};
+/** Scale Layer */
+class ScaleLayer final : public ILayer
+{
+public:
+ /** Construct a scale layer.
+ *
+ * @param[in] mul_w Accessor to get mul weight from.
+ * @param[in] add_w Accessor to get add weight from.
+ */
+ ScaleLayer(ITensorAccessorUPtr mul_w,
+ ITensorAccessorUPtr add_w)
+ : _mul_w(std::move(mul_w)), _add_w(std::move(add_w))
+ {
+ }
+
+ NodeID create_layer(IStream &s) override
+ {
+ NodeParams common_params = { name(), s.hints().target_hint };
+ NodeIdxPair input = { s.tail_node(), 0 };
+ return GraphBuilder::add_scale_layer(s.graph(), common_params, input, std::move(_mul_w), std::move(_add_w));
+ }
+
+private:
+ ITensorAccessorUPtr _mul_w;
+ ITensorAccessorUPtr _add_w;
+};
+
/** Softmax Layer */
class SoftmaxLayer final : public ILayer
{
diff --git a/arm_compute/graph/nodes/EltwiseLayerNode.h b/arm_compute/graph/nodes/EltwiseLayerNode.h
index 5b9fa84bbb..09cbc75b80 100644
--- a/arm_compute/graph/nodes/EltwiseLayerNode.h
+++ b/arm_compute/graph/nodes/EltwiseLayerNode.h
@@ -36,15 +36,29 @@ class EltwiseLayerNode final : public INode
public:
/** Constructor
*
- * @param[in] op Element-wise operation to perform
+ * @param[in] op Element-wise operation to perform
+ * @param[in] c_policy (Optional) Convert policy used for the operation
+ * @param[in] r_policy (Optional) Rounding policy used for the operation
*/
- EltwiseLayerNode(EltwiseOperation op);
+ EltwiseLayerNode(EltwiseOperation op, ConvertPolicy c_policy = ConvertPolicy::SATURATE, RoundingPolicy r_policy = RoundingPolicy::TO_ZERO);
/** Eltwise operation accessor
*
* @return Eltwise operation that is to be performed by the node
*/
EltwiseOperation eltwise_operation() const;
+ /** Convert policy accessor
+ *
+ * @return Convert policy that is used in the node
+ */
+ ConvertPolicy convert_policy() const;
+
+ /** Rounding policy accessor
+ *
+ * @return Convert policy that is used in the node
+ */
+ RoundingPolicy rounding_policy() const;
+
// Inherited overridden methods:
NodeType type() const override;
bool forward_descriptors() override;
@@ -53,6 +67,8 @@ public:
private:
EltwiseOperation _op;
+ ConvertPolicy _convert_policy;
+ RoundingPolicy _rounding_policy;
};
} // namespace graph
} // namespace arm_compute