transform/transformation_ops_declare.cc

133 lines
6.5 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/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深度学习框架中使用这些操作进行图计算。