Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / src / inference_engine / builders / ie_gru_sequence_layer.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <builders/ie_gru_sequence_layer.hpp>
6 #include <ie_cnn_layer_builder.h>
7
8 #include <vector>
9 #include <string>
10
11 using namespace InferenceEngine;
12
13 Builder::GRUSequenceLayer::GRUSequenceLayer(const std::string& name): LayerDecorator("GRUSequence", name) {
14     getLayer()->getOutputPorts().resize(2);
15     getLayer()->getInputPorts().resize(5);
16     getLayer()->getInputPorts()[1].setParameter("type", "weights");
17     getLayer()->getInputPorts()[2].setParameter("type", "biases");
18     getLayer()->getInputPorts()[3].setParameter("type", "optional");
19 }
20
21 Builder::GRUSequenceLayer::GRUSequenceLayer(const Layer::Ptr& layer): LayerDecorator(layer) {
22     checkType("GRUSequence");
23 }
24
25 Builder::GRUSequenceLayer::GRUSequenceLayer(const Layer::CPtr& layer): LayerDecorator(layer) {
26     checkType("GRUSequence");
27 }
28
29 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setName(const std::string& name) {
30     getLayer()->setName(name);
31     return *this;
32 }
33
34 const std::vector<Port>& Builder::GRUSequenceLayer::getInputPorts() const {
35     return getLayer()->getInputPorts();
36 }
37
38 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setInputPorts(const std::vector<Port>& ports) {
39     getLayer()->getInputPorts() = ports;
40     return *this;
41 }
42
43 const std::vector<Port>& Builder::GRUSequenceLayer::getOutputPorts() const {
44     return getLayer()->getOutputPorts();
45 }
46
47 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setOutputPorts(const std::vector<Port>& ports) {
48     getLayer()->getOutputPorts() = ports;
49     return *this;
50 }
51 int Builder::GRUSequenceLayer::getHiddenSize() const {
52     return getLayer()->getParameters().at("hidden_size");
53 }
54 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setHiddenSize(int size) {
55     getLayer()->getParameters()["hidden_size"] = size;
56     return *this;
57 }
58 bool Builder::GRUSequenceLayer::getSequenceDim() const {
59     return getLayer()->getParameters().at("sequence_dim");
60 }
61 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setSqquenceDim(bool flag) {
62     getLayer()->getParameters()["sequence_dim"] = flag;
63     return *this;
64 }
65 const std::vector<std::string>& Builder::GRUSequenceLayer::getActivations() const {
66     return getLayer()->getParameters().at("activations");
67 }
68 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setActivations(const std::vector<std::string>& activations) {
69     getLayer()->getParameters()["activations"] = activations;
70     return *this;
71 }
72 const std::vector<float>& Builder::GRUSequenceLayer::getActivationsAlpha() const {
73     return getLayer()->getParameters().at("activations_alpha");
74 }
75 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setActivationsAlpha(const std::vector<float>& activations) {
76     getLayer()->getParameters()["activations_alpha"] = activations;
77     return *this;
78 }
79 const std::vector<float>& Builder::GRUSequenceLayer::getActivationsBeta() const {
80     return getLayer()->getParameters().at("activations_beta");
81 }
82 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setActivationsBeta(const std::vector<float>& activations) {
83     getLayer()->getParameters()["activations_beta"] = activations;
84     return *this;
85 }
86 float Builder::GRUSequenceLayer::getClip() const {
87     return getLayer()->getParameters().at("clip");
88 }
89 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setClip(float clip) {
90     getLayer()->getParameters()["clip"] = clip;
91     return *this;
92 }
93
94 bool Builder::GRUSequenceLayer::getLinearBeforeReset() const {
95     return getLayer()->getParameters().at("linear_before_reset");
96 }
97 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setLinearBeforeReset(bool flag) {
98     getLayer()->getParameters()["linear_before_reset"] = flag;
99     return *this;
100 }
101 const std::string& Builder::GRUSequenceLayer::getDirection() const {
102     return getLayer()->getParameters().at("direction");
103 }
104 Builder::GRUSequenceLayer& Builder::GRUSequenceLayer::setDirection(const std::string& direction) {
105     getLayer()->getParameters()["direction"] = direction;
106     return *this;
107 }
108
109 REG_CONVERTER_FOR(GRUSequence, [](const CNNLayerPtr& cnnLayer, Builder::Layer& layer) {
110     layer.getParameters()["hidden_size"] = cnnLayer->GetParamAsInt("hidden_size");
111     layer.getParameters()["sequence_dim"] = cnnLayer->GetParamsAsBool("sequence_dim", true);
112     std::vector<std::string> activations;
113     std::istringstream stream(cnnLayer->GetParamAsString("activations"));
114     std::string str;
115     while (getline(stream, str, ',')) {
116          activations.push_back(str);
117     }
118     layer.getParameters()["activations"] = activations;
119     layer.getParameters()["activations_alpha"] = cnnLayer->GetParamAsFloats("activations_alpha");
120     layer.getParameters()["activations_beta"] = cnnLayer->GetParamAsFloats("activations_beta");
121     layer.getParameters()["clip"] = cnnLayer->GetParamAsFloat("clip");
122     layer.getParameters()["linear_before_reset"] = cnnLayer->GetParamsAsBool("linear_before_reset", true);
123     layer.getParameters()["direction"] = cnnLayer->GetParamAsString("direction", "");
124 });
125
126