From: Parichay Kapoor Date: Fri, 17 Sep 2021 04:28:36 +0000 (+0900) Subject: [layer] Bug fixes for layers X-Git-Tag: submit/tizen/20210917.074948^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Fmain;p=platform%2Fcore%2Fml%2Fnntrainer.git [layer] Bug fixes for layers This patch adds bug fixes for layers: - bn layer support in-place is corrected. - flatten layer support in-place is corrected. - pooling layer padding related corrections. Signed-off-by: Parichay Kapoor --- diff --git a/nntrainer/layers/bn_layer.h b/nntrainer/layers/bn_layer.h index 43407c49..4e7d0f8d 100644 --- a/nntrainer/layers/bn_layer.h +++ b/nntrainer/layers/bn_layer.h @@ -108,7 +108,7 @@ public: /** * @copydoc Layer::supportInPlace() */ - bool supportInPlace() const override { return true; } + bool supportInPlace() const override { return false; } inline static const std::string type = "batch_normalization"; diff --git a/nntrainer/layers/flatten_layer.h b/nntrainer/layers/flatten_layer.h index 9debe078..746c56a1 100644 --- a/nntrainer/layers/flatten_layer.h +++ b/nntrainer/layers/flatten_layer.h @@ -75,7 +75,7 @@ public: /** * @copydoc Layer::supportInPlace() */ - bool supportInPlace() const override { return true; } + bool supportInPlace() const override { return false; } /** * @copydoc Layer::exportTo(Exporter &exporter, ExportMethods method) diff --git a/nntrainer/layers/pooling2d_layer.cpp b/nntrainer/layers/pooling2d_layer.cpp index e2e03b01..9c4da5e1 100644 --- a/nntrainer/layers/pooling2d_layer.cpp +++ b/nntrainer/layers/pooling2d_layer.cpp @@ -47,6 +47,7 @@ void Pooling2DLayer::finalize(InitLayerContext &context) { NNTR_THROW_IF(!(pool_size.empty() || pool_size.size() == 2), std::invalid_argument) << "[Pooling2D] the number of pool size should be 0 or 2"; + /** @todo update default value of pooling stride to be pool size */ auto &stride = std::get>(pooling2d_props); auto &pooling_type = std::get(pooling2d_props).get(); @@ -92,8 +93,8 @@ void Pooling2DLayer::finalize(InitLayerContext &context) { unsigned int IM = std::numeric_limits::max(); - if (eff_in_height - pb - pool_size[0] > IM || - eff_in_width - pr - pool_size[1] > IM) { + if (eff_in_height - pt - pool_size[0] > IM || + eff_in_width - pl - pool_size[1] > IM) { throw std::invalid_argument( "[Pooling2D] Failed to initialize: Calculated patch end is over int max"); } @@ -390,11 +391,11 @@ void Pooling2DLayer::pooling2d(Tensor &in, bool training, Tensor &output, unsigned int map_size = in_height * in_width; - int heigth_stride_end = height - patch_height - pt; + int height_stride_end = height - patch_height - pt; int width_stride_end = width - patch_width - pl; for (unsigned int i = 0; i < channel; ++i) { const float *in_data_channel_sliced = in_data + i * map_size; - for (int j = -pt; j <= heigth_stride_end; j += stride[0]) { + for (int j = -pt; j <= height_stride_end; j += stride[0]) { for (int k = -pl; k <= width_stride_end; k += stride[1]) { float pool_value = pool_fn(in_data_channel_sliced, i, j, k); *out_data = pool_value;