You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
5.1 KiB
155 lines
5.1 KiB
/**
|
|
* Copyright 2019-2020 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.
|
|
*/
|
|
|
|
#ifndef MAIN_OPS_STUB_H
|
|
#define MAIN_OPS_STUB_H
|
|
|
|
#include "external/graph/operator_reg.h"
|
|
|
|
// for ir
|
|
namespace ge {
|
|
// Data
|
|
REG_OP(Data)
|
|
.INPUT(data, TensorType::ALL())
|
|
.OUTPUT(out, TensorType::ALL())
|
|
.ATTR(index, Int, 0)
|
|
.OP_END_FACTORY_REG(Data)
|
|
|
|
// Softmax
|
|
REG_OP(Softmax)
|
|
.INPUT(x, TensorType({DT_FLOAT, DT_FLOAT16}))
|
|
.OUTPUT(y, TensorType({DT_FLOAT, DT_FLOAT16}))
|
|
.ATTR(axis, Int, 0) // which mean compute which dims
|
|
.ATTR(algo, Int, 1) // 1 means using "subtract max from every point to avoid overflow",
|
|
/// 0 means using "ubtract max from every point to avoid overflow"
|
|
/// 2 means using "perform the Log softmax operation to avoid overflow"
|
|
/// now is only support 1
|
|
.ATTR(alpha, Float, 1)
|
|
.ATTR(beta, Float, 0)
|
|
.OP_END_FACTORY_REG(Softmax)
|
|
|
|
// Flatten
|
|
REG_OP(Flatten)
|
|
.INPUT(x, TensorType::ALL())
|
|
.OUTPUT(y, TensorType::ALL())
|
|
.OP_END_FACTORY_REG(Flatten)
|
|
|
|
REG_OP(Square)
|
|
.INPUT(x, TensorType({DT_FLOAT}))
|
|
.OUTPUT(y, TensorType({DT_FLOAT}))
|
|
.ATTR(alpha, Float, 1.0)
|
|
.ATTR(beta, Float, 0.0)
|
|
.OP_END_FACTORY_REG(Square)
|
|
|
|
REG_OP(ReadVariable)
|
|
.INPUT(x, TensorType::ALL())
|
|
.OUTPUT(y, TensorType::ALL())
|
|
.OP_END_FACTORY_REG(ReadVariable)
|
|
|
|
REG_OP(Activation)
|
|
.INPUT(x, TensorType::ALL())
|
|
.OUTPUT(y, TensorType::ALL())
|
|
/// 0:sigmod, 1:relu, 2:tanh, 3:clipped ReLU, 4:Elu,
|
|
/// 5:leaky relu, 6:abs, 7:relu1, 8:softsign, 9:softplus
|
|
.ATTR(mode, Int, 1)
|
|
.ATTR(coef, Float, 0)
|
|
.ATTR(alpha, Float, 1.0)
|
|
.ATTR(beta, Float, 0)
|
|
.OP_END_FACTORY_REG(Activation)
|
|
|
|
REG_OP(Add)
|
|
.INPUT(x1, TensorType({DT_FLOAT, DT_INT32, DT_INT64, DT_FLOAT16})) // "First operand."
|
|
.INPUT(x2, TensorType({DT_FLOAT, DT_INT32, DT_INT64, DT_FLOAT16})) // "Second operand."
|
|
// "Result, has same element type as two inputs"
|
|
.OUTPUT(y, TensorType({DT_FLOAT, DT_INT32, DT_INT64, DT_FLOAT16}))
|
|
.ATTR(mode, Int, 0) // mode=0, infer mode=1, train
|
|
.ATTR(alpha, Float, 1.0)
|
|
.ATTR(beta, Float, 0.0)
|
|
.ATTR(is_input_const, ListBool, {false, false})
|
|
.ATTR(T, Int, 0)
|
|
.OP_END_FACTORY_REG(Add)
|
|
|
|
REG_OP(Variable)
|
|
.INPUT(x, TensorType::ALL())
|
|
.OUTPUT(y, TensorType::ALL())
|
|
.ATTR(index, Int, 0)
|
|
.ATTR(value, Tensor, Tensor())
|
|
.OP_END_FACTORY_REG(Variable)
|
|
|
|
REG_OP(Summary)
|
|
.INPUT(x, TensorType::ALL())
|
|
.OP_END_FACTORY_REG(Summary)
|
|
|
|
REG_OP(Const)
|
|
.OUTPUT(y, TensorType::ALL()) // TensorType({DT_FLOAT, DT_INT8, DT_INT32, DT_BOOL})
|
|
.ATTR(value, Tensor, Tensor()) // This is the value of the const op
|
|
.ATTR(dtype, Int, 0)
|
|
.OP_END_FACTORY_REG(Const)
|
|
|
|
REG_OP(HcomBroadcast)
|
|
.DYNAMIC_INPUT(x, TensorType::ALL())
|
|
.DYNAMIC_OUTPUT(y, TensorType::ALL())
|
|
.REQUIRED_ATTR(root_rank, Int)
|
|
.REQUIRED_ATTR(group, String)
|
|
.ATTR(alpha, Float, 1.0)
|
|
.ATTR(beta, Float, 0.0)
|
|
.OP_END_FACTORY_REG(HcomBroadcast)
|
|
|
|
REG_OP(Assign)
|
|
.INPUT(resource, TensorType::ALL())
|
|
.INPUT(value, TensorType::ALL())
|
|
.OUTPUT(y, TensorType::ALL())
|
|
.OP_END_FACTORY_REG(Assign) REG_OP(Sqrt)
|
|
.INPUT(x, TensorType{(DT_FLOAT.DT_FLOAT16)})
|
|
.OUTPUT(y, TensorType{(DT_FLOAT, DT_FLOAT16)})
|
|
.ATTR(T, Int, 1)
|
|
.ATTR(alpha, Float, 1.0)
|
|
.ATTR(beta, Float, 0.0)
|
|
.OP_END_FACTORY_REG(Sqrt)
|
|
|
|
REG_OP(Save)
|
|
.DYNAMIC_INPUT(tensors, TensorType
|
|
: ALL())
|
|
.OP_END_FACTORY_REG(Save)
|
|
|
|
REG_OP(PReLU)
|
|
.INPUT(x, TensorType({DT_FLOAT}))
|
|
.OUTPUT(y, TensorType({DT_FLOAT}))
|
|
.ATTR(channel_shared, Bool, false)
|
|
.ATTR(nan_opt, Int, 0)
|
|
.ATTR(alpha, Float, 1.0)
|
|
.ATTR(beta, Float, 0.0)
|
|
.OP_END_FACTORY_REG(PReLU) REG_OP(Acosh)
|
|
.INPUT(x, TensorType({DT_FLOAT16, DT_FLOAT}))
|
|
.OUTPUT(y, TensorType({DT_FLOAT16, DT_FLOAT}))
|
|
.OP_END_FACTORY_REG(Acosh)
|
|
|
|
REG_OP(GuaranteeConst)
|
|
.INPUT(x, TensorType({DT_FLOAT, DT_FLOAT16, DT_INT8, DT_INT16, DT_UINT16, DT_UINT8, DT_INT32, DT_INT64, DT_UINT32,
|
|
DT_UINT64, DT_BOOL, DT_DOUBLE}))
|
|
.OUTPUT(y, TensorType({DT_FLOAT, DT_FLOAT16, DT_INT8, DT_INT16, DT_UINT16, DT_UINT8, DT_INT32, DT_INT64, DT_UINT32,
|
|
DT_UINT64, DT_BOOL, DT_DOUBLE}))
|
|
.OP_END_FACTORY_REG(GuaranteeConst)
|
|
|
|
IMPLEMT_INFERFUNC(GuaranteeConst, GuaranteeConstInfer) {
|
|
TensorDesc tensorDesc = op.GetInputDesc("x");
|
|
(void)op.UpdateOutputDesc("y", tensorDesc);
|
|
return GRAPH_SUCCESS;
|
|
}
|
|
INFER_FUNC_REG(GuaranteeConst, GuaranteeConstInfer);
|
|
} // namespace ge
|
|
#endif // MAIN_OPS_STUB_H
|