onnxruntime/onnxruntime/contrib_ops/cpu/fused_activation.cc
Tracy Sharpe 4383615cf6
implement conv+clip fusion (#1412)
This change implements Conv+Clip activation fusion for FusedConv and NCHWc convolutions. The Clip operation runs in the thread context that is producing the convolution output.
2019-07-17 12:16:45 -07:00

49 lines
1.9 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#include "contrib_ops/cpu/fused_activation.h"
namespace onnxruntime {
common::Status GetFusedActivationAttr(const OpKernelInfo& info, MLAS_ACTIVATION& activation) {
// Convert the activation parameters from the node into a MLAS_ACTIVATION.
activation.ActivationKind = MlasIdentityActivation;
std::string activation_type;
if (info.GetAttr<std::string>("activation", &activation_type).IsOK()) {
if (activation_type == "Relu") {
activation.ActivationKind = MlasReluActivation;
} else if (activation_type == "Tanh") {
activation.ActivationKind = MlasTanhActivation;
} else if (activation_type == "Sigmoid") {
activation.ActivationKind = MlasLogisticActivation;
} else {
// The remaining activation types have additional parameters to be pulled out.
size_t activation_params_count;
if (activation_type == "LeakyRelu") {
activation.ActivationKind = MlasLeakyReluActivation;
activation_params_count = 1;
} else if (activation_type == "Clip") {
activation.ActivationKind = MlasClipActivation;
activation_params_count = 2;
} else {
return Status(common::ONNXRUNTIME, common::INVALID_ARGUMENT, "unimplemented activation: " + activation_type);
}
std::vector<float> activation_params;
common::Status status = info.GetAttrs<float>("activation_params", activation_params);
if (!status.IsOK()) {
return status;
} else if (activation_params_count != activation_params.size()) {
return Status(common::ONNXRUNTIME, common::INVALID_ARGUMENT, "activation_params count mismatch");
}
for (size_t i = 0; i < activation_params_count; i++) {
activation.Parameters.Values[i] = activation_params[i];
}
}
}
return Status::OK();
}
} // namespace onnxruntime