!14350 [MS_LITE] fix issue to r1.2
From: @YeFeng_24 Reviewed-by: @hangangqiang,@zhanghaibo5 Signed-off-by: @hangangqiang
This commit is contained in:
commit
5f01223ca4
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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++) {
|
||||
|
|
|
|||
|
|
@ -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>)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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…
Reference in New Issue