133 lines
6.5 KiB
C++
133 lines
6.5 KiB
C++
/**
|
||
* 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/transformation_ops_declare.h"
|
||
#include <vector>
|
||
|
||
namespace mindspore::transform {
|
||
// Flatten
|
||
// 将输入张量展平为一个1D张量
|
||
INPUT_MAP(Flatten) = {{1, INPUT_DESC(x)}};//输入映射,Flatten有一个输入参数,它的索引为1,且该输入参数形参x
|
||
ATTR_MAP(Flatten) = EMPTY_ATTR_MAP;//属性映射,空,该操作不需要任何额外的属性参数
|
||
OUTPUT_MAP(Flatten) = {{0, OUTPUT_DESC(y)}};//输出映射,Flatten有一个输出参数,它的索引为0,且该输入参数形参y
|
||
REG_ADPT_DESC(Flatten, prim::kPrimFlatten->name(), ADPT_DESC(Flatten))
|
||
// 通过调用"prim::kPrimFlatten"的name()函数来获取"Flatten"操作的名称 另一个先前定义的适配器描述。该描述告诉MindSpore如何在运行时执行"Flatten"操作。
|
||
//将操作 "Flatten"注册到适配器描述(REG_ADPT_DESC)中,以便在MindSpore深度学习框架中能够使用该操作进行图计算
|
||
//适配器描述将此操作注册到名为 prim::kPrimFlatten->name() 的图操作
|
||
|
||
// Unpack
|
||
INPUT_MAP(Unpack) = {{1, INPUT_DESC(x)}};
|
||
ATTR_MAP(Unpack) = {{"axis", ATTR_DESC(axis, AnyTraits<int64_t>())}, {"num", ATTR_DESC(num, AnyTraits<int64_t>())}};
|
||
//具有两个属性 //axis:表示拆分的轴 //num:表示拆分后生成的张量数量
|
||
DYN_OUTPUT_MAP(Unpack) = {{0, DYN_OUTPUT_DESC(y)}};///动态输出参数 y,表示可以输出多个张量。
|
||
REG_ADPT_DESC(Unpack, prim::kUnstack, ADPT_DESC(Unpack))
|
||
//适配器描述将此操作注册到名为 prim::kUnstack 的图操作
|
||
|
||
// ExtractImagePatches
|
||
INPUT_MAP(ExtractImagePatches) = {{1, INPUT_DESC(x)}};
|
||
//一个输入参数x
|
||
ATTR_MAP(ExtractImagePatches) = {
|
||
//具有四个属性
|
||
{"ksizes", ATTR_DESC(ksizes, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
|
||
//ksizes:表示在输入数据的每个维度上滑动的窗口大小。
|
||
{"strides", ATTR_DESC(strides, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
|
||
//strides:表示在输入数据的每个维度上滑动的步长。
|
||
{"rates", ATTR_DESC(rates, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())},
|
||
//rates:表示在输入数据的每个维度上的dilation(扩张)率
|
||
{"padding", ATTR_DESC(padding, AnyTraits<std::string>())}};
|
||
//padding:表示在输入数据的周围添加的填充类型。
|
||
OUTPUT_MAP(ExtractImagePatches) = {{0, OUTPUT_DESC(y)}};
|
||
//一个输出参数y
|
||
REG_ADPT_DESC(ExtractImagePatches, kNameExtractImagePatches, ADPT_DESC(ExtractImagePatches))
|
||
//适配器描述将此操作注册到名为 kNameExtractImagePatches 的图操作
|
||
|
||
// Transpose
|
||
INPUT_MAP(TransposeD) = {{1, INPUT_DESC(x)}};
|
||
// 一个输入参数x
|
||
INPUT_ATTR_MAP(TransposeD) = {{2, ATTR_DESC(perm, AnyTraits<int64_t>(), AnyTraits<std::vector<int64_t>>())}};
|
||
//2是属性索引,表示这是操作"TransposeD"的第二个输入属性
|
||
// perm:属性的名称 该属性的数据类型为int64_t 该属性是一个std::vector<int64_t>类型的值,即一维整数数组
|
||
ATTR_MAP(TransposeD) = EMPTY_ATTR_MAP;
|
||
// Do not set Transpose operator output descriptor
|
||
REG_ADPT_DESC(TransposeD, prim::kPrimTranspose->name(), ADPT_DESC(TransposeD))
|
||
|
||
// SpaceToDepth
|
||
INPUT_MAP(SpaceToDepth) = {{1, INPUT_DESC(x)}};
|
||
ATTR_MAP(SpaceToDepth) = {{"block_size", ATTR_DESC(block_size, AnyTraits<int64_t>())}};
|
||
//属性 block_size,表示空间到深度转换的块大小
|
||
OUTPUT_MAP(SpaceToDepth) = {{0, OUTPUT_DESC(y)}};
|
||
REG_ADPT_DESC(SpaceToDepth, kNameSpaceToDepth, ADPT_DESC(SpaceToDepth))
|
||
|
||
// DepthToSpace
|
||
INPUT_MAP(DepthToSpace) = {{1, INPUT_DESC(x)}};
|
||
ATTR_MAP(DepthToSpace) = {{"block_size", ATTR_DESC(block_size, AnyTraits<int64_t>())}};
|
||
//属性 block_size,表示深度到空间转换的块大小
|
||
OUTPUT_MAP(DepthToSpace) = {{0, OUTPUT_DESC(y)}};
|
||
//有一个输出参数 y
|
||
REG_ADPT_DESC(DepthToSpace, kNameDepthToSpace, ADPT_DESC(DepthToSpace))
|
||
//适配器描述将此操作注册到名为 kNameDepthToSpace 的图操作
|
||
//
|
||
// SpaceToBatchD
|
||
INPUT_MAP(SpaceToBatchD) = {{1, INPUT_DESC(x)}};
|
||
|
||
ATTR_MAP(SpaceToBatchD) = {
|
||
{"block_size", ATTR_DESC(block_size, AnyTraits<int64_t>())},
|
||
//block_size:表示空间到批处理转换的块大小
|
||
{"paddings", ATTR_DESC(paddings, AnyTraits<std::vector<std::vector<int64_t>>>(), AnyTraits<std::vector<int64_t>>())}};
|
||
//paddings:表示空间到批处理转换的填充方式
|
||
OUTPUT_MAP(SpaceToBatchD) = {{0, OUTPUT_DESC(y)}};
|
||
REG_ADPT_DESC(SpaceToBatchD, kNameSpaceToBatch, ADPT_DESC(SpaceToBatchD))
|
||
|
||
// SpaceToBatchNDD
|
||
INPUT_MAP(SpaceToBatchNDD) = {{1, INPUT_DESC(x)}};
|
||
ATTR_MAP(SpaceToBatchNDD) = {
|
||
{"block_shape", ATTR_DESC(block_shape, AnyTraits<std::vector<int64_t>>())},
|
||
//block_shape:表示空间到批处理转换的块形状
|
||
{"paddings", ATTR_DESC(paddings, AnyTraits<std::vector<std::vector<int64_t>>>(), AnyTraits<std::vector<int64_t>>())}};
|
||
//paddings:表示空间到批处理转换的填充方式
|
||
OUTPUT_MAP(SpaceToBatchNDD) = {{0, OUTPUT_DESC(y)}};
|
||
//有一个输出参数 y
|
||
REG_ADPT_DESC(SpaceToBatchNDD, kNameSpaceToBatchNDD, ADPT_DESC(SpaceToBatchNDD))
|
||
//适配器描述将此操作注册到名为 kNameSpaceToBatchNDD 的图操作
|
||
//
|
||
// BatchToSpaceD
|
||
INPUT_MAP(BatchToSpaceD) = {{1, INPUT_DESC(x)}};
|
||
//该操作接受一个输入参数 x
|
||
ATTR_MAP(BatchToSpaceD) = {
|
||
{"block_size", ATTR_DESC(block_size, AnyTraits<int64_t>())},
|
||
//block_size:表示批处理到空间转换的块大小
|
||
{"crops", ATTR_DESC(crops, AnyTraits<std::vector<std::vector<int64_t>>>(), AnyTraits<std::vector<int64_t>>())}};
|
||
//crops:表示批处理到空间转换的裁剪方式
|
||
OUTPUT_MAP(BatchToSpaceD) = {{0, OUTPUT_DESC(y)}};
|
||
// 有一个输出参数 y
|
||
REG_ADPT_DESC(BatchToSpaceD, kNameBatchToSpace, ADPT_DESC(BatchToSpaceD))
|
||
//适配器描述将此操作注册到名为 kNameBatchToSpace 的图操作
|
||
|
||
// BatchToSpaceNDD
|
||
INPUT_MAP(BatchToSpaceNDD) = {{1, INPUT_DESC(x)}};
|
||
//接受一个输入参数 x
|
||
ATTR_MAP(BatchToSpaceNDD) = {
|
||
{"block_shape", ATTR_DESC(block_shape, AnyTraits<std::vector<int64_t>>())},
|
||
//block_shape:表示批处理到空间转换的块形状
|
||
{"crops", ATTR_DESC(crops, AnyTraits<std::vector<std::vector<int64_t>>>(), AnyTraits<std::vector<int64_t>>())}};
|
||
//crops:表示批处理到空间转换的裁剪方式
|
||
OUTPUT_MAP(BatchToSpaceNDD) = {{0, OUTPUT_DESC(y)}};
|
||
//有一个输出参数 y
|
||
REG_ADPT_DESC(BatchToSpaceNDD, kNameBatchToSpaceNd, ADPT_DESC(BatchToSpaceNDD))
|
||
//适配器描述将此操作注册到名为 kNameBatchToSpaceNd 的图操作
|
||
} // namespace mindspore::transform
|
||
// 定义了一系列图操作,每个操作有不同的输入、输出和属性,
|
||
//并且将这些操作注册到相应的适配器描述中,以便后续在MindSpore深度学习框架中使用这些操作进行图计算。
|