diff options
author | Giorgio Arena <giorgio.arena@arm.com> | 2018-02-07 15:38:12 +0000 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:47:18 +0000 |
commit | 1167487ea8e54a76d0a3625e0aa84e2ad9ffd317 (patch) | |
tree | 287dbc45e895c6b637fecc692c04bd4ae59580ae /src/runtime | |
parent | 4e1e7dcd581adecd5ad9c0f9503fc3c43f8222ef (diff) | |
download | ComputeLibrary-1167487ea8e54a76d0a3625e0aa84e2ad9ffd317.tar.gz |
COMPMID-897 Merge batch normalization with bounded relu
Change-Id: I9a607fe620f795cdea1a99fdd3f5f8c2fc76f980
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/119234
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'src/runtime')
3 files changed, 32 insertions, 13 deletions
diff --git a/src/runtime/CL/functions/CLBatchNormalizationLayer.cpp b/src/runtime/CL/functions/CLBatchNormalizationLayer.cpp index 58215c3c3e..f87ea6ea06 100644 --- a/src/runtime/CL/functions/CLBatchNormalizationLayer.cpp +++ b/src/runtime/CL/functions/CLBatchNormalizationLayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 ARM Limited. + * Copyright (c) 2017-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -37,17 +37,18 @@ CLBatchNormalizationLayer::CLBatchNormalizationLayer() { } -void CLBatchNormalizationLayer::configure(ICLTensor *input, ICLTensor *output, const ICLTensor *mean, const ICLTensor *var, const ICLTensor *beta, const ICLTensor *gamma, float epsilon) +void CLBatchNormalizationLayer::configure(ICLTensor *input, ICLTensor *output, const ICLTensor *mean, const ICLTensor *var, const ICLTensor *beta, const ICLTensor *gamma, float epsilon, + ActivationLayerInfo act_info) { - _norm_kernel.configure(input, output, mean, var, beta, gamma, epsilon); + _norm_kernel.configure(input, output, mean, var, beta, gamma, epsilon, act_info); } Status CLBatchNormalizationLayer::validate(const ITensorInfo *input, const ITensorInfo *output, const ITensorInfo *mean, const ITensorInfo *var, const ITensorInfo *beta, const ITensorInfo *gamma, - float epsilon) + float epsilon, ActivationLayerInfo act_info) { - return CLBatchNormalizationLayerKernel::validate(input, output, mean, var, beta, gamma, epsilon); + return CLBatchNormalizationLayerKernel::validate(input, output, mean, var, beta, gamma, epsilon, act_info); } void CLBatchNormalizationLayer::run() diff --git a/src/runtime/GLES_COMPUTE/functions/GCBatchNormalizationLayer.cpp b/src/runtime/GLES_COMPUTE/functions/GCBatchNormalizationLayer.cpp index 99bdf43c05..cc5e8f49f2 100755 --- a/src/runtime/GLES_COMPUTE/functions/GCBatchNormalizationLayer.cpp +++ b/src/runtime/GLES_COMPUTE/functions/GCBatchNormalizationLayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 ARM Limited. + * Copyright (c) 2017-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -37,9 +37,10 @@ GCBatchNormalizationLayer::GCBatchNormalizationLayer() { } -void GCBatchNormalizationLayer::configure(const IGCTensor *input, IGCTensor *output, const IGCTensor *mean, const IGCTensor *var, const IGCTensor *beta, const IGCTensor *gamma, float epsilon) +void GCBatchNormalizationLayer::configure(const IGCTensor *input, IGCTensor *output, const IGCTensor *mean, const IGCTensor *var, const IGCTensor *beta, const IGCTensor *gamma, float epsilon, + ActivationLayerInfo act_info) { - _norm_kernel.configure(input, output, mean, var, beta, gamma, epsilon); + _norm_kernel.configure(input, output, mean, var, beta, gamma, epsilon, act_info); } void GCBatchNormalizationLayer::run() diff --git a/src/runtime/NEON/functions/NEBatchNormalizationLayer.cpp b/src/runtime/NEON/functions/NEBatchNormalizationLayer.cpp index f6be00169d..b3753e842d 100644 --- a/src/runtime/NEON/functions/NEBatchNormalizationLayer.cpp +++ b/src/runtime/NEON/functions/NEBatchNormalizationLayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 ARM Limited. + * Copyright (c) 2017-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -33,23 +33,40 @@ using namespace arm_compute; NEBatchNormalizationLayer::NEBatchNormalizationLayer() - : _norm_kernel() + : _norm_kernel(), _act_func(), _act_info_enabled(false) { } -void NEBatchNormalizationLayer::configure(ITensor *input, ITensor *output, const ITensor *mean, const ITensor *var, const ITensor *beta, const ITensor *gamma, float epsilon) +void NEBatchNormalizationLayer::configure(ITensor *input, ITensor *output, const ITensor *mean, const ITensor *var, const ITensor *beta, const ITensor *gamma, float epsilon, + ActivationLayerInfo act_info) { + _act_info_enabled = act_info.enabled(); + // Configure kernel _norm_kernel.configure(input, output, mean, var, beta, gamma, epsilon); + if(_act_info_enabled) + { + _act_func.configure(output, nullptr, act_info); + } } Status NEBatchNormalizationLayer::validate(const ITensorInfo *input, const ITensorInfo *output, const ITensorInfo *mean, const ITensorInfo *var, const ITensorInfo *beta, const ITensorInfo *gamma, - float epsilon) + float epsilon, ActivationLayerInfo act_info) { - return NEBatchNormalizationLayerKernel::validate(input, output, mean, var, beta, gamma, epsilon); + ARM_COMPUTE_RETURN_ON_ERROR(NEBatchNormalizationLayerKernel::validate(input, output, mean, var, beta, gamma, epsilon)); + if(act_info.enabled()) + { + ARM_COMPUTE_RETURN_ON_ERROR(NEActivationLayer::validate(output, nullptr, act_info)); + } + + return Status{}; } void NEBatchNormalizationLayer::run() { NEScheduler::get().schedule(&_norm_kernel, Window::DimY); + if(_act_info_enabled) + { + _act_func.run(); + } } |