You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

op_declare.cc 55 kB

6 years ago
6 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266
  1. /**
  2. * Copyright 2019 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #include "transform/op_declare.h"
  17. #include <vector>
  18. #include "transform/all_ops.h"
  19. #include "utils/utils.h"
  20. namespace mindspore {
  21. namespace transform {
  22. #define INPUT_MAP(T) \
  23. template <> \
  24. const std::unordered_map<int, InputDesc> OpAdapter<T>::input_map_
  25. #define EMPTY_INPUT_MAP std::unordered_map<int, InputDesc>()
  26. #define INPUT_DESC(name) \
  27. { \
  28. #name, \
  29. [](const OperatorPtr op, const OperatorPtr input) { \
  30. auto p = std::static_pointer_cast<OpType>(op); \
  31. (void)p->set_input_##name(*input); \
  32. }, \
  33. [](const OperatorPtr op, const OutHandler& handle) { \
  34. auto p = std::static_pointer_cast<OpType>(op); \
  35. (void)p->set_input_##name(*(handle.op), handle.out); \
  36. }, \
  37. [](const OperatorPtr op, const GeTensorDesc desc) { \
  38. auto p = std::static_pointer_cast<OpType>(op); \
  39. (void)p->update_input_desc_##name(desc); \
  40. } \
  41. }
  42. #define DYN_INPUT_MAP(T) \
  43. template <> \
  44. const std::unordered_map<int, DynInputDesc> OpAdapter<T>::dyn_input_map_
  45. #define DYN_INPUT_DESC(name) \
  46. { \
  47. #name, \
  48. [](const OperatorPtr op, unsigned int num) { \
  49. auto p = std::static_pointer_cast<OpType>(op); \
  50. (void)p->create_dynamic_input_##name(num); \
  51. }, \
  52. [](const OperatorPtr op, unsigned int index, const OperatorPtr input) { \
  53. auto p = std::static_pointer_cast<OpType>(op); \
  54. (void)p->set_dynamic_input_##name(index, *input); \
  55. }, \
  56. [](const OperatorPtr op, unsigned int index, const OutHandler& handle) { \
  57. auto p = std::static_pointer_cast<OpType>(op); \
  58. (void)p->set_dynamic_input_##name(index, *(handle.op), handle.out); \
  59. } \
  60. }
  61. #define ATTR_MAP(T) \
  62. template <> \
  63. const std::unordered_map<std::string, AttrDesc> OpAdapter<T>::attr_map_
  64. #define EMPTY_ATTR_MAP std::unordered_map<std::string, AttrDesc>()
  65. #define ATTR_DESC(name, ...) \
  66. { \
  67. #name, \
  68. [](const OperatorPtr op, const ValuePtr& value) { \
  69. auto p = std::static_pointer_cast<OpType>(op); \
  70. (void)p->set_attr_##name(ConvertAny(value, __VA_ARGS__)); \
  71. } \
  72. }
  73. #define INPUT_ATTR_MAP(T) \
  74. template <> \
  75. const std::unordered_map<unsigned int, AttrDesc> OpAdapter<T>::input_attr_map_
  76. #define OUTPUT_MAP(T) \
  77. template <> \
  78. const std::unordered_map<int, OutputDesc> OpAdapter<T>::output_map_
  79. #define OUTPUT_DESC(name) \
  80. { \
  81. #name, \
  82. [](const OperatorPtr op, const GeTensorDesc desc) { \
  83. auto p = std::static_pointer_cast<OpType>(op); \
  84. (void)p->update_output_desc_##name(desc); \
  85. } \
  86. }
  87. #define DYN_OUTPUT_MAP(T) \
  88. template <> \
  89. const std::unordered_map<int, DynOutputDesc> OpAdapter<T>::dyn_output_map_
  90. #define DYN_OUTPUT_DESC(name) \
  91. { \
  92. #name, \
  93. [](const OperatorPtr op, unsigned int num) { \
  94. auto p = std::static_pointer_cast<OpType>(op); \
  95. (void)p->create_dynamic_output_##name(num); \
  96. } \
  97. }
  98. template <>
  99. std::unordered_map<std::string, std::unordered_map<int, std::string>> OpAdapter<ge::Operator>::cus_input_map_{};
  100. template <>
  101. std::unordered_map<std::string, std::unordered_map<int, std::string>> OpAdapter<ge::Operator>::cus_output_map_{};
  102. // --------------specialization for each operator----------
  103. // const
  104. INPUT_MAP(Const) = EMPTY_INPUT_MAP;
  105. ATTR_MAP(Const) = {{"value", ATTR_DESC(value, AnyTraits<AnyValue>())}};
  106. OUTPUT_MAP(Const) = {{0, OUTPUT_DESC(y)}};
  107. // Assign
  108. INPUT_MAP(Assign) = {{1, INPUT_DESC(ref)}, {2, INPUT_DESC(value)}};
  109. ATTR_MAP(Assign) = EMPTY_ATTR_MAP;
  110. OUTPUT_MAP(Assign) = {{0, OUTPUT_DESC(ref)}};
  111. // Constant
  112. INPUT_MAP(Constant) = EMPTY_INPUT_MAP;
  113. ATTR_MAP(Constant) = {{"value", ATTR_DESC(value, AnyTraits<AnyValue>())}};
  114. OUTPUT_MAP(Constant) = {{0, OUTPUT_DESC(y)}};
  115. // ApplyMomentum
  116. INPUT_MAP(ApplyMomentum) = {
  117. {1, INPUT_DESC(var)}, {2, INPUT_DESC(accum)}, {3, INPUT_DESC(lr)}, {4, INPUT_DESC(grad)}, {5, INPUT_DESC(momentum)}};
  118. ATTR_MAP(ApplyMomentum) = {{"use_nesterov", ATTR_DESC(use_nesterov, AnyTraits<bool>())}};
  119. OUTPUT_MAP(ApplyMomentum) = {{0, OUTPUT_DESC(var)}};
  120. // ScalarSummary
  121. INPUT_MAP(Summary) = {{2, INPUT_DESC(x)}};
  122. ATTR_MAP(Summary) = EMPTY_ATTR_MAP;
  123. // Data
  124. INPUT_MAP(Data) = EMPTY_INPUT_MAP;
  125. ATTR_MAP(Data) = EMPTY_ATTR_MAP;
  126. // BatchNorm
  127. INPUT_MAP(BatchNorm) = {{1, INPUT_DESC(x)},
  128. {2, INPUT_DESC(scale)},
  129. {3, INPUT_DESC(offset)},
  130. {4, INPUT_DESC(mean)},
  131. {5, INPUT_DESC(variance)}};
  132. ATTR_MAP(BatchNorm) = {{"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())},
  133. {"epsilon", ATTR_DESC(epsilon, AnyTraits<float>())},
  134. {"is_training", ATTR_DESC(is_training, AnyTraits<bool>())}};
  135. OUTPUT_MAP(BatchNorm) = {{0, OUTPUT_DESC(y)},
  136. {1, OUTPUT_DESC(batch_mean)},
  137. {2, OUTPUT_DESC(batch_variance)},
  138. {3, OUTPUT_DESC(reserve_space_1)},
  139. {4, OUTPUT_DESC(reserve_space_2)}};
  140. // BatchNormGrad
  141. INPUT_MAP(BatchNormGrad) = {{1, INPUT_DESC(y_backprop)},
  142. {2, INPUT_DESC(x)},
  143. {3, INPUT_DESC(scale)},
  144. {4, INPUT_DESC(reserve_space_1)},
  145. {5, INPUT_DESC(reserve_space_2)}};
  146. ATTR_MAP(BatchNormGrad) = {{"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())},
  147. {"epsilon", ATTR_DESC(epsilon, AnyTraits<float>())},
  148. {"is_training", ATTR_DESC(is_training, AnyTraits<bool>())}};
  149. OUTPUT_MAP(BatchNormGrad) = {{0, OUTPUT_DESC(x_backprop)},
  150. {1, OUTPUT_DESC(scale_backprop)},
  151. {2, OUTPUT_DESC(offset_backprop)},
  152. {3, OUTPUT_DESC(reserve_space_4)},
  153. {4, OUTPUT_DESC(reserve_space_5)}};
  154. // Relu
  155. INPUT_MAP(Relu) = {{1, INPUT_DESC(x)}};
  156. ATTR_MAP(Relu) = EMPTY_ATTR_MAP;
  157. OUTPUT_MAP(Relu) = {{0, OUTPUT_DESC(y)}};
  158. // Elu
  159. INPUT_MAP(Elu) = {{1, INPUT_DESC(x)}};
  160. ATTR_MAP(Elu) = {{"alpha", ATTR_DESC(alpha, AnyTraits<float>())}};
  161. OUTPUT_MAP(Elu) = {{0, OUTPUT_DESC(y)}};
  162. // EluGrad
  163. INPUT_MAP(EluGrad) = {{1, INPUT_DESC(grads)}, {2, INPUT_DESC(activations)}};
  164. ATTR_MAP(EluGrad) = EMPTY_ATTR_MAP;
  165. OUTPUT_MAP(EluGrad) = {{0, OUTPUT_DESC(y)}};
  166. // PRelu
  167. INPUT_MAP(PRelu) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(weight)}};
  168. ATTR_MAP(PRelu) = EMPTY_ATTR_MAP;
  169. OUTPUT_MAP(PRelu) = {{0, OUTPUT_DESC(y)}};
  170. // PReluGrad
  171. INPUT_MAP(PReluGrad) = {{1, INPUT_DESC(grads)}, {2, INPUT_DESC(features)}, {3, INPUT_DESC(weights)}};
  172. ATTR_MAP(PReluGrad) = EMPTY_ATTR_MAP;
  173. OUTPUT_MAP(PReluGrad) = {{0, OUTPUT_DESC(dx)}, {1, OUTPUT_DESC(da)}};
  174. // Sigmoid
  175. INPUT_MAP(Sigmoid) = {{1, INPUT_DESC(x)}};
  176. ATTR_MAP(Sigmoid) = EMPTY_ATTR_MAP;
  177. OUTPUT_MAP(Sigmoid) = {{0, OUTPUT_DESC(y)}};
  178. // SigmoidGrad
  179. INPUT_MAP(SigmoidGrad) = {{1, INPUT_DESC(y)}, {2, INPUT_DESC(dy)}};
  180. ATTR_MAP(SigmoidGrad) = EMPTY_ATTR_MAP;
  181. OUTPUT_MAP(SigmoidGrad) = {{0, OUTPUT_DESC(z)}};
  182. // L2NormalizeGrad
  183. INPUT_MAP(L2NormalizeGrad) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(y)}, {3, INPUT_DESC(dy)}};
  184. ATTR_MAP(L2NormalizeGrad) = {
  185. {"axis", ATTR_DESC(dim, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  186. {"epsilon", ATTR_DESC(eps, AnyTraits<float>())}};
  187. OUTPUT_MAP(L2NormalizeGrad) = {{0, OUTPUT_DESC(dx)}};
  188. // LarsV2Update
  189. INPUT_MAP(LarsV2Update) = {{1, INPUT_DESC(w)},
  190. {2, INPUT_DESC(g)},
  191. {3, INPUT_DESC(w_square_sum)},
  192. {4, INPUT_DESC(g_square_sum)},
  193. {5, INPUT_DESC(weight_decay)},
  194. {6, INPUT_DESC(learning_rate)}};
  195. ATTR_MAP(LarsV2Update) = {{"epsilon", ATTR_DESC(epsilon, AnyTraits<float>())},
  196. {"hyperpara", ATTR_DESC(hyperpara, AnyTraits<float>())},
  197. {"use_clip", ATTR_DESC(use_clip, AnyTraits<bool>())}};
  198. OUTPUT_MAP(LarsV2Update) = {{0, OUTPUT_DESC(g_new)}};
  199. // L2Normalize
  200. INPUT_MAP(L2Normalize) = {{1, INPUT_DESC(x)}};
  201. ATTR_MAP(L2Normalize) = {
  202. {"axis", ATTR_DESC(axis, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  203. {"epsilon", ATTR_DESC(eps, AnyTraits<float>())}};
  204. OUTPUT_MAP(L2Normalize) = {{0, OUTPUT_DESC(y)}};
  205. // CumsumD
  206. INPUT_MAP(CumsumD) = {{1, INPUT_DESC(x)}};
  207. INPUT_ATTR_MAP(CumsumD) = {{2, ATTR_DESC(axis, AnyTraits<int64_t>())}};
  208. ATTR_MAP(CumsumD) = {{"exclusive", ATTR_DESC(exclusive, AnyTraits<bool>())},
  209. {"reverse", ATTR_DESC(reverse, AnyTraits<bool>())}};
  210. OUTPUT_MAP(CumsumD) = {{0, OUTPUT_DESC(y)}};
  211. // SoftmaxV2
  212. INPUT_MAP(SoftmaxV2) = {{1, INPUT_DESC(x)}};
  213. ATTR_MAP(SoftmaxV2) = {
  214. {"axis", ATTR_DESC(axes, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  215. };
  216. OUTPUT_MAP(SoftmaxV2) = {{0, OUTPUT_DESC(y)}};
  217. // SoftmaxGrad
  218. INPUT_MAP(SoftmaxGrad) = {{1, INPUT_DESC(softmax)}, {2, INPUT_DESC(grad_softmax)}};
  219. OUTPUT_MAP(SoftmaxGrad) = {{0, OUTPUT_DESC(grad_x)}};
  220. ATTR_MAP(SoftmaxGrad) = EMPTY_ATTR_MAP;
  221. // Flatten
  222. INPUT_MAP(Flatten) = {{1, INPUT_DESC(x)}};
  223. ATTR_MAP(Flatten) = EMPTY_ATTR_MAP;
  224. OUTPUT_MAP(Flatten) = {{0, OUTPUT_DESC(y)}};
  225. // add
  226. INPUT_MAP(Add) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  227. ATTR_MAP(Add) = EMPTY_ATTR_MAP;
  228. OUTPUT_MAP(Add) = {{0, OUTPUT_DESC(y)}};
  229. // GatherV2
  230. INPUT_MAP(GatherV2) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(indices)}, {3, INPUT_DESC(axis)}};
  231. ATTR_MAP(GatherV2) = EMPTY_ATTR_MAP;
  232. OUTPUT_MAP(GatherV2) = {{0, OUTPUT_DESC(y)}};
  233. // ReduceSumD
  234. INPUT_MAP(ReduceSumD) = {{1, INPUT_DESC(x)}};
  235. INPUT_ATTR_MAP(ReduceSumD) = {
  236. {2, ATTR_DESC(axes, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  237. ATTR_MAP(ReduceSumD) = {{"keep_dims", ATTR_DESC(keep_dims, AnyTraits<bool>())}};
  238. OUTPUT_MAP(ReduceSumD) = {{0, OUTPUT_DESC(y)}};
  239. // ReduceProdD
  240. INPUT_MAP(ReduceProdD) = {{1, INPUT_DESC(x)}};
  241. INPUT_ATTR_MAP(ReduceProdD) = {
  242. {2, ATTR_DESC(axes, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  243. ATTR_MAP(ReduceProdD) = {{"keep_dims", ATTR_DESC(keep_dims, AnyTraits<bool>())}};
  244. OUTPUT_MAP(ReduceProdD) = {{0, OUTPUT_DESC(y)}};
  245. // CumprodD
  246. INPUT_MAP(CumprodD) = {{1, INPUT_DESC(x)}};
  247. INPUT_ATTR_MAP(CumprodD) = {{2, ATTR_DESC(axis, AnyTraits<int64_t>())}};
  248. ATTR_MAP(CumprodD) = {{"exclusive", ATTR_DESC(exclusive, AnyTraits<bool>())},
  249. {"reverse", ATTR_DESC(reverse, AnyTraits<bool>())}};
  250. OUTPUT_MAP(CumprodD) = {{0, OUTPUT_DESC(y)}};
  251. // SoftmaxCrossEntropyWithLogits
  252. INPUT_MAP(SoftmaxCrossEntropyWithLogits) = {{1, INPUT_DESC(features)}, {2, INPUT_DESC(labels)}};
  253. ATTR_MAP(SoftmaxCrossEntropyWithLogits) = EMPTY_ATTR_MAP;
  254. OUTPUT_MAP(SoftmaxCrossEntropyWithLogits) = {{0, OUTPUT_DESC(loss)}, {1, OUTPUT_DESC(backprop)}};
  255. // MeanGrad
  256. INPUT_MAP(MeanGrad) = {{1, INPUT_DESC(x)}};
  257. INPUT_ATTR_MAP(MeanGrad) = {{2, ATTR_DESC(mean_grad_output_shape_value, kOpFormat_NHWC,
  258. AnyTraits<std::vector<int64_t>>(), AnyTraits<int64_t>())}};
  259. ATTR_MAP(MeanGrad) = {{"mode", ATTR_DESC(mode, AnyTraits<int64_t>())}};
  260. INPUT_MAP(SliceD) = {{1, INPUT_DESC(x)}};
  261. INPUT_ATTR_MAP(SliceD) = {{2, ATTR_DESC(offsets, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  262. {3, ATTR_DESC(size, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())}};
  263. ATTR_MAP(SliceD) = EMPTY_ATTR_MAP;
  264. OUTPUT_MAP(SliceD) = {{0, OUTPUT_DESC(y)}};
  265. // MaxPool
  266. INPUT_MAP(MaxPool) = {{1, INPUT_DESC(x)}};
  267. ATTR_MAP(MaxPool) = {{"ksize", ATTR_DESC(ksize, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  268. {"strides", ATTR_DESC(strides, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  269. {"padding", ATTR_DESC(padding, AnyTraits<std::string>())},
  270. {"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
  271. OUTPUT_MAP(MaxPool) = {{0, OUTPUT_DESC(y)}};
  272. // AvgPool
  273. INPUT_MAP(AvgPool) = {{1, INPUT_DESC(x)}};
  274. ATTR_MAP(AvgPool) = {{"ksize", ATTR_DESC(ksize, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  275. {"strides", ATTR_DESC(strides, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  276. {"padding", ATTR_DESC(padding, AnyTraits<std::string>())},
  277. {"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
  278. OUTPUT_MAP(AvgPool) = {{0, OUTPUT_DESC(y)}};
  279. // GreaterEqual
  280. INPUT_MAP(GreaterEqual) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  281. ATTR_MAP(GreaterEqual) = EMPTY_ATTR_MAP;
  282. OUTPUT_MAP(GreaterEqual) = {{0, OUTPUT_DESC(y)}};
  283. // AssignAdd
  284. INPUT_MAP(AssignAdd) = {{1, INPUT_DESC(ref)}, {2, INPUT_DESC(value)}};
  285. ATTR_MAP(AssignAdd) = EMPTY_ATTR_MAP;
  286. OUTPUT_MAP(AssignAdd) = {{0, OUTPUT_DESC(ref)}};
  287. // AssignSub
  288. INPUT_MAP(AssignSub) = {{1, INPUT_DESC(var)}, {2, INPUT_DESC(value)}};
  289. ATTR_MAP(AssignSub) = EMPTY_ATTR_MAP;
  290. OUTPUT_MAP(AssignSub) = {{0, OUTPUT_DESC(var)}};
  291. // Cos
  292. INPUT_MAP(Cos) = {{1, INPUT_DESC(x)}};
  293. ATTR_MAP(Cos) = EMPTY_ATTR_MAP;
  294. OUTPUT_MAP(Cos) = {{0, OUTPUT_DESC(y)}};
  295. // Acos
  296. INPUT_MAP(Acos) = {{1, INPUT_DESC(x)}};
  297. ATTR_MAP(Acos) = EMPTY_ATTR_MAP;
  298. OUTPUT_MAP(Acos) = {{0, OUTPUT_DESC(y)}};
  299. // AcosGrad
  300. INPUT_MAP(AcosGrad) = {{1, INPUT_DESC(y)}, {2, INPUT_DESC(dy)}};
  301. ATTR_MAP(AcosGrad) = EMPTY_ATTR_MAP;
  302. OUTPUT_MAP(AcosGrad) = {{0, OUTPUT_DESC(z)}};
  303. // Acosh
  304. INPUT_MAP(Acosh) = {{1, INPUT_DESC(x)}};
  305. ATTR_MAP(Acosh) = EMPTY_ATTR_MAP;
  306. OUTPUT_MAP(Acosh) = {{0, OUTPUT_DESC(y)}};
  307. // AcoshGrad
  308. INPUT_MAP(AcoshGrad) = {{1, INPUT_DESC(y)}, {2, INPUT_DESC(dy)}};
  309. ATTR_MAP(AcoshGrad) = EMPTY_ATTR_MAP;
  310. OUTPUT_MAP(AcoshGrad) = {{0, OUTPUT_DESC(z)}};
  311. // Floor
  312. INPUT_MAP(Floor) = {{1, INPUT_DESC(x)}};
  313. ATTR_MAP(Floor) = EMPTY_ATTR_MAP;
  314. OUTPUT_MAP(Floor) = {{0, OUTPUT_DESC(y)}};
  315. // FloorDiv
  316. INPUT_MAP(FloorDiv) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  317. ATTR_MAP(FloorDiv) = EMPTY_ATTR_MAP;
  318. OUTPUT_MAP(FloorDiv) = {{0, OUTPUT_DESC(y)}};
  319. // FloorMod
  320. INPUT_MAP(FloorMod) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  321. ATTR_MAP(FloorMod) = EMPTY_ATTR_MAP;
  322. OUTPUT_MAP(FloorMod) = {{0, OUTPUT_DESC(y)}};
  323. // Sin
  324. INPUT_MAP(Sin) = {{1, INPUT_DESC(x)}};
  325. ATTR_MAP(Sin) = EMPTY_ATTR_MAP;
  326. OUTPUT_MAP(Sin) = {{0, OUTPUT_DESC(y)}};
  327. // Exp
  328. INPUT_MAP(Exp) = {{1, INPUT_DESC(x)}};
  329. ATTR_MAP(Exp) = EMPTY_ATTR_MAP;
  330. OUTPUT_MAP(Exp) = {{0, OUTPUT_DESC(y)}};
  331. // BoundingBoxEncode
  332. INPUT_MAP(BoundingBoxEncode) = {
  333. {1, INPUT_DESC(anchor_box)},
  334. {2, INPUT_DESC(ground_truth_box)},
  335. };
  336. ATTR_MAP(BoundingBoxEncode) = {
  337. {"means", ATTR_DESC(means, AnyTraits<std::vector<float>>(), AnyTraits<float>())},
  338. {"stds", ATTR_DESC(stds, AnyTraits<std::vector<float>>(), AnyTraits<float>())},
  339. };
  340. OUTPUT_MAP(BoundingBoxEncode) = {{0, OUTPUT_DESC(delats)}};
  341. // BoundingBoxDecode
  342. INPUT_MAP(BoundingBoxDecode) = {
  343. {1, INPUT_DESC(rois)},
  344. {2, INPUT_DESC(deltas)},
  345. };
  346. ATTR_MAP(BoundingBoxDecode) = {
  347. {"means", ATTR_DESC(means, AnyTraits<std::vector<float>>(), AnyTraits<float>())},
  348. {"stds", ATTR_DESC(stds, AnyTraits<std::vector<float>>(), AnyTraits<float>())},
  349. {"max_shape", ATTR_DESC(max_shape, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  350. {"wh_ratio_clip", ATTR_DESC(wh_ratio_clip, AnyTraits<float>())},
  351. };
  352. OUTPUT_MAP(BoundingBoxDecode) = {{0, OUTPUT_DESC(bboxes)}};
  353. // TopK
  354. INPUT_MAP(TopK) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(k)}};
  355. ATTR_MAP(TopK) = {{"sorted", ATTR_DESC(sorted, AnyTraits<bool>())}};
  356. OUTPUT_MAP(TopK) = {{0, OUTPUT_DESC(values)}, {1, OUTPUT_DESC(indices)}};
  357. // Multiply
  358. INPUT_MAP(Multiply) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(y)}};
  359. ATTR_MAP(Multiply) = EMPTY_ATTR_MAP;
  360. OUTPUT_MAP(Multiply) = {{0, OUTPUT_DESC(z)}};
  361. // TileD
  362. INPUT_MAP(TileD) = {{1, INPUT_DESC(x)}};
  363. INPUT_ATTR_MAP(TileD) = {{2, ATTR_DESC(multiples, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())}};
  364. ATTR_MAP(TileD) = EMPTY_ATTR_MAP;
  365. OUTPUT_MAP(TileD) = {{0, OUTPUT_DESC(y)}};
  366. // OneHot
  367. INPUT_MAP(OneHot) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(depth)}, {3, INPUT_DESC(on_value)}, {4, INPUT_DESC(off_value)}};
  368. ATTR_MAP(OneHot) = {{"axis", ATTR_DESC(axis, AnyTraits<int64_t>())}};
  369. OUTPUT_MAP(OneHot) = {{0, OUTPUT_DESC(y)}};
  370. // GatherV2D
  371. INPUT_MAP(GatherV2D) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(indices)}};
  372. INPUT_ATTR_MAP(GatherV2D) = {{3, ATTR_DESC(axis, AnyTraits<int64_t>())}};
  373. ATTR_MAP(GatherV2D) = EMPTY_ATTR_MAP;
  374. OUTPUT_MAP(GatherV2D) = {{0, OUTPUT_DESC(y)}};
  375. // Reshape
  376. INPUT_MAP(Reshape) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(shape)}};
  377. ATTR_MAP(Reshape) = EMPTY_ATTR_MAP;
  378. OUTPUT_MAP(Reshape) = {{0, OUTPUT_DESC(y)}};
  379. // BiasAdd
  380. INPUT_MAP(BiasAdd) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(bias)}};
  381. ATTR_MAP(BiasAdd) = {{"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
  382. OUTPUT_MAP(BiasAdd) = {{0, OUTPUT_DESC(y)}};
  383. // Iou
  384. INPUT_MAP(Iou) = {{1, INPUT_DESC(bboxes)}, {2, INPUT_DESC(gtboxes)}};
  385. ATTR_MAP(Iou) = {{"mode", ATTR_DESC(mode, AnyTraits<std::string>())}};
  386. OUTPUT_MAP(Iou) = {{0, OUTPUT_DESC(overlap)}};
  387. // ResizeNearestNeighborV2D
  388. INPUT_MAP(ResizeNearestNeighborV2D) = {{1, INPUT_DESC(x)}};
  389. ATTR_MAP(ResizeNearestNeighborV2D) = {
  390. {"size", ATTR_DESC(size, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  391. {"align_corners", ATTR_DESC(align_corners, AnyTraits<bool>())}};
  392. OUTPUT_MAP(ResizeNearestNeighborV2D) = {{0, OUTPUT_DESC(y)}};
  393. // ResizeNearestNeighborV2Grad
  394. INPUT_MAP(ResizeNearestNeighborV2Grad) = {{1, INPUT_DESC(grads)}, {2, INPUT_DESC(size)}};
  395. ATTR_MAP(ResizeNearestNeighborV2Grad) = {{"align_corners", ATTR_DESC(align_corners, AnyTraits<bool>())}};
  396. OUTPUT_MAP(ResizeNearestNeighborV2Grad) = {{0, OUTPUT_DESC(y)}};
  397. // ApplyAdam
  398. INPUT_MAP(ApplyAdam) = {{1, INPUT_DESC(var)}, {2, INPUT_DESC(m)}, {3, INPUT_DESC(v)},
  399. {4, INPUT_DESC(beta1_power)}, {5, INPUT_DESC(beta2_power)}, {6, INPUT_DESC(lr)},
  400. {7, INPUT_DESC(beta1)}, {8, INPUT_DESC(beta2)}, {9, INPUT_DESC(epsilon)},
  401. {10, INPUT_DESC(grad)}};
  402. ATTR_MAP(ApplyAdam) = {{"use_locking", ATTR_DESC(use_locking, AnyTraits<bool>())},
  403. {"use_nesterov", ATTR_DESC(use_nesterov, AnyTraits<bool>())}};
  404. OUTPUT_MAP(ApplyAdam) = {{0, OUTPUT_DESC(var)}, {1, OUTPUT_DESC(m)}, {2, OUTPUT_DESC(v)}};
  405. // Relu6
  406. INPUT_MAP(Relu6) = {{1, INPUT_DESC(x)}};
  407. ATTR_MAP(Relu6) = EMPTY_ATTR_MAP;
  408. OUTPUT_MAP(Relu6) = {{0, OUTPUT_DESC(y)}};
  409. // Relu6Grad
  410. INPUT_MAP(Relu6Grad) = {{1, INPUT_DESC(gradients)}, {2, INPUT_DESC(features)}};
  411. ATTR_MAP(Relu6Grad) = EMPTY_ATTR_MAP;
  412. OUTPUT_MAP(Relu6Grad) = {{0, OUTPUT_DESC(backprops)}};
  413. // ResizeBilinearV2Grad
  414. INPUT_MAP(ResizeBilinearV2Grad) = {{1, INPUT_DESC(grads)}, {2, INPUT_DESC(original_image)}};
  415. ATTR_MAP(ResizeBilinearV2Grad) = {{"align_corners", ATTR_DESC(align_corners, AnyTraits<bool>())}};
  416. OUTPUT_MAP(ResizeBilinearV2Grad) = {{0, OUTPUT_DESC(y)}};
  417. // ResizeBilinearV2D
  418. INPUT_MAP(ResizeBilinearV2D) = {{1, INPUT_DESC(x)}};
  419. ATTR_MAP(ResizeBilinearV2D) = {
  420. {"size", ATTR_DESC(size, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  421. {"align_corners", ATTR_DESC(align_corners, AnyTraits<bool>())}};
  422. OUTPUT_MAP(ResizeBilinearV2D) = {{0, OUTPUT_DESC(y)}};
  423. // ZerosLike
  424. INPUT_MAP(ZerosLike) = {{1, INPUT_DESC(x)}};
  425. ATTR_MAP(ZerosLike) = EMPTY_ATTR_MAP;
  426. OUTPUT_MAP(ZerosLike) = {{0, OUTPUT_DESC(y)}};
  427. // OnesLike
  428. INPUT_MAP(OnesLike) = {{1, INPUT_DESC(x)}};
  429. ATTR_MAP(OnesLike) = EMPTY_ATTR_MAP;
  430. OUTPUT_MAP(OnesLike) = {{0, OUTPUT_DESC(y)}};
  431. // NMSWithMask
  432. INPUT_MAP(NMSWithMask) = {{1, INPUT_DESC(box_scores)}};
  433. ATTR_MAP(NMSWithMask) = {{"iou_threshold", ATTR_DESC(iou_threshold, AnyTraits<float>())}};
  434. OUTPUT_MAP(NMSWithMask) = {
  435. {0, OUTPUT_DESC(selected_boxes)}, {1, OUTPUT_DESC(selected_idx)}, {2, OUTPUT_DESC(selected_mask)}};
  436. // Unpack
  437. INPUT_MAP(Unpack) = {{1, INPUT_DESC(x)}};
  438. ATTR_MAP(Unpack) = {{"axis", ATTR_DESC(axis, AnyTraits<int>())}, {"num", ATTR_DESC(num, AnyTraits<int>())}};
  439. DYN_OUTPUT_MAP(Unpack) = {{0, DYN_OUTPUT_DESC(y)}};
  440. // ScatterUpdate
  441. INPUT_MAP(ScatterUpdate) = {{1, INPUT_DESC(var)}, {2, INPUT_DESC(indices)}, {3, INPUT_DESC(updates)}};
  442. ATTR_MAP(ScatterUpdate) = {{"use_locking", ATTR_DESC(use_locking, AnyTraits<bool>())}};
  443. OUTPUT_MAP(ScatterUpdate) = {{0, OUTPUT_DESC(var)}};
  444. // ScatterNdUpdate
  445. INPUT_MAP(ScatterNdUpdate) = {{1, INPUT_DESC(var)}, {2, INPUT_DESC(indices)}, {3, INPUT_DESC(updates)}};
  446. ATTR_MAP(ScatterNdUpdate) = {{"use_locking", ATTR_DESC(use_locking, AnyTraits<bool>())}};
  447. OUTPUT_MAP(ScatterNdUpdate) = {{0, OUTPUT_DESC(var)}};
  448. // ScatterMax
  449. INPUT_MAP(ScatterMax) = {{1, INPUT_DESC(var)}, {2, INPUT_DESC(indices)}, {3, INPUT_DESC(updates)}};
  450. ATTR_MAP(ScatterMax) = {{"use_locking", ATTR_DESC(use_locking, AnyTraits<bool>())}};
  451. OUTPUT_MAP(ScatterMax) = {{0, OUTPUT_DESC(var)}};
  452. // CheckValid
  453. INPUT_MAP(CheckValid) = {{1, INPUT_DESC(bbox_tensor)}, {2, INPUT_DESC(img_metas)}};
  454. ATTR_MAP(CheckValid) = EMPTY_ATTR_MAP;
  455. OUTPUT_MAP(CheckValid) = {{0, OUTPUT_DESC(valid_tensor)}};
  456. // SmoothL1Loss
  457. INPUT_MAP(SmoothL1Loss) = {{1, INPUT_DESC(predict)}, {2, INPUT_DESC(label)}};
  458. ATTR_MAP(SmoothL1Loss) = {{"sigma", ATTR_DESC(sigma, AnyTraits<float>())}};
  459. OUTPUT_MAP(SmoothL1Loss) = {{0, OUTPUT_DESC(loss)}};
  460. // SmoothL1LossGrad
  461. INPUT_MAP(SmoothL1LossGrad) = {{1, INPUT_DESC(predict)}, {2, INPUT_DESC(label)}, {3, INPUT_DESC(dout)}};
  462. ATTR_MAP(SmoothL1LossGrad) = {{"sigma", ATTR_DESC(sigma, AnyTraits<float>())}};
  463. OUTPUT_MAP(SmoothL1LossGrad) = {{0, OUTPUT_DESC(gradient)}};
  464. // SigmoidCrossEntropyWithLogits
  465. INPUT_MAP(SigmoidCrossEntropyWithLogits) = {{1, INPUT_DESC(predict)}, {2, INPUT_DESC(target)}};
  466. ATTR_MAP(SigmoidCrossEntropyWithLogits) = EMPTY_ATTR_MAP;
  467. OUTPUT_MAP(SigmoidCrossEntropyWithLogits) = {{0, OUTPUT_DESC(loss)}};
  468. // SigmoidCrossEntropyWithLogitsGrad
  469. INPUT_MAP(SigmoidCrossEntropyWithLogitsGrad) = {
  470. {1, INPUT_DESC(predict)}, {2, INPUT_DESC(target)}, {3, INPUT_DESC(dout)}};
  471. ATTR_MAP(SigmoidCrossEntropyWithLogitsGrad) = EMPTY_ATTR_MAP;
  472. OUTPUT_MAP(SigmoidCrossEntropyWithLogitsGrad) = {{0, OUTPUT_DESC(gradient)}};
  473. // ScatterNdD
  474. INPUT_MAP(ScatterNdD) = {{1, INPUT_DESC(indices)}, {2, INPUT_DESC(x)}};
  475. INPUT_ATTR_MAP(ScatterNdD) = {
  476. {3, ATTR_DESC(shape, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  477. ATTR_MAP(ScatterNdD) = EMPTY_ATTR_MAP;
  478. OUTPUT_MAP(ScatterNdD) = {{0, OUTPUT_DESC(y)}};
  479. // PadD
  480. INPUT_MAP(PadD) = {{1, INPUT_DESC(x)}};
  481. ATTR_MAP(PadD) = {{"paddings", ATTR_DESC(paddings, AnyTraits<std::vector<std::vector<int64_t>>>())}};
  482. OUTPUT_MAP(PadD) = {{0, OUTPUT_DESC(y)}};
  483. // MirrorPad
  484. INPUT_MAP(MirrorPad) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(paddings)}};
  485. ATTR_MAP(MirrorPad) = {{"mode", ATTR_DESC(mode, AnyTraits<std::string>())}};
  486. OUTPUT_MAP(MirrorPad) = {{0, OUTPUT_DESC(y)}};
  487. // MirrorPadGrad
  488. INPUT_MAP(MirrorPadGrad) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(paddings)}};
  489. ATTR_MAP(MirrorPadGrad) = {{"mode", ATTR_DESC(mode, AnyTraits<std::string>())}};
  490. OUTPUT_MAP(MirrorPadGrad) = {{0, OUTPUT_DESC(y)}};
  491. // GatherNd
  492. INPUT_MAP(GatherNd) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(indices)}};
  493. ATTR_MAP(GatherNd) = EMPTY_ATTR_MAP;
  494. OUTPUT_MAP(GatherNd) = {{0, OUTPUT_DESC(y)}};
  495. // ROIAlign
  496. INPUT_MAP(ROIAlign) = {{1, INPUT_DESC(features)}, {2, INPUT_DESC(rois)}};
  497. OUTPUT_MAP(ROIAlign) = {{0, OUTPUT_DESC(y)}};
  498. ATTR_MAP(ROIAlign) = {{"pooled_height", ATTR_DESC(pooled_height, AnyTraits<int>())},
  499. {"pooled_width", ATTR_DESC(pooled_width, AnyTraits<int>())},
  500. {"spatial_scale", ATTR_DESC(spatial_scale, AnyTraits<float>())},
  501. {"sample_num", ATTR_DESC(sample_num, AnyTraits<int>())}};
  502. // ROIAlignGrad
  503. INPUT_MAP(ROIAlignGrad) = {{1, INPUT_DESC(ydiff)}, {2, INPUT_DESC(rois)}};
  504. OUTPUT_MAP(ROIAlignGrad) = {{0, OUTPUT_DESC(xdiff)}};
  505. ATTR_MAP(ROIAlignGrad) = {
  506. {"xdiff_shape", ATTR_DESC(xdiff_shape, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  507. {"pooled_height", ATTR_DESC(pooled_height, AnyTraits<int>())},
  508. {"pooled_width", ATTR_DESC(pooled_width, AnyTraits<int>())},
  509. {"spatial_scale", ATTR_DESC(spatial_scale, AnyTraits<float>())},
  510. {"sample_num", ATTR_DESC(sample_num, AnyTraits<int>())}};
  511. // ArgMaxD
  512. INPUT_MAP(ArgMaxD) = {{1, INPUT_DESC(x)}};
  513. ATTR_MAP(ArgMaxD) = {{"axis", ATTR_DESC(dimension, AnyTraits<int>())},
  514. {"output_type", ATTR_DESC(dtype, AnyTraits<GEType>())}};
  515. OUTPUT_MAP(ArgMaxD) = {{0, OUTPUT_DESC(y)}};
  516. // ArgMinD
  517. INPUT_MAP(ArgMinD) = {{1, INPUT_DESC(x)}};
  518. ATTR_MAP(ArgMinD) = {{"axis", ATTR_DESC(dimension, AnyTraits<int>())},
  519. {"output_type", ATTR_DESC(dtype, AnyTraits<GEType>())}};
  520. OUTPUT_MAP(ArgMinD) = {{0, OUTPUT_DESC(y)}};
  521. // ArgMaxWithValue
  522. INPUT_MAP(ArgMaxWithValue) = {{1, INPUT_DESC(x)}};
  523. ATTR_MAP(ArgMaxWithValue) = {{"axis", ATTR_DESC(dimension, AnyTraits<int>())},
  524. {"keep_dims", ATTR_DESC(keep_dims, AnyTraits<bool>())}};
  525. OUTPUT_MAP(ArgMaxWithValue) = {{0, OUTPUT_DESC(indice)}, {1, OUTPUT_DESC(values)}};
  526. // ArgMinWithValue
  527. INPUT_MAP(ArgMinWithValue) = {{1, INPUT_DESC(x)}};
  528. ATTR_MAP(ArgMinWithValue) = {{"axis", ATTR_DESC(dimension, AnyTraits<int>())},
  529. {"keep_dims", ATTR_DESC(keep_dims, AnyTraits<bool>())}};
  530. OUTPUT_MAP(ArgMinWithValue) = {{0, OUTPUT_DESC(indice)}, {1, OUTPUT_DESC(values)}};
  531. // ReduceAllD
  532. INPUT_MAP(ReduceAllD) = {{1, INPUT_DESC(x)}};
  533. INPUT_ATTR_MAP(ReduceAllD) = {
  534. {2, ATTR_DESC(axes, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  535. ATTR_MAP(ReduceAllD) = {{"keep_dims", ATTR_DESC(keep_dims, AnyTraits<bool>())}};
  536. OUTPUT_MAP(ReduceAllD) = {{0, OUTPUT_DESC(y)}};
  537. // ReduceMeanD
  538. INPUT_MAP(ReduceMeanD) = {{1, INPUT_DESC(x)}};
  539. INPUT_ATTR_MAP(ReduceMeanD) = {
  540. {2, ATTR_DESC(axes, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  541. ATTR_MAP(ReduceMeanD) = {{"keep_dims", ATTR_DESC(keep_dims, AnyTraits<bool>())}};
  542. OUTPUT_MAP(ReduceMeanD) = {{0, OUTPUT_DESC(y)}};
  543. // HCOMAllreduce
  544. INPUT_MAP(HcomAllReduce) = {{1, INPUT_DESC(x)}};
  545. OUTPUT_MAP(HcomAllReduce) = {{0, OUTPUT_DESC(y)}};
  546. ATTR_MAP(HcomAllReduce) = {{"op", ATTR_DESC(reduction, AnyTraits<std::string>())},
  547. {"group", ATTR_DESC(group, AnyTraits<std::string>())},
  548. {"fusion", ATTR_DESC(fusion, AnyTraits<int>())}};
  549. // HCOMBraodcast
  550. INPUT_MAP(HcomBroadcast) = EMPTY_INPUT_MAP;
  551. DYN_INPUT_MAP(HcomBroadcast) = {{1, DYN_INPUT_DESC(x)}};
  552. DYN_OUTPUT_MAP(HcomBroadcast) = {{0, DYN_OUTPUT_DESC(y)}};
  553. ATTR_MAP(HcomBroadcast) = {{"root_rank", ATTR_DESC(root_rank, AnyTraits<int>())},
  554. {"group", ATTR_DESC(group, AnyTraits<std::string>())}};
  555. // HCOMAllreduce
  556. INPUT_MAP(HcomAllGather) = {{1, INPUT_DESC(x)}};
  557. OUTPUT_MAP(HcomAllGather) = {{0, OUTPUT_DESC(y)}};
  558. ATTR_MAP(HcomAllGather) = {{"group", ATTR_DESC(group, AnyTraits<std::string>())},
  559. {"rank_size", ATTR_DESC(rank_size, AnyTraits<int>())}};
  560. // HCOMReduceScatter
  561. INPUT_MAP(HcomReduceScatter) = {{1, INPUT_DESC(x)}};
  562. OUTPUT_MAP(HcomReduceScatter) = {{0, OUTPUT_DESC(y)}};
  563. ATTR_MAP(HcomReduceScatter) = {{"group", ATTR_DESC(group, AnyTraits<std::string>())},
  564. {"op", ATTR_DESC(reduction, AnyTraits<std::string>())},
  565. {"rank_size", ATTR_DESC(rank_size, AnyTraits<int>())}};
  566. // Variable
  567. INPUT_MAP(Variable) = {{1, INPUT_DESC(x)}};
  568. ATTR_MAP(Variable) = EMPTY_ATTR_MAP;
  569. // ReluGrad
  570. INPUT_MAP(ReluGrad) = {{1, INPUT_DESC(gradients)}, {2, INPUT_DESC(features)}};
  571. ATTR_MAP(ReluGrad) = EMPTY_ATTR_MAP;
  572. OUTPUT_MAP(ReluGrad) = {{0, OUTPUT_DESC(backprops)}};
  573. // BiasAddGrad
  574. INPUT_MAP(BiasAddGrad) = {{1, INPUT_DESC(x)}};
  575. ATTR_MAP(BiasAddGrad) = {{"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
  576. OUTPUT_MAP(BiasAddGrad) = {{0, OUTPUT_DESC(y)}};
  577. // MaxPoolGrad
  578. INPUT_MAP(MaxPoolGrad) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}, {3, INPUT_DESC(grad)}};
  579. ATTR_MAP(MaxPoolGrad) = {{"ksize", ATTR_DESC(ksize, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  580. {"strides", ATTR_DESC(strides, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  581. {"padding", ATTR_DESC(padding, AnyTraits<std::string>())},
  582. {"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
  583. OUTPUT_MAP(MaxPoolGrad) = {{0, OUTPUT_DESC(y)}};
  584. // avgpoolgrad
  585. INPUT_MAP(AvgPoolGrad) = {{1, INPUT_DESC(orig_input_shape)}, {2, INPUT_DESC(input_grad)}};
  586. ATTR_MAP(AvgPoolGrad) = {{"ksize", ATTR_DESC(ksize, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  587. {"strides", ATTR_DESC(strides, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  588. {"padding", ATTR_DESC(padding, AnyTraits<std::string>())},
  589. {"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())}};
  590. OUTPUT_MAP(AvgPoolGrad) = {{0, OUTPUT_DESC(out_grad)}};
  591. // MaxPoolWithArgmax
  592. INPUT_MAP(MaxPoolWithArgmax) = {{1, INPUT_DESC(x)}};
  593. ATTR_MAP(MaxPoolWithArgmax) = {{"ksize", ATTR_DESC(ksize, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  594. {"strides", ATTR_DESC(strides, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  595. {"padding", ATTR_DESC(padding, AnyTraits<std::string>())}};
  596. OUTPUT_MAP(MaxPoolWithArgmax) = {{0, OUTPUT_DESC(y)}, {1, OUTPUT_DESC(argmax)}};
  597. // MaxPoolGradWithArgmax
  598. INPUT_MAP(MaxPoolGradWithArgmax) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(grad)}, {3, INPUT_DESC(argmax)}};
  599. ATTR_MAP(MaxPoolGradWithArgmax) = {{"ksize", ATTR_DESC(ksize, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  600. {"strides", ATTR_DESC(strides, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  601. {"padding", ATTR_DESC(padding, AnyTraits<std::string>())}};
  602. OUTPUT_MAP(MaxPoolGradWithArgmax) = {{0, OUTPUT_DESC(y)}};
  603. // ExtractImagePatches
  604. INPUT_MAP(ExtractImagePatches) = {{1, INPUT_DESC(x)}};
  605. ATTR_MAP(ExtractImagePatches) = {{"ksizes", ATTR_DESC(ksizes, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  606. {"strides", ATTR_DESC(strides, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  607. {"rates", ATTR_DESC(rates, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())},
  608. {"padding", ATTR_DESC(padding, AnyTraits<std::string>())}};
  609. OUTPUT_MAP(ExtractImagePatches) = {{0, OUTPUT_DESC(y)}};
  610. // Conv2D
  611. INPUT_MAP(Conv2D) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(filter)}};
  612. ATTR_MAP(Conv2D) = {
  613. {"stride", ATTR_DESC(strides, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  614. {"pad_list", ATTR_DESC(pads, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  615. {"dilation", ATTR_DESC(dilations, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  616. {"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())},
  617. {"group", ATTR_DESC(groups, AnyTraits<int>())},
  618. };
  619. OUTPUT_MAP(Conv2D) = {{0, OUTPUT_DESC(y)}};
  620. // Conv2DBackpropInputD
  621. INPUT_MAP(Conv2DBackpropInputD) = {{1, INPUT_DESC(out_backprop)}, {2, INPUT_DESC(filter)}};
  622. INPUT_ATTR_MAP(Conv2DBackpropInputD) = {
  623. {3, ATTR_DESC(input_size, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  624. ATTR_MAP(Conv2DBackpropInputD) = {
  625. {"pad_list", ATTR_DESC(pads, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  626. {"stride", ATTR_DESC(strides, "pad", AnyTraits<std::vector<int64_t>>())},
  627. {"dilation", ATTR_DESC(dilations, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  628. {"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())},
  629. {"group", ATTR_DESC(groups, AnyTraits<int>())},
  630. };
  631. OUTPUT_MAP(Conv2DBackpropInputD) = {{0, OUTPUT_DESC(y)}};
  632. // Conv2DBackpropFilterD
  633. INPUT_MAP(Conv2DBackpropFilterD) = {{1, INPUT_DESC(out_backprop)}, {2, INPUT_DESC(x)}};
  634. INPUT_ATTR_MAP(Conv2DBackpropFilterD) = {
  635. {3, ATTR_DESC(filter_size, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  636. ATTR_MAP(Conv2DBackpropFilterD) = {
  637. {"pad_list", ATTR_DESC(pads, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  638. {"stride", ATTR_DESC(strides, "pad", AnyTraits<std::vector<int64_t>>())},
  639. {"dilation", ATTR_DESC(dilations, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  640. {"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())},
  641. {"group", ATTR_DESC(groups, AnyTraits<int>())},
  642. };
  643. OUTPUT_MAP(Conv2DBackpropFilterD) = {{0, OUTPUT_DESC(y)}};
  644. // DepthwiseConv2D
  645. INPUT_MAP(DepthwiseConv2D) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(filter)}};
  646. ATTR_MAP(DepthwiseConv2D) = {
  647. {"stride", ATTR_DESC(strides, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  648. {"pads", ATTR_DESC(pads, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  649. {"dilation", ATTR_DESC(dilations, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  650. {"data_format", ATTR_DESC(data_format, AnyTraits<std::string>())},
  651. };
  652. OUTPUT_MAP(DepthwiseConv2D) = {{0, OUTPUT_DESC(y)}};
  653. // DepthwiseConv2DBackpropInputD
  654. INPUT_MAP(DepthwiseConv2DBackpropInputD) = {{2, INPUT_DESC(filter)}, {3, INPUT_DESC(out_backprop)}};
  655. INPUT_ATTR_MAP(DepthwiseConv2DBackpropInputD) = {
  656. {1, ATTR_DESC(input_size, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  657. ATTR_MAP(DepthwiseConv2DBackpropInputD) = {
  658. {"stride", ATTR_DESC(strides, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  659. {"pads", ATTR_DESC(pads, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  660. {"dilation", ATTR_DESC(dilations, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  661. };
  662. OUTPUT_MAP(DepthwiseConv2DBackpropInputD) = {{0, OUTPUT_DESC(input_grad)}};
  663. // DepthwiseConv2DBackpropFilterD
  664. INPUT_MAP(DepthwiseConv2DBackpropFilterD) = {{1, INPUT_DESC(input)}, {3, INPUT_DESC(out_backprop)}};
  665. INPUT_ATTR_MAP(DepthwiseConv2DBackpropFilterD) = {
  666. {2, ATTR_DESC(filter_size, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  667. ATTR_MAP(DepthwiseConv2DBackpropFilterD) = {
  668. {"stride", ATTR_DESC(strides, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  669. {"pads", ATTR_DESC(pads, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  670. {"dilation", ATTR_DESC(dilations, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())},
  671. };
  672. OUTPUT_MAP(DepthwiseConv2DBackpropFilterD) = {{0, OUTPUT_DESC(filter_grad)}};
  673. // MatMul
  674. INPUT_MAP(MatMul) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  675. ATTR_MAP(MatMul) = {{"transpose_a", ATTR_DESC(transpose_x1, AnyTraits<bool>())},
  676. {"transpose_b", ATTR_DESC(transpose_x2, AnyTraits<bool>())}};
  677. OUTPUT_MAP(MatMul) = {{0, OUTPUT_DESC(y)}};
  678. // Merge
  679. INPUT_MAP(Merge) = EMPTY_INPUT_MAP;
  680. DYN_INPUT_MAP(Merge) = {{1, DYN_INPUT_DESC(x)}};
  681. ATTR_MAP(Merge) = EMPTY_ATTR_MAP;
  682. OUTPUT_MAP(Merge) = {{0, OUTPUT_DESC(y)}, {1, OUTPUT_DESC(value_index)}};
  683. // Switch
  684. INPUT_MAP(Switch) = {{1, INPUT_DESC(data)}, {2, INPUT_DESC(pred)}};
  685. OUTPUT_MAP(Switch) = {{0, OUTPUT_DESC(output_false)}, {1, OUTPUT_DESC(output_true)}};
  686. ATTR_MAP(Switch) = EMPTY_ATTR_MAP;
  687. // AddN
  688. INPUT_MAP(AddN) = EMPTY_INPUT_MAP;
  689. DYN_INPUT_MAP(AddN) = {{1, DYN_INPUT_DESC(x)}};
  690. ATTR_MAP(AddN) = {{"n", ATTR_DESC(N, AnyTraits<int64_t>())}};
  691. OUTPUT_MAP(AddN) = {{0, OUTPUT_DESC(y)}};
  692. // Mul
  693. INPUT_MAP(Mul) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  694. ATTR_MAP(Mul) = EMPTY_ATTR_MAP;
  695. OUTPUT_MAP(Mul) = {{0, OUTPUT_DESC(y)}};
  696. // RealDiv
  697. INPUT_MAP(RealDiv) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  698. ATTR_MAP(RealDiv) = EMPTY_ATTR_MAP;
  699. OUTPUT_MAP(RealDiv) = {{0, OUTPUT_DESC(y)}};
  700. // Cast
  701. INPUT_MAP(Cast) = {{1, INPUT_DESC(x)}};
  702. INPUT_ATTR_MAP(Cast) = {{2, ATTR_DESC(dst_type, AnyTraits<GEType>())}};
  703. ATTR_MAP(Cast) = {{"Truncate", ATTR_DESC(truncate, AnyTraits<bool>())}};
  704. OUTPUT_MAP(Cast) = {{0, OUTPUT_DESC(y)}};
  705. // Reciprocal
  706. INPUT_MAP(Reciprocal) = {{1, INPUT_DESC(x)}};
  707. ATTR_MAP(Reciprocal) = EMPTY_ATTR_MAP;
  708. OUTPUT_MAP(Reciprocal) = {{0, OUTPUT_DESC(y)}};
  709. // Sub
  710. INPUT_MAP(Sub) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  711. ATTR_MAP(Sub) = EMPTY_ATTR_MAP;
  712. OUTPUT_MAP(Sub) = {{0, OUTPUT_DESC(y)}};
  713. // SplitD
  714. INPUT_MAP(SplitD) = {{1, INPUT_DESC(x)}};
  715. ATTR_MAP(SplitD) = {{"axis", ATTR_DESC(split_dim, AnyTraits<int>())},
  716. {"output_num", ATTR_DESC(num_split, AnyTraits<int>())}};
  717. DYN_OUTPUT_MAP(SplitD) = {{0, DYN_OUTPUT_DESC(y)}};
  718. // Range
  719. INPUT_MAP(RangeD) = {{1, INPUT_DESC(x)}};
  720. ATTR_MAP(RangeD) = {{"start", ATTR_DESC(start, AnyTraits<float>())},
  721. {"limit", ATTR_DESC(limit, AnyTraits<float>())},
  722. {"delta", ATTR_DESC(delta, AnyTraits<float>())}};
  723. OUTPUT_MAP(RangeD) = {{0, OUTPUT_DESC(y)}};
  724. // Neg
  725. INPUT_MAP(Neg) = {{1, INPUT_DESC(x)}};
  726. ATTR_MAP(Neg) = EMPTY_ATTR_MAP;
  727. OUTPUT_MAP(Neg) = {{0, OUTPUT_DESC(y)}};
  728. // Transpose
  729. INPUT_MAP(TransposeD) = {{1, INPUT_DESC(x)}};
  730. INPUT_ATTR_MAP(TransposeD) = {{2, ATTR_DESC(perm, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())}};
  731. ATTR_MAP(TransposeD) = EMPTY_ATTR_MAP;
  732. // Do not set Transpose operator output descriptor
  733. // DropOutGenMask
  734. INPUT_MAP(DropOutGenMask) = {{1, INPUT_DESC(shape)}, {2, INPUT_DESC(prob)}};
  735. ATTR_MAP(DropOutGenMask) = {{"Seed0", ATTR_DESC(seed, AnyTraits<int64_t>())},
  736. {"Seed1", ATTR_DESC(seed2, AnyTraits<int64_t>())}};
  737. OUTPUT_MAP(DropOutGenMask) = {{0, OUTPUT_DESC(y)}};
  738. // Pack
  739. INPUT_MAP(Pack) = EMPTY_INPUT_MAP;
  740. DYN_INPUT_MAP(Pack) = {{1, DYN_INPUT_DESC(x)}};
  741. ATTR_MAP(Pack) = {{"num", ATTR_DESC(N, AnyTraits<int>())}, {"axis", ATTR_DESC(axis, AnyTraits<int>())}};
  742. OUTPUT_MAP(Pack) = {{0, OUTPUT_DESC(y)}};
  743. // ConcatD
  744. INPUT_MAP(ConcatD) = EMPTY_INPUT_MAP;
  745. DYN_INPUT_MAP(ConcatD) = {{1, DYN_INPUT_DESC(x)}};
  746. ATTR_MAP(ConcatD) = {
  747. {"axis", ATTR_DESC(concat_dim, AnyTraits<int>())},
  748. {"inputNums", ATTR_DESC(N, AnyTraits<int>())},
  749. };
  750. OUTPUT_MAP(ConcatD) = {{0, OUTPUT_DESC(y)}};
  751. // Less
  752. INPUT_MAP(Less) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  753. ATTR_MAP(Less) = EMPTY_ATTR_MAP;
  754. OUTPUT_MAP(Less) = {{0, OUTPUT_DESC(y)}};
  755. // Rsqrt
  756. INPUT_MAP(Rsqrt) = {{1, INPUT_DESC(x)}};
  757. ATTR_MAP(Rsqrt) = EMPTY_ATTR_MAP;
  758. OUTPUT_MAP(Rsqrt) = {{0, OUTPUT_DESC(y)}};
  759. // Sqrt
  760. INPUT_MAP(Sqrt) = {{1, INPUT_DESC(x)}};
  761. ATTR_MAP(Sqrt) = EMPTY_ATTR_MAP;
  762. OUTPUT_MAP(Sqrt) = {{0, OUTPUT_DESC(y)}};
  763. // Square
  764. INPUT_MAP(Square) = {{1, INPUT_DESC(x)}};
  765. ATTR_MAP(Square) = EMPTY_ATTR_MAP;
  766. OUTPUT_MAP(Square) = {{0, OUTPUT_DESC(y)}};
  767. // SquareSumAll
  768. INPUT_MAP(SquareSumAll) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  769. ATTR_MAP(SquareSumAll) = EMPTY_ATTR_MAP;
  770. OUTPUT_MAP(SquareSumAll) = {{0, OUTPUT_DESC(y1)}, {1, OUTPUT_DESC(y2)}};
  771. // Tanh
  772. INPUT_MAP(Tanh) = {{1, INPUT_DESC(x)}};
  773. ATTR_MAP(Tanh) = EMPTY_ATTR_MAP;
  774. OUTPUT_MAP(Tanh) = {{0, OUTPUT_DESC(y)}};
  775. // TanhGrad
  776. INPUT_MAP(TanhGrad) = {{1, INPUT_DESC(y)}, {2, INPUT_DESC(dy)}};
  777. ATTR_MAP(TanhGrad) = EMPTY_ATTR_MAP;
  778. OUTPUT_MAP(TanhGrad) = {{0, OUTPUT_DESC(z)}};
  779. // ReduceMinD
  780. INPUT_MAP(ReduceMinD) = {{1, INPUT_DESC(x)}};
  781. INPUT_ATTR_MAP(ReduceMinD) = {
  782. {2, ATTR_DESC(axes, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  783. ATTR_MAP(ReduceMinD) = {{"keep_dims", ATTR_DESC(keep_dims, AnyTraits<bool>())}};
  784. OUTPUT_MAP(ReduceMinD) = {{0, OUTPUT_DESC(y)}};
  785. // ReduceMaxD
  786. INPUT_MAP(ReduceMaxD) = {{1, INPUT_DESC(x)}};
  787. INPUT_ATTR_MAP(ReduceMaxD) = {
  788. {2, ATTR_DESC(axes, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  789. ATTR_MAP(ReduceMaxD) = {{"keep_dims", ATTR_DESC(keep_dims, AnyTraits<bool>())}};
  790. OUTPUT_MAP(ReduceMaxD) = {{0, OUTPUT_DESC(y)}};
  791. // Maximum
  792. INPUT_MAP(Maximum) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  793. ATTR_MAP(Maximum) = EMPTY_ATTR_MAP;
  794. OUTPUT_MAP(Maximum) = {{0, OUTPUT_DESC(y)}};
  795. // Minimum
  796. INPUT_MAP(Minimum) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  797. ATTR_MAP(Minimum) = EMPTY_ATTR_MAP;
  798. OUTPUT_MAP(Minimum) = {{0, OUTPUT_DESC(y)}};
  799. // MaximumGrad
  800. INPUT_MAP(MaximumGrad) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}, {3, INPUT_DESC(grads)}};
  801. ATTR_MAP(MaximumGrad) = {{"grad_x", ATTR_DESC(grad_x, AnyTraits<bool>())},
  802. {"grad_y", ATTR_DESC(grad_y, AnyTraits<bool>())}};
  803. OUTPUT_MAP(MaximumGrad) = {{0, OUTPUT_DESC(y1)}, {1, OUTPUT_DESC(y2)}};
  804. // MinimumGrad
  805. INPUT_MAP(MinimumGrad) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}, {3, INPUT_DESC(grads)}};
  806. ATTR_MAP(MinimumGrad) = {{"grad_x", ATTR_DESC(grad_x, AnyTraits<bool>())},
  807. {"grad_y", ATTR_DESC(grad_y, AnyTraits<bool>())}};
  808. OUTPUT_MAP(MinimumGrad) = {{0, OUTPUT_DESC(y1)}, {1, OUTPUT_DESC(y2)}};
  809. // Pow
  810. INPUT_MAP(Pow) = {
  811. {1, INPUT_DESC(x1)},
  812. {2, INPUT_DESC(x2)},
  813. };
  814. ATTR_MAP(Pow) = EMPTY_ATTR_MAP;
  815. OUTPUT_MAP(Pow) = {{0, OUTPUT_DESC(y)}};
  816. // Equal
  817. INPUT_MAP(Equal) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  818. ATTR_MAP(Equal) = EMPTY_ATTR_MAP;
  819. OUTPUT_MAP(Equal) = {{0, OUTPUT_DESC(y)}};
  820. // NotEqual
  821. INPUT_MAP(NotEqual) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  822. ATTR_MAP(NotEqual) = EMPTY_ATTR_MAP;
  823. OUTPUT_MAP(NotEqual) = {{0, OUTPUT_DESC(y)}};
  824. // Log
  825. INPUT_MAP(Log) = {{1, INPUT_DESC(x)}};
  826. ATTR_MAP(Log) = EMPTY_ATTR_MAP;
  827. OUTPUT_MAP(Log) = {{0, OUTPUT_DESC(y)}};
  828. // LogicalAnd
  829. INPUT_MAP(LogicalAnd) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  830. ATTR_MAP(LogicalAnd) = EMPTY_ATTR_MAP;
  831. OUTPUT_MAP(LogicalAnd) = {{0, OUTPUT_DESC(y)}};
  832. // LogicalOr
  833. INPUT_MAP(LogicalOr) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  834. ATTR_MAP(LogicalOr) = EMPTY_ATTR_MAP;
  835. OUTPUT_MAP(LogicalOr) = {{0, OUTPUT_DESC(y)}};
  836. // LogicalNot
  837. INPUT_MAP(LogicalNot) = {{1, INPUT_DESC(x)}};
  838. ATTR_MAP(LogicalNot) = EMPTY_ATTR_MAP;
  839. OUTPUT_MAP(LogicalNot) = {{0, OUTPUT_DESC(y)}};
  840. // Greater
  841. INPUT_MAP(Greater) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  842. ATTR_MAP(Greater) = EMPTY_ATTR_MAP;
  843. OUTPUT_MAP(Greater) = {{0, OUTPUT_DESC(y)}};
  844. // LogSoftmaxGrad
  845. INPUT_MAP(LogSoftmaxGrad) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(grad)}};
  846. ATTR_MAP(LogSoftmaxGrad) = {
  847. {"axis", ATTR_DESC(axis, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  848. OUTPUT_MAP(LogSoftmaxGrad) = {{0, OUTPUT_DESC(y)}};
  849. // Select
  850. INPUT_MAP(Select) = {{1, INPUT_DESC(condition)}, {2, INPUT_DESC(x1)}, {3, INPUT_DESC(x2)}};
  851. ATTR_MAP(Select) = EMPTY_ATTR_MAP;
  852. OUTPUT_MAP(Select) = {{0, OUTPUT_DESC(y)}};
  853. // LessEqual
  854. INPUT_MAP(LessEqual) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  855. ATTR_MAP(LessEqual) = EMPTY_ATTR_MAP;
  856. OUTPUT_MAP(LessEqual) = {{0, OUTPUT_DESC(y)}};
  857. // LogSoftmaxV2
  858. INPUT_MAP(LogSoftmaxV2) = {{1, INPUT_DESC(logits)}};
  859. ATTR_MAP(LogSoftmaxV2) = {
  860. {"axis", ATTR_DESC(axes, AnyTraits<std::vector<int64_t>>(), AnyTraits<std::vector<int64_t>>())}};
  861. OUTPUT_MAP(LogSoftmaxV2) = {{0, OUTPUT_DESC(logsoftmax)}};
  862. // RandomChoiceWithMask
  863. INPUT_MAP(RandomChoiceWithMask) = {{1, INPUT_DESC(x)}};
  864. ATTR_MAP(RandomChoiceWithMask) = {{"count", ATTR_DESC(count, AnyTraits<int64_t>())},
  865. {"seed", ATTR_DESC(seed, AnyTraits<int64_t>())},
  866. {"seed2", ATTR_DESC(seed2, AnyTraits<int64_t>())}};
  867. OUTPUT_MAP(RandomChoiceWithMask) = {{0, OUTPUT_DESC(y)}, {1, OUTPUT_DESC(mask)}};
  868. // TruncatedNormal
  869. INPUT_MAP(TruncatedNormal) = {{1, INPUT_DESC(shape)}};
  870. ATTR_MAP(TruncatedNormal) = {{"seed", ATTR_DESC(seed, AnyTraits<int64_t>())},
  871. {"seed2", ATTR_DESC(seed2, AnyTraits<int64_t>())}};
  872. OUTPUT_MAP(TruncatedNormal) = {{0, OUTPUT_DESC(y)}};
  873. // StridedSliceGrad
  874. INPUT_MAP(StridedSliceGrad) = {
  875. {1, INPUT_DESC(dy)}, {2, INPUT_DESC(shape)}, {3, INPUT_DESC(begin)}, {4, INPUT_DESC(end)}, {5, INPUT_DESC(strides)}};
  876. ATTR_MAP(StridedSliceGrad) = {{"begin_mask", ATTR_DESC(begin_mask, AnyTraits<int64_t>())},
  877. {"end_mask", ATTR_DESC(end_mask, AnyTraits<int64_t>())},
  878. {"ellipsis_mask", ATTR_DESC(ellipsis_mask, AnyTraits<int64_t>())},
  879. {"new_axis_mask", ATTR_DESC(new_axis_mask, AnyTraits<int64_t>())},
  880. {"shrink_axis_mask", ATTR_DESC(shrink_axis_mask, AnyTraits<int64_t>())}};
  881. OUTPUT_MAP(StridedSliceGrad) = {{0, OUTPUT_DESC(output)}};
  882. // Gelu
  883. INPUT_MAP(Gelu) = {{1, INPUT_DESC(x)}};
  884. ATTR_MAP(Gelu) = EMPTY_ATTR_MAP;
  885. OUTPUT_MAP(Gelu) = {{0, OUTPUT_DESC(y)}};
  886. // GeluGrad
  887. INPUT_MAP(GeluGrad) = {{1, INPUT_DESC(dy)}, {2, INPUT_DESC(x)}, {3, INPUT_DESC(y)}};
  888. ATTR_MAP(GeluGrad) = EMPTY_ATTR_MAP;
  889. OUTPUT_MAP(GeluGrad) = {{0, OUTPUT_DESC(z)}};
  890. // StridedSlice
  891. INPUT_MAP(StridedSlice) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(begin)}, {3, INPUT_DESC(end)}, {4, INPUT_DESC(strides)}};
  892. ATTR_MAP(StridedSlice) = {{"begin_mask", ATTR_DESC(begin_mask, AnyTraits<int64_t>())},
  893. {"end_mask", ATTR_DESC(end_mask, AnyTraits<int64_t>())},
  894. {"ellipsis_mask", ATTR_DESC(ellipsis_mask, AnyTraits<int64_t>())},
  895. {"new_axis_mask", ATTR_DESC(new_axis_mask, AnyTraits<int64_t>())},
  896. {"shrink_axis_mask", ATTR_DESC(shrink_axis_mask, AnyTraits<int64_t>())}};
  897. OUTPUT_MAP(StridedSlice) = {{0, OUTPUT_DESC(y)}};
  898. // UnsortedSegmentSum
  899. INPUT_MAP(UnsortedSegmentSumD) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(segment_ids)}};
  900. INPUT_ATTR_MAP(UnsortedSegmentSumD) = {{3, ATTR_DESC(num_segments, AnyTraits<int64_t>())}};
  901. ATTR_MAP(UnsortedSegmentSumD) = EMPTY_ATTR_MAP;
  902. OUTPUT_MAP(UnsortedSegmentSumD) = {{0, OUTPUT_DESC(y)}};
  903. // UnsortedSegmentMin
  904. INPUT_MAP(UnsortedSegmentMin) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(segment_ids)}, {3, INPUT_DESC(num_segments)}};
  905. ATTR_MAP(UnsortedSegmentMin) = EMPTY_ATTR_MAP;
  906. OUTPUT_MAP(UnsortedSegmentMin) = {{0, OUTPUT_DESC(y)}};
  907. // ExpandDims
  908. INPUT_MAP(ExpandDims) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(axis)}};
  909. ATTR_MAP(ExpandDims) = EMPTY_ATTR_MAP;
  910. OUTPUT_MAP(ExpandDims) = {{0, OUTPUT_DESC(y)}};
  911. // Squeeze
  912. INPUT_MAP(Squeeze) = {{1, INPUT_DESC(x)}};
  913. ATTR_MAP(Squeeze) = {{"axis", ATTR_DESC(axis, AnyTraits<int>(), AnyTraits<std::vector<int64_t>>())}};
  914. OUTPUT_MAP(Squeeze) = {{0, OUTPUT_DESC(y)}};
  915. // SGD
  916. INPUT_MAP(SGD) = {{1, INPUT_DESC(parameters)}, {2, INPUT_DESC(gradient)}, {3, INPUT_DESC(learning_rate)},
  917. {4, INPUT_DESC(accum)}, {5, INPUT_DESC(momentum)}, {6, INPUT_DESC(stat)}};
  918. ATTR_MAP(SGD) = {{"dampening", ATTR_DESC(dampening, AnyTraits<float>())},
  919. {"weight_decay", ATTR_DESC(weight_decay, AnyTraits<float>())},
  920. {"nesterov", ATTR_DESC(nesterov, AnyTraits<bool>())}};
  921. OUTPUT_MAP(SGD) = {{0, OUTPUT_DESC(parameters)}};
  922. // LayerNorm
  923. INPUT_MAP(LayerNorm) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(gamma)}, {3, INPUT_DESC(beta)}};
  924. ATTR_MAP(LayerNorm) = {{"begin_norm_axis", ATTR_DESC(begin_norm_axis, AnyTraits<int>())},
  925. {"begin_params_axis", ATTR_DESC(begin_params_axis, AnyTraits<int>())},
  926. {"epsilon", ATTR_DESC(epsilon, AnyTraits<float>())}};
  927. OUTPUT_MAP(LayerNorm) = {{0, OUTPUT_DESC(y)}, {1, OUTPUT_DESC(mean)}, {2, OUTPUT_DESC(variance)}};
  928. // LayerNormGrad
  929. INPUT_MAP(LayerNormGrad) = {
  930. {1, INPUT_DESC(x)}, {2, INPUT_DESC(dy)}, {3, INPUT_DESC(variance)}, {4, INPUT_DESC(mean)}, {5, INPUT_DESC(gamma)}};
  931. ATTR_MAP(LayerNormGrad) = EMPTY_ATTR_MAP;
  932. OUTPUT_MAP(LayerNormGrad) = {{0, OUTPUT_DESC(pd_x)}, {1, OUTPUT_DESC(pd_gamma)}, {2, OUTPUT_DESC(pd_beta)}};
  933. // BatchMatMul
  934. INPUT_MAP(BatchMatMul) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  935. ATTR_MAP(BatchMatMul) = {{"transpose_x1", ATTR_DESC(adj_x1, AnyTraits<bool>())},
  936. {"transpose_x2", ATTR_DESC(adj_x2, AnyTraits<bool>())}};
  937. OUTPUT_MAP(BatchMatMul) = {{0, OUTPUT_DESC(y)}};
  938. // DropoutDoMask
  939. INPUT_MAP(DropOutDoMask) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(mask)}, {3, INPUT_DESC(keep_prob)}};
  940. ATTR_MAP(DropOutDoMask) = EMPTY_ATTR_MAP;
  941. OUTPUT_MAP(DropOutDoMask) = {{0, OUTPUT_DESC(y)}};
  942. // NPUGetFloatStatus
  943. INPUT_MAP(NPUGetFloatStatus) = {{1, INPUT_DESC(addr)}};
  944. OUTPUT_MAP(NPUGetFloatStatus) = {{0, OUTPUT_DESC(data)}};
  945. ATTR_MAP(NPUGetFloatStatus) = EMPTY_ATTR_MAP;
  946. // NPUAllocFloatStatus
  947. INPUT_MAP(NPUAllocFloatStatus) = EMPTY_INPUT_MAP;
  948. ATTR_MAP(NPUAllocFloatStatus) = EMPTY_ATTR_MAP;
  949. OUTPUT_MAP(NPUAllocFloatStatus) = {{0, OUTPUT_DESC(data)}};
  950. // NPUClearFloatStatus
  951. INPUT_MAP(NPUClearFloatStatus) = {{1, INPUT_DESC(addr)}};
  952. OUTPUT_MAP(NPUClearFloatStatus) = {{0, OUTPUT_DESC(data)}};
  953. ATTR_MAP(NPUClearFloatStatus) = EMPTY_ATTR_MAP;
  954. // Abs
  955. INPUT_MAP(Abs) = {{1, INPUT_DESC(x)}};
  956. ATTR_MAP(Abs) = EMPTY_ATTR_MAP;
  957. OUTPUT_MAP(Abs) = {{0, OUTPUT_DESC(y)}};
  958. // AbsGrad
  959. INPUT_MAP(AbsGrad) = {{1, INPUT_DESC(y)}, {2, INPUT_DESC(dy)}};
  960. ATTR_MAP(AbsGrad) = EMPTY_ATTR_MAP;
  961. OUTPUT_MAP(AbsGrad) = {{0, OUTPUT_DESC(z)}};
  962. // BinaryCrossEntropy
  963. INPUT_MAP(BinaryCrossEntropy) = {{1, INPUT_DESC(x)}, {2, INPUT_DESC(y)}, {3, INPUT_DESC(weight)}};
  964. ATTR_MAP(BinaryCrossEntropy) = {{"reduction", ATTR_DESC(reduction, AnyTraits<std::string>())}};
  965. OUTPUT_MAP(BinaryCrossEntropy) = {{0, OUTPUT_DESC(output)}};
  966. // BinaryCrossEntropyGrad
  967. INPUT_MAP(BinaryCrossEntropyGrad) = {
  968. {1, INPUT_DESC(x)}, {2, INPUT_DESC(y)}, {3, INPUT_DESC(grad_output)}, {4, INPUT_DESC(weight)}};
  969. ATTR_MAP(BinaryCrossEntropyGrad) = {{"reduction", ATTR_DESC(reduction, AnyTraits<std::string>())}};
  970. OUTPUT_MAP(BinaryCrossEntropyGrad) = {{0, OUTPUT_DESC(output)}};
  971. // SparseApplyAdagradD
  972. INPUT_MAP(SparseApplyAdagradD) = {
  973. {1, INPUT_DESC(var)}, {2, INPUT_DESC(accum)}, {3, INPUT_DESC(grad)}, {4, INPUT_DESC(indices)}};
  974. ATTR_MAP(SparseApplyAdagradD) = {{"lr", ATTR_DESC(lr, AnyTraits<float>())},
  975. {"use_locking", ATTR_DESC(use_locking, AnyTraits<bool>())}};
  976. OUTPUT_MAP(SparseApplyAdagradD) = {{0, OUTPUT_DESC(var)}};
  977. // SparseApplyFtrlD
  978. INPUT_MAP(SparseApplyFtrlD) = {{1, INPUT_DESC(var)},
  979. {2, INPUT_DESC(accum)},
  980. {3, INPUT_DESC(linear)},
  981. {4, INPUT_DESC(grad)},
  982. {5, INPUT_DESC(indices)}};
  983. ATTR_MAP(SparseApplyFtrlD) = {{"use_locking", ATTR_DESC(use_locking, AnyTraits<bool>())},
  984. {"lr", ATTR_DESC(lr, AnyTraits<float>())},
  985. {"l1", ATTR_DESC(l1, AnyTraits<float>())},
  986. {"l2", ATTR_DESC(l2, AnyTraits<float>())},
  987. {"lr_power", ATTR_DESC(lr_power, AnyTraits<float>())}};
  988. OUTPUT_MAP(SparseApplyFtrlD) = {{0, OUTPUT_DESC(var)}};
  989. // SpaceToDepth
  990. INPUT_MAP(SpaceToDepth) = {{1, INPUT_DESC(x)}};
  991. ATTR_MAP(SpaceToDepth) = {{"block_size", ATTR_DESC(block_size, AnyTraits<int64_t>())}};
  992. OUTPUT_MAP(SpaceToDepth) = {{0, OUTPUT_DESC(y)}};
  993. // DepthToSpace
  994. INPUT_MAP(DepthToSpace) = {{1, INPUT_DESC(x)}};
  995. ATTR_MAP(DepthToSpace) = {{"block_size", ATTR_DESC(block_size, AnyTraits<int64_t>())}};
  996. OUTPUT_MAP(DepthToSpace) = {{0, OUTPUT_DESC(y)}};
  997. // Sign
  998. INPUT_MAP(Sign) = {{1, INPUT_DESC(x)}};
  999. ATTR_MAP(Sign) = EMPTY_ATTR_MAP;
  1000. OUTPUT_MAP(Sign) = {{0, OUTPUT_DESC(y)}};
  1001. // Round
  1002. INPUT_MAP(Round) = {{1, INPUT_DESC(x)}};
  1003. ATTR_MAP(Round) = EMPTY_ATTR_MAP;
  1004. OUTPUT_MAP(Round) = {{0, OUTPUT_DESC(y)}};
  1005. // ApplyFtrl
  1006. INPUT_MAP(ApplyFtrl) = {{1, INPUT_DESC(var)}, {2, INPUT_DESC(accum)}, {3, INPUT_DESC(linear)},
  1007. {4, INPUT_DESC(grad)}, {5, INPUT_DESC(lr)}, {6, INPUT_DESC(l1)},
  1008. {7, INPUT_DESC(l2)}, {8, INPUT_DESC(lr_power)}};
  1009. ATTR_MAP(ApplyFtrl) = {{"use_locking", ATTR_DESC(use_locking, AnyTraits<bool>())}};
  1010. OUTPUT_MAP(ApplyFtrl) = {{0, OUTPUT_DESC(var)}};
  1011. // Diag
  1012. INPUT_MAP(Diag) = {{1, INPUT_DESC(x)}};
  1013. ATTR_MAP(Diag) = EMPTY_ATTR_MAP;
  1014. OUTPUT_MAP(Diag) = {{0, OUTPUT_DESC(y)}};
  1015. // DiagPart
  1016. INPUT_MAP(DiagPart) = {{1, INPUT_DESC(x)}};
  1017. ATTR_MAP(DiagPart) = EMPTY_ATTR_MAP;
  1018. OUTPUT_MAP(DiagPart) = {{0, OUTPUT_DESC(y)}};
  1019. // SpaceToBatchD
  1020. INPUT_MAP(SpaceToBatchD) = {{1, INPUT_DESC(x)}};
  1021. ATTR_MAP(SpaceToBatchD) = {
  1022. {"block_size", ATTR_DESC(block_size, AnyTraits<int64_t>())},
  1023. {"paddings", ATTR_DESC(paddings, AnyTraits<std::vector<std::vector<int64_t>>>(), AnyTraits<std::vector<int64_t>>())}};
  1024. OUTPUT_MAP(SpaceToBatchD) = {{0, OUTPUT_DESC(y)}};
  1025. // BatchToSpaceD
  1026. INPUT_MAP(BatchToSpaceD) = {{1, INPUT_DESC(x)}};
  1027. ATTR_MAP(BatchToSpaceD) = {
  1028. {"block_size", ATTR_DESC(block_size, AnyTraits<int64_t>())},
  1029. {"crops", ATTR_DESC(crops, AnyTraits<std::vector<std::vector<int64_t>>>(), AnyTraits<std::vector<int64_t>>())}};
  1030. OUTPUT_MAP(BatchToSpaceD) = {{0, OUTPUT_DESC(y)}};
  1031. // Atan2
  1032. INPUT_MAP(Atan2) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
  1033. ATTR_MAP(Atan2) = EMPTY_ATTR_MAP;
  1034. OUTPUT_MAP(Atan2) = {{0, OUTPUT_DESC(y)}};
  1035. // ApplyRMSPropD
  1036. INPUT_MAP(ApplyRMSPropD) = {
  1037. {1, INPUT_DESC(var)}, {2, INPUT_DESC(ms)}, {3, INPUT_DESC(mom)}, {4, INPUT_DESC(grad)}, {5, INPUT_DESC(lr)}};
  1038. INPUT_ATTR_MAP(ApplyRMSPropD) = {{6, ATTR_DESC(rho, AnyTraits<float>())},
  1039. {7, ATTR_DESC(momentum, AnyTraits<float>())},
  1040. {8, ATTR_DESC(epsilon, AnyTraits<float>())}};
  1041. ATTR_MAP(ApplyRMSPropD) = {{"use_locking", ATTR_DESC(use_locking, AnyTraits<bool>())}};
  1042. OUTPUT_MAP(ApplyRMSPropD) = {{0, OUTPUT_DESC(var)}};
  1043. // ApplyCenteredRMSProp
  1044. INPUT_MAP(ApplyCenteredRMSProp) = {{1, INPUT_DESC(var)}, {2, INPUT_DESC(mg)}, {3, INPUT_DESC(ms)},
  1045. {4, INPUT_DESC(mom)}, {5, INPUT_DESC(grad)}, {6, INPUT_DESC(lr)},
  1046. {7, INPUT_DESC(rho)}, {8, INPUT_DESC(momentum)}, {9, INPUT_DESC(epsilon)}};
  1047. ATTR_MAP(ApplyCenteredRMSProp) = {{"use_locking", ATTR_DESC(use_locking, AnyTraits<bool>())}};
  1048. OUTPUT_MAP(ApplyCenteredRMSProp) = {{0, OUTPUT_DESC(var)}};
  1049. // L2Loss
  1050. INPUT_MAP(L2Loss) = {{1, INPUT_DESC(x)}};
  1051. ATTR_MAP(L2Loss) = EMPTY_ATTR_MAP;
  1052. OUTPUT_MAP(L2Loss) = {{0, OUTPUT_DESC(y)}};
  1053. // CTCLoss
  1054. INPUT_MAP(CTCLoss) = {{1, INPUT_DESC(inputs)},
  1055. {2, INPUT_DESC(labels_indices)},
  1056. {3, INPUT_DESC(labels_values)},
  1057. {4, INPUT_DESC(sequence_length)}};
  1058. ATTR_MAP(CTCLoss) = {
  1059. {"preprocess_collapse_repeated", ATTR_DESC(preprocess_collapse_repeated, AnyTraits<bool>())},
  1060. {"ctc_merge_repeated", ATTR_DESC(ctc_merge_repeated, AnyTraits<bool>())},
  1061. {"ignore_longer_outputs_than_inputs", ATTR_DESC(ignore_longer_outputs_than_inputs, AnyTraits<bool>())}};
  1062. OUTPUT_MAP(CTCLoss) = {{0, OUTPUT_DESC(loss)}, {1, OUTPUT_DESC(gradient)}};
  1063. #ifdef ENABLE_GE
  1064. // Print
  1065. INPUT_MAP(Print) = EMPTY_INPUT_MAP;
  1066. DYN_INPUT_MAP(Print) = {{1, DYN_INPUT_DESC(x)}};
  1067. ATTR_MAP(Print) = EMPTY_ATTR_MAP;
  1068. #endif
  1069. } // namespace transform
  1070. } // namespace mindspore