From: jijoong.moon Date: Mon, 15 Jun 2020 04:12:48 +0000 (+0900) Subject: [ Pooling2D ] initialize pooling 2d layer X-Git-Tag: accepted/tizen/unified/20200706.064221~49 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4c4566d0a07115f6a670ea407136b1a77ee2d153;p=platform%2Fcore%2Fml%2Fnntrainer.git [ Pooling2D ] initialize pooling 2d layer This PR includes initialization of pooling 2d layer. . check input dimension . set intput / output dimemsion . allocate hidden layer **Self evaluation:** 1. Build test: [X]Passed [ ]Failed [ ]Skipped 2. Run test: [X]Passed [ ]Failed [ ]Skipped Signed-off-by: jijoong.moon --- diff --git a/nntrainer/src/pooling2d_layer.cpp b/nntrainer/src/pooling2d_layer.cpp index 3d7ca38..ecddc08 100644 --- a/nntrainer/src/pooling2d_layer.cpp +++ b/nntrainer/src/pooling2d_layer.cpp @@ -23,7 +23,25 @@ namespace nntrainer { int Pooling2DLayer::initialize(bool last) { int status = ML_ERROR_NONE; - // NYI + if (input_dim.getDataLen() == 1) { + ml_logw("Warning: the length of previous layer dimension is one"); + } + if (input_dim.batch() <= 0 || input_dim.height() <= 0 || + input_dim.width() <= 0 || input_dim.channel() <= 0) { + ml_loge("Error: Dimension must be greater than 0"); + return ML_ERROR_INVALID_PARAMETER; + } + + this->last_layer = last; + output_dim.batch(input_dim.batch()); + output_dim.channel(input_dim.channel()); + output_dim.height( + (input_dim.height() - pooling_size[0] + 2 * padding[0]) / stride[0] + 1); + output_dim.width( + (input_dim.width() - pooling_size[1] + 2 * padding[1]) / stride[1] + 1); + + hidden = Tensor(output_dim); + return status; } diff --git a/test/unittest/unittest_nntrainer_layers.cpp b/test/unittest/unittest_nntrainer_layers.cpp index ee8a3ce..98a13fa 100644 --- a/test/unittest/unittest_nntrainer_layers.cpp +++ b/test/unittest/unittest_nntrainer_layers.cpp @@ -547,6 +547,27 @@ TEST(nntrainer_Pooling2D, setProperty_01_p) { std::vector input_str; nntrainer::TensorDim previous_dim; previous_dim.setTensorDim("1:2:5:5"); + layer.setInputDimension(previous_dim); + + input_str.push_back("pooling_size= 2,2"); + input_str.push_back("stride=1, 1"); + input_str.push_back("padding=0,0"); + input_str.push_back("pooling = average"); + + status = layer.setProperty(input_str); + EXPECT_EQ(status, ML_ERROR_NONE); +} + +/** + * @brief Pooling 2D Layer + */ +TEST(nntrainer_Pooling2D, initialize_01_p) { + int status = ML_ERROR_NONE; + nntrainer::Pooling2DLayer layer; + std::vector input_str; + nntrainer::TensorDim previous_dim; + previous_dim.setTensorDim("1:2:5:5"); + layer.setInputDimension(previous_dim); input_str.push_back("pooling_size= 2,2"); input_str.push_back("stride=1, 1"); @@ -555,6 +576,8 @@ TEST(nntrainer_Pooling2D, setProperty_01_p) { status = layer.setProperty(input_str); EXPECT_EQ(status, ML_ERROR_NONE); + status = layer.initialize(false); + EXPECT_EQ(status, ML_ERROR_NONE); } /**