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;
}
std::vector<std::string> 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<std::string> 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");
status = layer.setProperty(input_str);
EXPECT_EQ(status, ML_ERROR_NONE);
+ status = layer.initialize(false);
+ EXPECT_EQ(status, ML_ERROR_NONE);
}
/**