• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright 2021 Huawei Technologies Co., Ltd
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "schema/model_v0_generated.h"
18 #include "src/ops/populate/populate_register.h"
19 #include "nnacl/l2_norm_parameter.h"
20 
21 namespace mindspore {
22 namespace lite {
23 namespace {
PopulateL2NormParameter(const void * prim)24 OpParameter *PopulateL2NormParameter(const void *prim) {
25   auto *primitive = static_cast<const schema::v0::Primitive *>(prim);
26   MS_ASSERT(primitive != nullptr);
27   auto l2_norm_prim = primitive->value_as_L2Norm();
28   if (l2_norm_prim == nullptr) {
29     MS_LOG(ERROR) << "l2_norm_prim is nullptr";
30     return nullptr;
31   }
32   auto *l2_norm_parameter = reinterpret_cast<L2NormParameter *>(malloc(sizeof(L2NormParameter)));
33   if (l2_norm_parameter == nullptr) {
34     MS_LOG(ERROR) << "malloc L2NormParameter failed.";
35     return nullptr;
36   }
37   memset(l2_norm_parameter, 0, sizeof(L2NormParameter));
38   l2_norm_parameter->op_parameter_.type_ = schema::PrimitiveType_L2NormalizeFusion;
39 
40   auto axis_vec = l2_norm_prim->axis();
41   if (axis_vec == nullptr) {
42     MS_LOG(ERROR) << "axis_vec is nullptr";
43     free(l2_norm_parameter);
44     return nullptr;
45   }
46   l2_norm_parameter->axis_num_ = axis_vec->size();
47   if (((size_t)axis_vec->size()) > MAX_SHAPE_SIZE) {
48     MS_LOG(ERROR) << "axis_vec size too big, which cannot be bigger than " << MAX_SHAPE_SIZE;
49     free(l2_norm_parameter);
50     return nullptr;
51   }
52 
53   for (size_t i = 0; i < axis_vec->size(); i++) {
54     l2_norm_parameter->axis_[i] = *(axis_vec->begin() + i);
55   }
56   if (l2_norm_prim->epsilon() < 1e-6) {
57     l2_norm_parameter->epsilon_ = 1e-6;
58   } else {
59     l2_norm_parameter->epsilon_ = l2_norm_prim->epsilon();
60   }
61   if (l2_norm_prim->activationType() == static_cast<int>(schema::v0::ActivationType_RELU)) {
62     l2_norm_parameter->act_type_ = ActType_Relu;
63   } else if (l2_norm_prim->activationType() == static_cast<int>(schema::v0::ActivationType_RELU6)) {
64     l2_norm_parameter->act_type_ = ActType_Relu6;
65   } else {
66     l2_norm_parameter->act_type_ = ActType_No;
67   }
68   return reinterpret_cast<OpParameter *>(l2_norm_parameter);
69 }
70 }  // namespace
71 
72 Registry g_l2NormV0ParameterRegistry(schema::v0::PrimitiveType_L2Norm, PopulateL2NormParameter, SCHEMA_V0);
73 }  // namespace lite
74 }  // namespace mindspore
75