} break;
case PropertyType::kernel_size:
status = getValues(CONV2D_DIM, value, (int *)(kernel_size));
+ NN_RETURN_STATUS();
if (kernel_size[0] == 0 || kernel_size[1] == 0) {
- ml_loge("Error: stride must be greater than 0");
+ ml_loge("Error: kernel_size must be greater than 0");
return ML_ERROR_INVALID_PARAMETER;
}
- NN_RETURN_STATUS();
break;
case PropertyType::stride:
status = getValues(CONV2D_DIM, value, (int *)(stride));
+ NN_RETURN_STATUS();
if (stride[0] == 0 || stride[1] == 0) {
ml_loge("Error: stride must be greater than 0");
return ML_ERROR_INVALID_PARAMETER;
}
- NN_RETURN_STATUS();
break;
case PropertyType::padding:
status = getValues(CONV2D_DIM, value, (int *)(padding));
return output;
}
+
Tensor Conv2DLayer::conv2d(Tensor in, Tensor kernel, unsigned int const *stride,
int &status) {
*
* SPDX-License-Identifier: Apache-2.0-only
*
- * @file pooling2d_layer.h
+ * @file pooling2d_layer.cpp
* @date 12 June 2020
* @see https://github.com/nnstreamer/nntrainer
* @author Jijoong Moon <jijoong.moon@samsung.com>
int Pooling2DLayer::setProperty(std::vector<std::string> values) {
int status = ML_ERROR_NONE;
- // NYI
+
+ for (unsigned int i = 0; i < values.size(); ++i) {
+ std::string key;
+ std::string value;
+
+ status = getKeyValue(values[i], key, value);
+ NN_RETURN_STATUS();
+ unsigned int t = parseLayerProperty(key);
+ switch (static_cast<PropertyType>(t)) {
+ case PropertyType::pooling:
+ pooling_type = (PoolingType)parseType(value, TOKEN_POOLING);
+ if (pooling_type == PoolingType::unknown) {
+ ml_loge("Error: Unknown pooling type");
+ return ML_ERROR_INVALID_PARAMETER;
+ }
+ break;
+ case PropertyType::pooling_size:
+ status = getValues(POOLING2D_DIM, value, (int *)(pooling_size));
+ NN_RETURN_STATUS();
+ if (pooling_size[0] == 0 || pooling_size[1] == 0) {
+ ml_loge("Error: pooling_size must be greater than 0");
+ return ML_ERROR_INVALID_PARAMETER;
+ }
+ break;
+ case PropertyType::stride:
+ status = getValues(POOLING2D_DIM, value, (int *)(stride));
+ NN_RETURN_STATUS();
+ if (stride[0] == 0 || stride[1] == 0) {
+ ml_loge("Error: stride must be greater than 0");
+ return ML_ERROR_INVALID_PARAMETER;
+ }
+ break;
+ case PropertyType::padding:
+ status = getValues(POOLING2D_DIM, value, (int *)(padding));
+ NN_RETURN_STATUS();
+ if (padding[0] < 0 || padding[1] < 0) {
+ ml_loge("Error: padding must be greater than 0");
+ return ML_ERROR_INVALID_PARAMETER;
+ }
+ break;
+ default:
+ ml_loge("Error: Unknown Layer Property Key : %s", key.c_str());
+ status = ML_ERROR_INVALID_PARAMETER;
+ break;
+ }
+ }
return status;
}
#include <nntrainer_error.h>
#include <nntrainer_test_util.h>
#include <optimizer.h>
+#include <pooling2d_layer.h>
#include <util_func.h>
/**
}
/**
+ * @brief Pooling 2D Layer
+ */
+TEST(nntrainer_Pooling2D, setProperty_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");
+
+ 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 Main gtest
*/
int main(int argc, char **argv) {