1 // Copyright (C) 2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <builders/ie_lrn_layer.hpp>
6 #include <ie_cnn_layer_builder.h>
10 using namespace InferenceEngine;
12 Builder::LRNLayer::LRNLayer(const std::string& name): LayerDecorator("LRN", name) {
13 getLayer()->getOutputPorts().resize(1);
14 getLayer()->getInputPorts().resize(1);
21 Builder::LRNLayer::LRNLayer(const Layer::Ptr& layer): LayerDecorator(layer) {
25 Builder::LRNLayer::LRNLayer(const Layer::CPtr& layer): LayerDecorator(layer) {
29 Builder::LRNLayer& Builder::LRNLayer::setName(const std::string& name) {
30 getLayer()->setName(name);
34 const Port& Builder::LRNLayer::getPort() const {
35 return getLayer()->getOutputPorts()[0];
38 Builder::LRNLayer& Builder::LRNLayer::setPort(const Port &port) {
39 getLayer()->getOutputPorts()[0] = port;
40 getLayer()->getInputPorts()[0] = port;
44 size_t Builder::LRNLayer::getSize() const {
45 return getLayer()->getParameters().at("size");
48 Builder::LRNLayer& Builder::LRNLayer::setSize(size_t size) {
49 getLayer()->getParameters()["size"] = size;
53 float Builder::LRNLayer::getAlpha() const {
54 return getLayer()->getParameters().at("alpha");
57 Builder::LRNLayer& Builder::LRNLayer::setAlpha(float alpha) {
58 getLayer()->getParameters()["alpha"] = alpha;
62 float Builder::LRNLayer::getBeta() const {
63 return getLayer()->getParameters().at("beta");
66 Builder::LRNLayer& Builder::LRNLayer::setBeta(float beta) {
67 getLayer()->getParameters()["beta"] = beta;
71 float Builder::LRNLayer::getBias() const {
72 return getLayer()->getParameters().at("bias");
75 Builder::LRNLayer& Builder::LRNLayer::setBias(float bias) {
76 getLayer()->getParameters()["bias"] = bias;
80 REG_VALIDATOR_FOR(LRN, [](const Builder::Layer::CPtr &input_layer, bool partial) {
81 Builder::LRNLayer layer(input_layer);
82 if (layer.getAlpha() <= 0) {
83 THROW_IE_EXCEPTION << "Alpha should be > 0";
85 if (layer.getBeta() <= 0) {
86 THROW_IE_EXCEPTION << "Beta should be > 0";
88 if (layer.getSize() == 0) {
89 THROW_IE_EXCEPTION << "Size should be > 0";
91 if (!input_layer->getInputPorts().empty() &&
92 !input_layer->getOutputPorts().empty() &&
93 !input_layer->getInputPorts()[0].shape().empty() &&
94 !input_layer->getOutputPorts()[0].shape().empty() &&
95 input_layer->getInputPorts()[0].shape() != input_layer->getOutputPorts()[0].shape()) {
96 THROW_IE_EXCEPTION << "Input and output ports should be equal";
100 REG_CONVERTER_FOR(LRN, [](const CNNLayerPtr& cnnLayer, Builder::Layer& layer) {
101 layer.getParameters()["bias"] = cnnLayer->GetParamAsFloat("bias", 1.0f);
102 layer.getParameters()["beta"] = cnnLayer->GetParamAsFloat("beta", 0.75f);
103 layer.getParameters()["alpha"] = cnnLayer->GetParamAsFloat("alpha", 1e-4f);
104 layer.getParameters()["size"] = cnnLayer->GetParamAsUInt("size", 1);