Browse Source

!14350 [MS_LITE] fix issue to r1.2

From: @YeFeng_24
Reviewed-by: @hangangqiang,@zhanghaibo5
Signed-off-by: @hangangqiang
tags/v1.2.0
mindspore-ci-bot Gitee 5 years ago
parent
commit
5f01223ca4
6 changed files with 24 additions and 34 deletions
  1. +8
    -0
      mindspore/lite/nnacl/fp32/arithmetic_fp32.c
  2. +1
    -0
      mindspore/lite/nnacl/fp32/arithmetic_fp32.h
  3. +3
    -0
      mindspore/lite/nnacl/infer/transpose_infer.c
  4. +3
    -2
      mindspore/lite/src/runtime/kernel/arm/fp32/arithmetic_fp32.cc
  5. +9
    -22
      mindspore/lite/tools/converter/parser/tf/tf_activation_parser.cc
  6. +0
    -10
      mindspore/lite/tools/converter/parser/tf/tf_activation_parser.h

+ 8
- 0
mindspore/lite/nnacl/fp32/arithmetic_fp32.c View File

@@ -145,6 +145,14 @@ int ElementLogicalOr(const float *in0, const float *in1, float *out, int size) {
return NNACL_OK;
}

int ElementLogicalOrBool(const bool *in0, const bool *in1, bool *out, int size) {
int index = 0;
for (; index < size; index++) {
out[index] = (in0[index]) | (in1[index]);
}
return NNACL_OK;
}

