transform/nn_pooling_ops_declare.cc

241 lines
14 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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/nn_pooling_ops_declare.h"
#include <vector>
namespace mindspore::transform {
// MaxPool
INPUT_MAP(MaxPool) = {{1, INPUT_DESC(x)}};
// 输入映射x的索引为1
ATTR_MAP(MaxPool) = {{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_mode", ATTR_DESC(padding, AnyTraits<std::string>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
// 属性映射,有四个属性,"kernel_size""strides"类型为int64_t和std::vector<int64_t>型,"pad_mode""format"类型为std::string型
OUTPUT_MAP(MaxPool) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(MaxPool, kNameMaxPool, ADPT_DESC(MaxPool))
// MaxPool3D
INPUT_MAP(MaxPool3D) = {{1, INPUT_DESC(x)}};
// 输入映射x的索引为1
ATTR_MAP(MaxPool3D) = {{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_mode", ATTR_DESC(padding, AnyTraits<std::string>())},
{"pad_list", ATTR_DESC(pads, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"dilation", ATTR_DESC(dilation, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"ceil_mode", ATTR_DESC(ceil_mode, AnyTraits<int64_t>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
// 属性映射,有七个属性,"kernel_size""pad_list""strides""format""ceil_mode"类型为int64_t和std::vector<int64_t>型,"pad_mode""format"类型为std::string型
OUTPUT_MAP(MaxPool3D) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(MaxPool3D, kNameMaxPool3D, ADPT_DESC(MaxPool3D))
// 注册MaxPool3D操作的适配器描述kNameMaxPool3D
// MaxPool3DGrad
INPUT_MAP(MaxPool3DGrad) = {{1, INPUT_DESC(orig_x)}, {2, INPUT_DESC(orig_y)}, {3, INPUT_DESC(grads)}};
// 输入映射orig_x的索引为1orig_y的索引为2grads索引为3
ATTR_MAP(MaxPool3DGrad) = {{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_list", ATTR_DESC(pads, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
// 属性映射,有四个属性,"kernel_size""strides""pad_list"类型为int64_t和std::vector<int64_t>型,"format"类型为std::string型
OUTPUT_MAP(MaxPool3DGrad) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(MaxPool3DGrad, kNameMaxPool3DGrad, ADPT_DESC(MaxPool3DGrad))
// 注册MaxPool3DGrad操作的适配器描述kNameMaxPool3DGrad
// MaxPool3DGradGrad
INPUT_MAP(MaxPool3DGradGrad) = {{1, INPUT_DESC(orig_x)}, {2, INPUT_DESC(orig_y)}, {3, INPUT_DESC(grads)}};
// 输入映射orig_x的索引为1orig_y的索引为2grads索引为3
ATTR_MAP(MaxPool3DGradGrad) = {
{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_list", ATTR_DESC(pads, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
// 属性映射,有四个属性,"kernel_size""strides""pad_list"类型为int64_t和std::vector<int64_t>型,"format"类型为std::string型
OUTPUT_MAP(MaxPool3DGradGrad) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(MaxPool3DGradGrad, kNameMaxPool3DGradGrad, ADPT_DESC(MaxPool3DGradGrad))
// 注册MaxPool3DGradGrad操作的适配器描述kNameMaxPool3DGradGrad
// AvgPool
INPUT_MAP(AvgPool) = {{1, INPUT_DESC(x)}};
// 输入映射x的索引为1
ATTR_MAP(AvgPool) = {{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_mode", ATTR_DESC(padding, AnyTraits<std::string>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
// 属性映射,有四个属性,"kernel_size""strides""pad_list"类型为int64_t和std::vector<int64_t>型,"format"类型为std::string型
OUTPUT_MAP(AvgPool) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(AvgPool, kNameAvgPool, ADPT_DESC(AvgPool))
// 注册AvgPool操作的适配器描述kNameAvgPool
// MaxPoolGrad
INPUT_MAP(MaxPoolGrad) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}, {3, INPUT_DESC(grad)}};
// 输入映射orig_x的索引为1orig_y的索引为2grads索引为3
ATTR_MAP(MaxPoolGrad) = {{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_mode", ATTR_DESC(padding, AnyTraits<std::string>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
// 属性映射,有四个属性,"kernel_size""strides""pad_list"类型为int64_t和std::vector<int64_t>型,"format"类型为std::string型
OUTPUT_MAP(MaxPoolGrad) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(MaxPoolGrad, kNameMaxPoolGrad, ADPT_DESC(MaxPoolGrad))
// 注册MaxPoolGrad操作的适配器描述kNameMaxPoolGrad
// MaxPoolGradGrad
INPUT_MAP(MaxPoolGradGrad) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}, {3, INPUT_DESC(grad)}};
// 输入映射orig_x的索引为1orig_y的索引为2grads索引为3
ATTR_MAP(MaxPoolGradGrad) = {{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_mode", ATTR_DESC(padding, AnyTraits<std::string>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
// 属性映射,有四个属性,"kernel_size""strides""pad_list"类型为int64_t和std::vector<int64_t>型,"format"类型为std::string型
OUTPUT_MAP(MaxPoolGradGrad) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(MaxPoolGradGrad, kNameMaxPoolGradGrad, ADPT_DESC(MaxPoolGradGrad))
// 注册MaxPoolGradGrad操作的适配器描述kNameMaxPoolGradGrad
// avgpoolgrad
INPUT_MAP(AvgPoolGrad) = {{1, INPUT_DESC(orig_input_shape)}, {2, INPUT_DESC(input_grad)}};
// 输入映射orig_input_shape的索引为1input_grad的索引为2
ATTR_MAP(AvgPoolGrad) = {{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_mode", ATTR_DESC(padding, AnyTraits<std::string>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
// 属性映射,有四个属性,"kernel_size""strides""pad_list"类型为int64_t和std::vector<int64_t>型,"format"类型为std::string型
OUTPUT_MAP(AvgPoolGrad) = {{0, OUTPUT_DESC(out_grad)}};
// 输出映射out_grad索引为0
REG_ADPT_DESC(AvgPoolGrad, kNameAvgPoolGrad, ADPT_DESC(AvgPoolGrad))
// 注册AvgPoolGrad操作的适配器描述kNameAvgPoolGrad
// MaxPoolWithArgmax
INPUT_MAP(MaxPoolWithArgmax) = {{1, INPUT_DESC(x)}};
// 输入映射x的索引为1
ATTR_MAP(MaxPoolWithArgmax) = {
{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_mode", ATTR_DESC(padding, AnyTraits<std::string>())}};
// 属性映射,有三个属性,"kernel_size""strides"类型为int64_t和std::vector<int64_t>型,"pad_mode"类型为std::string型
OUTPUT_MAP(MaxPoolWithArgmax) = {{0, OUTPUT_DESC(y)}, {1, OUTPUT_DESC(argmax)}};
// 输出映射y索引为0argmax索引为1
REG_ADPT_DESC(MaxPoolWithArgmax, kNameMaxPoolWithArgmax, ADPT_DESC(MaxPoolWithArgmax))
// 注册MaxPoolWithArgmax操作的适配器描述kNameMaxPoolWithArgmax
// MaxPoolGradWithArgmax
INPUT_MAP(MaxPoolGradWithArgmax) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(grad)}, {3, INPUT_DESC(argmax)}};
// 输入映射x的索引为1grad的索引为2argmax索引为3
ATTR_MAP(MaxPoolGradWithArgmax) = {
{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_mode", ATTR_DESC(padding, AnyTraits<std::string>())}};
// 属性映射,有三个属性,"kernel_size""strides"类型为int64_t和std::vector<int64_t>型,"pad_mode"类型为std::string型
OUTPUT_MAP(MaxPoolGradWithArgmax) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(MaxPoolGradWithArgmax, kNameMaxPoolGradWithArgmax, ADPT_DESC(MaxPoolGradWithArgmax))
// 注册MaxPoolGradWithArgmax操作的适配器描述kNameMaxPoolGradWithArgmax
// MaxPoolGradGradWithArgmax
INPUT_MAP(MaxPoolGradGradWithArgmax) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(grad)}, {3, INPUT_DESC(argmax)}};
// 输入映射x的索引为1grad的索引为2argmax索引为3
ATTR_MAP(MaxPoolGradGradWithArgmax) = {
{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad_mode", ATTR_DESC(padding, AnyTraits<std::string>())}};
// 属性映射,有三个属性,"kernel_size""strides"类型为int64_t和std::vector<int64_t>型,"pad_mode"类型为std::string型
OUTPUT_MAP(MaxPoolGradGradWithArgmax) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(MaxPoolGradGradWithArgmax, kNameMaxPoolGradGradWithArgmax, ADPT_DESC(MaxPoolGradGradWithArgmax))
// 注册MaxPoolGradGradWithArgmax操作的适配器描述kNameMaxPoolGradGradWithArgmax
// Pooling
INPUT_MAP(Pooling) = {{1, INPUT_DESC(x)}};
// 输入映射x的索引为1
ATTR_MAP(Pooling) = {{"mode", ATTR_DESC(mode, AnyTraits<int64_t>())},
{"global", ATTR_DESC(global_pooling, AnyTraits<bool>())},
{"kernel_size", ATTR_DESC(window, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(stride, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"pad", ATTR_DESC(pad, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"dilation", ATTR_DESC(dilation, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"round_mode", ATTR_DESC(ceil_mode, AnyTraits<int64_t>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
//属性映射,有八个属性,"kernel_size""strides""pad""dilation"类型为int64_t和std::vector<int64_t>型,"format"类型为std::string型
//"mode""round_mode"类型为int64_t型"global"类型为bool型
OUTPUT_MAP(Pooling) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(Pooling, kNamePooling, ADPT_DESC(Pooling))
// 注册Pooling操作的适配器描述kNamePooling
// MaxPoolV3
INPUT_MAP(MaxPoolV3) = {{1, INPUT_DESC(x)}};
// 输入映射x的索引为1
ATTR_MAP(MaxPoolV3) = {{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"padding_mode", ATTR_DESC(padding_mode, AnyTraits<std::string>())},
{"pad", ATTR_DESC(pads, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())},
{"global", ATTR_DESC(global_pooling, AnyTraits<bool>())},
{"ceil_mode", ATTR_DESC(ceil_mode, AnyTraits<bool>())}};
// 属性映射,有七个属性,"kernel_size""strides""pad"类型为int64_t和std::vector<int64_t>型,"format"类型为std::string型
//"round_mode"类型为int64_t型"global""ceil_mode"类型为bool型
OUTPUT_MAP(MaxPoolV3) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(MaxPoolV3, kNameMaxPoolV3, ADPT_DESC(MaxPoolV3))
// 注册MaxPoolV3操作的适配器描述kNameMaxPoolV3
// AvgPoolV2
INPUT_MAP(AvgPoolV2) = {{1, INPUT_DESC(x)}};
// 输入映射x的索引为1
ATTR_MAP(AvgPoolV2) = {{"kernel_size", ATTR_DESC(ksize, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"padding_mode", ATTR_DESC(padding_mode, AnyTraits<std::string>())},
{"pad", ATTR_DESC(pads, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
{"format", ATTR_DESC(data_format, AnyTraits<std::string>())},
{"global", ATTR_DESC(global_pooling, AnyTraits<bool>())},
{"ceil_mode", ATTR_DESC(ceil_mode, AnyTraits<bool>())}};
// 属性映射,有七个属性,"kernel_size""strides""pad"类型为int64_t和std::vector<int64_t>型,"format"类型为std::string型
//"round_mode"类型为int64_t型"global""ceil_mode"类型为bool型
OUTPUT_MAP(AvgPoolV2) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(AvgPoolV2, kNameAvgPoolV2, ADPT_DESC(AvgPoolV2))
// 注册AvgPoolV2操作的适配器描述kNameAvgPoolV2
// GlobalAveragePool
INPUT_MAP(GlobalAveragePool) = {{1, INPUT_DESC(x)}};
// 输入映射x的索引为1
ATTR_MAP(GlobalAveragePool) = EMPTY_ATTR_MAP;
//属性映射,空
OUTPUT_MAP(GlobalAveragePool) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(GlobalAveragePool, kNameGlobalAvgPool, ADPT_DESC(GlobalAveragePool))
// 注册GlobalAveragePool操作的适配器描述kNameGlobalAvgPool
// Upsample
INPUT_MAP(Upsample) = {{1, INPUT_DESC(x)}};
// 输入映射x的索引为1
ATTR_MAP(Upsample) = {{"scale", ATTR_DESC(scale, AnyTraits<float>())},
{"stride_h", ATTR_DESC(stride_h, AnyTraits<int64_t>())},
{"stride_w", ATTR_DESC(stride_w, AnyTraits<int64_t>())}};
// 属性映射,有三个属性,"stride_h""stride_w"类型为int64_t型"scale"类型为float型
OUTPUT_MAP(Upsample) = {{0, OUTPUT_DESC(y)}};
// 输出映射y索引为0
REG_ADPT_DESC(Upsample, kNameUpsample, ADPT_DESC(Upsample))
// 注册Upsample操作的适配器描述kNameUpsample
} // namespace mindspore::transform