diff --git a/nonlinear_fuc_ops_declare.cc b/nonlinear_fuc_ops_declare.cc new file mode 100644 index 0000000..eb95dfc --- /dev/null +++ b/nonlinear_fuc_ops_declare.cc @@ -0,0 +1,290 @@ +/** + * Copyright 2019-2021 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "transform/graph_ir/op_declare/nonlinear_fuc_ops_declare.h" + +namespace mindspore::transform { +// Relu +INPUT_MAP(Relu) = {{1, INPUT_DESC(x)}}; +//输入映射,x的索引为1 +ATTR_MAP(Relu) = EMPTY_ATTR_MAP; +//属性映射,空 +OUTPUT_MAP(Relu) = {{0, OUTPUT_DESC(y)}}; +//输出映射,y的索引为0 +REG_ADPT_DESC(Relu, prim::kPrimRelu->name(), ADPT_DESC(Relu)) +// 注册Relu操作的适配器描述prim::kPrimRelu->name() + +// ReluV2 +INPUT_MAP(ReluV2) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(ReluV2) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(ReluV2) = {{0, OUTPUT_DESC(y)}, {1, OUTPUT_DESC(mask)}}; +// 输出映射,y的索引为0,mask索引为1 +REG_ADPT_DESC(ReluV2, kNameReluV2, ADPT_DESC(ReluV2)) +// 注册ReluV2操作的适配器描述kNameReluV2 + +// Elu +INPUT_MAP(Elu) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(Elu) = {{"alpha", ATTR_DESC(alpha, AnyTraits())}}; +// 属性映射,属性"alpha"的类型为float +OUTPUT_MAP(Elu) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(Elu, kNameElu, ADPT_DESC(Elu)) +// 注册Elu操作的适配器描述kNameElu + +// EluGrad +INPUT_MAP(EluGrad) = {{1, INPUT_DESC(grads)}, {2, INPUT_DESC(activations)}}; +// 输入映射,有两个,x的索引为1,activations索引为2 +ATTR_MAP(EluGrad) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(EluGrad) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(EluGrad, kNameEluGrad, ADPT_DESC(EluGrad)) +// 注册EluGrad操作的适配器描述kNameEluGrad + +// PRelu +INPUT_MAP(PRelu) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(weight)}}; +// 输入映射,有两个,x的索引为1,weight索引为2 +ATTR_MAP(PRelu) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(PRelu) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(PRelu, kNamePrelu, ADPT_DESC(PRelu)) +// 注册PRelu操作的适配器描述kNamePrelu + +// PReluGrad +INPUT_MAP(PReluGrad) = {{1, INPUT_DESC(grads)}, {2, INPUT_DESC(features)}, {3, INPUT_DESC(weights)}}; +// 输入映射,有三个,grads的索引为1,features索引为2,weights索引为3 +ATTR_MAP(PReluGrad) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(PReluGrad) = {{0, OUTPUT_DESC(dx)}, {1, OUTPUT_DESC(da)}}; +// 输出映射,dx的索引为0,da索引为1 +REG_ADPT_DESC(PReluGrad, kNamePreluGrad, ADPT_DESC(PReluGrad)) +// 注册PReluGrad操作的适配器描述kNamePreluGrad + +// Selu +INPUT_MAP(Selu) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(Selu) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(Selu) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(Selu, kNameSelu, ADPT_DESC(Selu)) +// 注册Selu操作的适配器描述kNameSelu + +// Sigmoid +INPUT_MAP(Sigmoid) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(Sigmoid) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(Sigmoid) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(Sigmoid, kNameSigmoid, ADPT_DESC(Sigmoid)) +// 注册Sigmoid操作的适配器描述kNameSigmoid + +// SigmoidGrad +INPUT_MAP(SigmoidGrad) = {{1, INPUT_DESC(y)}, {2, INPUT_DESC(dy)}}; +// 输入映射,有两个,y的索引为1,dy索引为2 +ATTR_MAP(SigmoidGrad) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(SigmoidGrad) = {{0, OUTPUT_DESC(z)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(SigmoidGrad, kNameSigmoidGrad, ADPT_DESC(SigmoidGrad)) +// 注册SigmoidGrad操作的适配器描述kNameSigmoidGrad + +// HardSwish +INPUT_MAP(HardSwish) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(HardSwish) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(HardSwish) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(HardSwish, kNameHSwish, ADPT_DESC(HardSwish)) +// 注册HardSwish操作的适配器描述kNameHSwish + +// HardSwishGrad +INPUT_MAP(HardSwishGrad) = {{1, INPUT_DESC(grad)}, {2, INPUT_DESC(x)}}; +// 输入映射,有两个,grad的索引为1,x索引为2 +ATTR_MAP(HardSwishGrad) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(HardSwishGrad) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(HardSwishGrad, kNameHSwishGrad, ADPT_DESC(HardSwishGrad)) +// 注册HardSwishGrad操作的适配器描述kNameHSwishGrad + +// HSigmoid +INPUT_MAP(HardSigmoid) = {{1, INPUT_DESC(input_x)}}; +// 输入映射,input_x的索引为1 +ATTR_MAP(HardSigmoid) = {{"alpha", ATTR_DESC(alpha, AnyTraits())}, + {"beta", ATTR_DESC(beta, AnyTraits())}}; +// 属性映射,属性"alpha""beta"的类型为float +OUTPUT_MAP(HardSigmoid) = {{0, OUTPUT_DESC(output_y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(HardSigmoid, kNameHSigmoid, ADPT_DESC(HardSigmoid)) +// 注册HardSigmoid操作的适配器描述kNameHSigmoid + +// Relu6 +INPUT_MAP(Relu6) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(Relu6) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(Relu6) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(Relu6, kNameReLU6, ADPT_DESC(Relu6)) +// 注册Relu6操作的适配器描述kNameReLU6 + +// Relu6Grad +INPUT_MAP(Relu6Grad) = {{1, INPUT_DESC(gradients)}, {2, INPUT_DESC(features)}}; +// 输入映射,有两个,gradients的索引为1,features索引为2 +ATTR_MAP(Relu6Grad) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(Relu6Grad) = {{0, OUTPUT_DESC(backprops)}}; +// 输出映射,backprops的索引为0 +REG_ADPT_DESC(Relu6Grad, kNameReLU6Grad, ADPT_DESC(Relu6Grad)) +// 注册Relu6Grad操作的适配器描述kNameReLU6Grad + +// Softsign +INPUT_MAP(Softsign) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(Softsign) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(Softsign) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(Softsign, kNameSoftsign, ADPT_DESC(Softsign)) +// 注册Softsign操作的适配器描述kNameSoftsign + +// Softplus +INPUT_MAP(Softplus) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(Softplus) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(Softplus) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(Softplus, kNameSoftplus, ADPT_DESC(Softplus)) +// 注册Softplus操作的适配器描述 kNameSoftplus + +// SoftplusGrad +INPUT_MAP(SoftplusGrad) = {{1, INPUT_DESC(gradients)}, {2, INPUT_DESC(features)}}; +// 输入映射,有两个,gradients的索引为1,features索引为2 +ATTR_MAP(SoftplusGrad) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(SoftplusGrad) = {{0, OUTPUT_DESC(backprops)}}; +// 输出映射,backprops的索引为0 +REG_ADPT_DESC(SoftplusGrad, kNameSoftplusGrad, ADPT_DESC(SoftplusGrad)) +// 注册SoftplusGrad操作的适配器描述kNameSoftplusGrad + +// ReluGrad +INPUT_MAP(ReluGrad) = {{1, INPUT_DESC(gradients)}, {2, INPUT_DESC(features)}}; +// 输入映射,有两个,gradients的索引为1,features索引为2 +ATTR_MAP(ReluGrad) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(ReluGrad) = {{0, OUTPUT_DESC(backprops)}}; +// 输出映射,backprops的索引为0 +REG_ADPT_DESC(ReluGrad, prim::kPrimReluGrad->name(), ADPT_DESC(ReluGrad)) +// 注册ReluGrad操作的适配器描述prim::kPrimReluGrad->name() + +// ReluGradV2 +INPUT_MAP(ReluGradV2) = {{1, INPUT_DESC(gradients)}, {2, INPUT_DESC(mask)}}; +// 输入映射,有两个,gradients的索引为1,mask索引为2 +ATTR_MAP(ReluGradV2) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(ReluGradV2) = {{0, OUTPUT_DESC(backprops)}}; +// 输出映射,backprops的索引为0 +REG_ADPT_DESC(ReluGradV2, kNameReluGradV2, ADPT_DESC(ReluGradV2)) +// 注册ReluGradV2操作的适配器描述kNameReluGradV2 + +// Tanh +INPUT_MAP(Tanh) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(Tanh) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(Tanh) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(Tanh, prim::kPrimTanh->name(), ADPT_DESC(Tanh)) +// 注册Tanh操作的适配器描述prim::kPrimTanh->name() + +// TanhGrad +INPUT_MAP(TanhGrad) = {{1, INPUT_DESC(y)}, {2, INPUT_DESC(dy)}}; +// 输入映射,有两个,y的索引为1,dy索引为2 +ATTR_MAP(TanhGrad) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(TanhGrad) = {{0, OUTPUT_DESC(z)}}; +// 输出映射,z的索引为0 +REG_ADPT_DESC(TanhGrad, prim::kPrimTanhGrad->name(), ADPT_DESC(TanhGrad)) +// 注册NPUTanhGrad操作的适配器描述prim::kPrimTanhGrad->name() + +// Mish +INPUT_MAP(Mish) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(Mish) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(Mish) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(Mish, kNameMish, ADPT_DESC(Mish)) +// 注册Mish操作的适配器描述kNameMish + +// GeLU +INPUT_MAP(Gelu) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(Gelu) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(Gelu) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(Gelu, prim::kPrimGeLU->name(), ADPT_DESC(Gelu)) +// 注册Gelu操作的适配器描述prim::kPrimGeLU->name() + +// GeLUGrad +INPUT_MAP(GeluGrad) = {{1, INPUT_DESC(dy)}, {2, INPUT_DESC(x)}, {3, INPUT_DESC(y)}}; +// 输入映射,有三个,x的索引为1,activations索引为2,y索引为3 +ATTR_MAP(GeluGrad) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(GeluGrad) = {{0, OUTPUT_DESC(z)}}; +// 输出映射,z的索引为0 +REG_ADPT_DESC(GeluGrad, prim::kPrimGeLUGrad->name(), ADPT_DESC(GeluGrad)) +// 注册GeluGrad操作的适配器描述prim::kPrimGeLUGrad->name() + +// FastGeLU +INPUT_MAP(FastGelu) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(FastGelu) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(FastGelu) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(FastGelu, prim::kPrimFastGeLU->name(), ADPT_DESC(FastGelu)) +// 注册FastGelu操作的适配器描述 prim::kPrimFastGeLU->name() + +// FastGeLUGrad +INPUT_MAP(FastGeluGrad) = {{1, INPUT_DESC(dy)}, {2, INPUT_DESC(x)}}; +// 输入映射,有两个,dy的索引为1,x索引为2 +ATTR_MAP(FastGeluGrad) = EMPTY_ATTR_MAP; +// 属性映射,空 +OUTPUT_MAP(FastGeluGrad) = {{0, OUTPUT_DESC(z)}}; +// 输出映射,z的索引为0 +REG_ADPT_DESC(FastGeluGrad, prim::kPrimFastGeLUGrad->name(), ADPT_DESC(FastGeluGrad)) +// 注册FastGeluGrad操作的适配器描述 prim::kPrimFastGeLUGrad->name() + +// LeakyRelu +INPUT_MAP(LeakyRelu) = {{1, INPUT_DESC(x)}}; +// 输入映射,x的索引为1 +ATTR_MAP(LeakyRelu) = {{"alpha", ATTR_DESC(negative_slope, AnyTraits())}}; +// 属性映射,属性"alpha"的类型为float +OUTPUT_MAP(LeakyRelu) = {{0, OUTPUT_DESC(y)}}; +// 输出映射,y的索引为0 +REG_ADPT_DESC(LeakyRelu, prim::kPrimLeakyRelu->name(), ADPT_DESC(LeakyRelu)) +// 注册LeakyRelu操作的适配器描述 prim::kPrimLeakyRelu->name() +} // namespace mindspore::transform