int ElementMaximum(const float *in0, const float *in1, float *out, int size) {
int index = 0;
#ifdef ENABLE_NEON


+ 1
- 0
mindspore/lite/nnacl/fp32/arithmetic_fp32.h View File

@@ -42,6 +42,7 @@ int ElementLogicalAndBool(const bool *in0, const bool *in1, bool *out, int size)

/* logical or */
int ElementLogicalOr(const float *in0, const float *in1, float *out, int size);
int ElementLogicalOrBool(const bool *in0, const bool *in1, bool *out, int size);

/* max min */
int ElementMaximum(const float *in0, const float *in1, float *out, int size);


+ 3
- 0
mindspore/lite/nnacl/infer/transpose_infer.c View File

@@ -49,6 +49,9 @@ int TransposeInferShape(const TensorC *const *inputs, size_t inputs_size, Tensor
if (perm_tensor->shape_size_ == 0) {
return NNACL_INFER_INVALID;
}
if (perms_num != 0 && perm_data == NULL) {
return NNACL_INFER_INVALID;
}
int perm[MAX_SHAPE_SIZE];
size_t perm_size = 0;
for (size_t i = 0; i < perms_num; i++) {


+ 3
- 2
mindspore/lite/src/runtime/kernel/arm/fp32/arithmetic_fp32.cc View File

@@ -213,8 +213,8 @@ void ArithmeticCPUKernel::InitRunFunction(int primitive_type) {
ElementOptDivInt},
{PrimitiveType_LogicalAnd, schema::ActivationType_NO_ACTIVATION, ElementLogicalAnd, ElementLogicalAndInt,
ElementLogicalAndBool, nullptr, nullptr},
{PrimitiveType_LogicalOr, schema::ActivationType_NO_ACTIVATION, ElementLogicalOr, nullptr, nullptr, nullptr,
nullptr},
{PrimitiveType_LogicalOr, schema::ActivationType_NO_ACTIVATION, ElementLogicalOr, nullptr, ElementLogicalOrBool,
nullptr, nullptr},
{PrimitiveType_Maximum, schema::ActivationType_NO_ACTIVATION, ElementMaximum, ElementMaximumInt, nullptr, nullptr,
nullptr},
{PrimitiveType_Minimum, schema::ActivationType_NO_ACTIVATION, ElementMinimum, ElementMinimumInt, nullptr, nullptr,
@@ -435,6 +435,7 @@ REG_KERNEL(kCPU, kNumberTypeFloat32, PrimitiveType_LogicalAnd, LiteKernelCreator
REG_KERNEL(kCPU, kNumberTypeBool, PrimitiveType_LogicalAnd, LiteKernelCreator<ArithmeticCPUKernel>)
REG_KERNEL(kCPU, kNumberTypeInt32, PrimitiveType_LogicalAnd, LiteKernelCreator<ArithmeticCPUKernel>)
REG_KERNEL(kCPU, kNumberTypeFloat32, PrimitiveType_LogicalOr, LiteKernelCreator<ArithmeticCPUKernel>)
REG_KERNEL(kCPU, kNumberTypeBool, PrimitiveType_LogicalOr, LiteKernelCreator<ArithmeticCPUKernel>)
REG_KERNEL(kCPU, kNumberTypeFloat32, PrimitiveType_Maximum, LiteKernelCreator<ArithmeticCPUKernel>)
REG_KERNEL(kCPU, kNumberTypeFloat32, PrimitiveType_Minimum, LiteKernelCreator<ArithmeticCPUKernel>)
REG_KERNEL(kCPU, kNumberTypeInt32, PrimitiveType_Maximum, LiteKernelCreator<ArithmeticCPUKernel>)


+ 9
- 22
mindspore/lite/tools/converter/parser/tf/tf_activation_parser.cc View File

@@ -41,6 +41,14 @@ ops::PrimitiveC *TFActivationParser::Parse(const tensorflow::NodeDef &tf_op,
prim->set_activation_type(mindspore::ActivationType::SELU);
} else if (tf_op.op() == "Softplus") {
prim->set_activation_type(mindspore::ActivationType::SOFTPLUS);
} else if (tf_op.op() == "LeakyRelu") {
prim->set_activation_type(mindspore::ActivationType::LEAKY_RELU);
tensorflow::AttrValue attr_value;
if (!TensorFlowUtils::FindAttrValue(tf_op, "alpha", &attr_value)) {
MS_LOG(ERROR) << "The attribute alpha should be specified.";
return nullptr;
}
prim->set_alpha(attr_value.f());
} else {
MS_LOG(ERROR) << "unsupported activation type:" << tf_op.op();
return nullptr;
@@ -55,33 +63,12 @@ ops::PrimitiveC *TFActivationParser::Parse(const tensorflow::NodeDef &tf_op,
return prim.release();
}

ops::PrimitiveC *TFLeakyReluParser::Parse(const tensorflow::NodeDef &tf_op,
const std::map<string, const tensorflow::NodeDef *> &tf_node_map,
std::vector<std::string> *inputs, int *output_size) {
auto prim = std::make_unique<ops::LeakyRelu>();

tensorflow::AttrValue attr_value;
if (!TensorFlowUtils::FindAttrValue(tf_op, "alpha", &attr_value)) {
MS_LOG(ERROR) << "The attribute alpha should be specified.";
return nullptr;
}
prim->set_negative_slope(attr_value.f());

*output_size = 1;
if (AddOpInput(tf_op, 0, inputs) != RET_OK) {
MS_LOG(ERROR) << "add op input failed";
return nullptr;
}

return prim.release();
}

TFNodeRegistrar g_tfReluParser("Relu", new TFActivationParser());
TFNodeRegistrar g_tfRelu6Parser("Relu6", new TFActivationParser());
TFNodeRegistrar g_tfSigmoidParser("Sigmoid", new TFActivationParser());
TFNodeRegistrar g_tfTanhParser("Tanh", new TFActivationParser());
TFNodeRegistrar g_tfSeLUParser("Selu", new TFActivationParser());
TFNodeRegistrar g_tfLeakyReluParser("LeakyRelu", new TFLeakyReluParser());
TFNodeRegistrar g_tfLeakyReluParser("LeakyRelu", new TFActivationParser());
TFNodeRegistrar g_tfSoftplusParser("Softplus", new TFActivationParser());
} // namespace lite
} // namespace mindspore

+ 0
- 10
mindspore/lite/tools/converter/parser/tf/tf_activation_parser.h View File

@@ -33,16 +33,6 @@ class TFActivationParser : public TFNodeParser {
const std::map<string, const tensorflow::NodeDef *> &tf_node_map,
std::vector<std::string> *inputs, int *output_size) override;
};

class TFLeakyReluParser : public TFNodeParser {
public:
TFLeakyReluParser() = default;
~TFLeakyReluParser() override = default;

ops::PrimitiveC *Parse(const tensorflow::NodeDef &tf_op,
const std::map<string, const tensorflow::NodeDef *> &tf_node_map,
std::vector<std::string> *inputs, int *output_size) override;
};
} // namespace lite
} // namespace mindspore



Loading…
Cancel
Save