Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / src / inference_engine / builders / ie_rnn_sequence_layer.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <builders/ie_rnn_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::RNNSequenceLayer::RNNSequenceLayer(const std::string& name): LayerDecorator("RNNSequence", 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::RNNSequenceLayer::RNNSequenceLayer(const Layer::Ptr& layer): LayerDecorator(layer) {
22     checkType("RNNSequence");
23 }
24
25 Builder::RNNSequenceLayer::RNNSequenceLayer(const Layer::CPtr& layer): LayerDecorator(layer) {
26     checkType("RNNSequence");
27 }
28
29 Builder::RNNSequenceLayer& Builder::RNNSequenceLayer::setName(const std::string& name) {
30     getLayer()->setName(name);
31     return *this;
32 }
33
34 const std::vector<Port>& Builder::RNNSequenceLayer::getInputPorts() const {
35     return getLayer()->getInputPorts();
36 }
37
38 Builder::RNNSequenceLayer& Builder::RNNSequenceLayer::setInputPorts(const std::vector<Port>& ports) {
39     getLayer()->getInputPorts() = ports;
40     return *this;
41 }
42
43 const std::vector<Port>& Builder::RNNSequenceLayer::getOutputPorts() const {
44     return getLayer()->getOutputPorts();
45 }
46
47 Builder::RNNSequenceLayer& Builder::RNNSequenceLayer::setOutputPorts(const std::vector<Port>& ports) {
48     getLayer()->getOutputPorts() = ports;
49     return *this;
50 }
51 int Builder::RNNSequenceLayer::getHiddenSize() const {
52     return getLayer()->getParameters().at("hidden_size");
53 }
54 Builder::RNNSequenceLayer& Builder::RNNSequenceLayer::setHiddenSize(int size) {
55     getLayer()->getParameters()["hidden_size"] = size;
56     return *this;
57 }
58 bool Builder::RNNSequenceLayer::getSequenceDim() const {
59     return getLayer()->getParameters().at("sequence_dim");
60 }
61 Builder::RNNSequenceLayer& Builder::RNNSequenceLayer::setSqquenceDim(bool flag) {
62     getLayer()->getParameters()["sequence_dim"] = flag;
63     return *this;
64 }
65 const std::vector<std::string>& Builder::RNNSequenceLayer::getActivations() const {
66     return getLayer()->getParameters().at("activations");
67 }
68 Builder::RNNSequenceLayer& Builder::RNNSequenceLayer::setActivations(const std::vector<std::string>& activations) {
69     getLayer()->getParameters()["activations"] = activations;
70     return *this;
71 }
72 const std::vector<float>& Builder::RNNSequenceLayer::getActivationsAlpha() const {
73     return getLayer()->getParameters().at("activations_alpha");
74 }
75 Builder::RNNSequenceLayer& Builder::RNNSequenceLayer::setActivationsAlpha(const std::vector<float>& activations) {
76     getLayer()->getParameters()["activations_alpha"] = activations;
77     return *this;
78 }
79 const std::vector<float>& Builder::RNNSequenceLayer::getActivationsBeta() const {
80     return getLayer()->getParameters().at("activations_beta");
81 }
82 Builder::RNNSequenceLayer& Builder::RNNSequenceLayer::setActivationsBeta(const std::vector<float>& activations) {
83     getLayer()->getParameters()["activations_beta"] = activations;
84     return *this;
85 }
86 REG_CONVERTER_FOR(RNNSequence, [](const CNNLayerPtr& cnnLayer, Builder::Layer& layer) {
87     layer.getParameters()["hidden_size"] = cnnLayer->GetParamAsInt("hidden_size");
88     layer.getParameters()["sequence_dim"] = cnnLayer->GetParamsAsBool("sequence_dim", true);
89     std::vector<std::string> activations;
90     std::istringstream stream(cnnLayer->GetParamAsString("activations"));
91     std::string str;
92     while (getline(stream, str, ',')) {
93          activations.push_back(str);
94     }
95     layer.getParameters()["activations"] = activations;
96     layer.getParameters()["activations_alpha"] = cnnLayer->GetParamAsFloats("activations_alpha");
97     layer.getParameters()["activations_beta"] = cnnLayer->GetParamAsFloats("activations_beta");
98 });
99
100