tvm
Loading...
Searching...
No Matches
nn.h
Go to the documentation of this file.
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
24#ifndef TVM_RELAX_ATTRS_NN_H_
25#define TVM_RELAX_ATTRS_NN_H_
26
27#include <tvm/relax/expr.h>
28
29namespace tvm {
30namespace relax {
31
33struct Conv1DAttrs : public AttrsNode {
34 ffi::Array<int64_t> strides;
35 ffi::Array<int64_t> padding;
36 ffi::Array<int64_t> dilation;
37 int groups;
38 ffi::String data_layout;
39 ffi::String kernel_layout;
40 ffi::String out_layout;
41 ffi::Optional<DLDataType> out_dtype;
42
43 static void RegisterReflection() {
44 namespace refl = tvm::ffi::reflection;
45 refl::ObjectDef<Conv1DAttrs>()
46 .def_ro("strides", &Conv1DAttrs::strides, "Specifies the strides of the convolution.")
47 .def_ro("padding", &Conv1DAttrs::padding,
48 "If padding is non-zero, then the input is implicitly zero-padded"
49 "Padding support both symmetric and asymmetric as"
50 "one int : same padding used on both sides"
51 "two int : padding width in the order of (left, right)")
52 .def_ro("dilation", &Conv1DAttrs::dilation,
53 "Specifies the dilation rate to use for dilated convolution.")
54 .def_ro("groups", &Conv1DAttrs::groups,
55 "Number of groups to split the input into for grouped convolution. The number of "
56 "input and "
57 "output channels should be divisible by the number of groups.")
58 .def_ro("data_layout", &Conv1DAttrs::data_layout,
59 "Dimension ordering of input data. Can be 'NCW', 'NWC', etc."
60 "'N', 'C', 'W' stands for batch, channel, width"
61 "dimensions respectively. Convolution is applied on the 'W' dimensions.")
62 .def_ro("kernel_layout", &Conv1DAttrs::kernel_layout,
63 "Dimension ordering of weight. Can be 'OIW', 'IOW', etc."
64 "'O', 'I', 'W' stands for num_filter, input_channel, and width"
65 "dimensions respectively.")
66 .def_ro("out_layout", &Conv1DAttrs::out_layout,
67 "Dimension ordering of output. Can be 'NCW', 'NWC', etc."
68 "'N', 'C', 'W' stands for batch, channel, and width"
69 "dimensions respectively. Default to be same as input layout.")
70 .def_ro("out_dtype", &Conv1DAttrs::out_dtype,
71 "Output data type, set to explicit type under mixed precision setting");
72 }
74}; // struct Conv1dAttrs
75
77struct Conv2DAttrs : public AttrsNode {
78 ffi::Array<int64_t> strides;
79 ffi::Array<int64_t> padding;
80 ffi::Array<int64_t> dilation;
81 int groups;
82 ffi::String data_layout;
83 ffi::String kernel_layout;
84 ffi::String out_layout;
85 ffi::Optional<DLDataType> out_dtype;
86
87 static void RegisterReflection() {
88 namespace refl = tvm::ffi::reflection;
89 refl::ObjectDef<Conv2DAttrs>()
90 .def_ro("strides", &Conv2DAttrs::strides, "Specifies the strides of the convolution.")
91 .def_ro("padding", &Conv2DAttrs::padding,
92 "If padding is non-zero, then the input is implicitly zero-padded"
93 "Padding support both symmetric and asymmetric as"
94 "one int : same padding used on all sides"
95 "two int : bottom, right will use same padding as top, left"
96 "four int : padding width in the order of (top, left, bottom, right)")
97 .def_ro("dilation", &Conv2DAttrs::dilation,
98 "Specifies the dilation rate to use for dilated convolution.")
99 .def_ro("groups", &Conv2DAttrs::groups,
100 "Number of groups to split the input into for grouped convolution. The number of "
101 "input and "
102 "output channels should be divisible by the number of groups.")
103 .def_ro("data_layout", &Conv2DAttrs::data_layout,
104 "Dimension ordering of input data. Can be 'NCHW', 'NHWC', etc."
105 "'N', 'C', 'H', 'W' stands for batch, channel, height, and width"
106 "dimensions respectively. Convolution is applied on the 'H' and"
107 "'W' dimensions.")
108 .def_ro("kernel_layout", &Conv2DAttrs::kernel_layout,
109 "Dimension ordering of weight. Can be 'OIHW', 'OIHW16o16i', etc."
110 "'O', 'I', 'H', 'W' stands for num_filter, input_channel, height, and width"
111 "dimensions respectively.")
112 .def_ro("out_layout", &Conv2DAttrs::out_layout,
113 "Dimension ordering of output. Can be 'NCHW', 'NHWC', etc."
114 "'N', 'C', 'H', 'W' stands for batch, channel, height, and width"
115 "dimensions respectively. Default to be same as input layout.")
116 .def_ro("out_dtype", &Conv2DAttrs::out_dtype,
117 "Output data type, set to explicit type under mixed precision setting");
118 }
120}; // struct Conv2dAttrs
121
123struct Conv3DAttrs : public AttrsNode {
124 ffi::Array<int64_t> strides;
125 ffi::Array<int64_t> padding;
126 ffi::Array<int64_t> dilation;
128 ffi::String data_layout;
129 ffi::String kernel_layout;
130 ffi::String out_layout;
131 ffi::Optional<DLDataType> out_dtype;
132
133 static void RegisterReflection() {
134 namespace refl = tvm::ffi::reflection;
135 refl::ObjectDef<Conv3DAttrs>()
136 .def_ro("strides", &Conv3DAttrs::strides, "Specifies the strides of the convolution.")
137 .def_ro(
138 "padding", &Conv3DAttrs::padding,
139 "If padding is non-zero, then the input is implicitly zero-padded"
140 "Padding support both symmetric and asymmetric as"
141 "one int : same padding used on all sides"
142 "two int : bottom, right will use same padding as top, left"
143 "four int : padding width in the order of (forward, back, top, left, bottom, right)")
144 .def_ro("dilation", &Conv3DAttrs::dilation,
145 "Specifies the dilation rate to use for dilated convolution.")
146 .def_ro("groups", &Conv3DAttrs::groups,
147 "Number of groups to split the input into for grouped convolution. The number of "
148 "input and "
149 "output channels should be divisible by the number of groups.")
150 .def_ro("data_layout", &Conv3DAttrs::data_layout,
151 "Dimension ordering of input data. Can be 'NCDHW', 'NDHWC', etc."
152 "'N', 'C', 'D', 'H', 'W' stands for batch, channel, depth, height, and width"
153 "dimensions respectively. Convolution is applied on the 'D', 'H', and"
154 "'W' dimensions.")
155 .def_ro(
156 "kernel_layout", &Conv3DAttrs::kernel_layout,
157 "Dimension ordering of weight. Can be 'OIDHW', 'OIDHW16o16i', etc."
158 "'O', 'I', 'D', 'H', 'W' stands for num_filter, input_channel, depth, height, and width"
159 "dimensions respectively.")
160 .def_ro("out_layout", &Conv3DAttrs::out_layout,
161 "Dimension ordering of output. Can be 'NCDHW', 'NDHWC', etc."
162 "'N', 'C', 'D', 'H', 'W' stands for batch, channel, depth, height, and width"
163 "dimensions respectively. Default to be same as input layout.")
164 .def_ro("out_dtype", &Conv3DAttrs::out_dtype,
165 "Output data type, set to explicit type under mixed precision setting");
166 }
168}; // struct Conv3dAttrs
169
172 ffi::Array<int64_t> strides;
173 ffi::Array<int64_t> padding;
174 ffi::Array<int64_t> output_padding;
175 ffi::Array<int64_t> dilation;
177 ffi::String data_layout;
178 ffi::String kernel_layout;
179 ffi::String out_layout;
180 ffi::Optional<DLDataType> out_dtype;
181
182 static void RegisterReflection() {
183 namespace refl = tvm::ffi::reflection;
184 refl::ObjectDef<Conv1DTransposeAttrs>()
185 .def_ro("strides", &Conv1DTransposeAttrs::strides,
186 "Specifies the strides of the convolution.")
187 .def_ro("padding", &Conv1DTransposeAttrs::padding,
188 "If padding is non-zero, then the input is implicitly zero-padded"
189 "Padding support both symmetric and asymmetric as"
190 "one int : same padding used on both sides"
191 "two int : padding width in the order of (left, right)")
192 .def_ro("output_padding", &Conv1DTransposeAttrs::output_padding,
193 "Used to disambiguate the output shape.")
194 .def_ro("dilation", &Conv1DTransposeAttrs::dilation,
195 "Specifies the dilation rate to use for dilated convolution.")
196 .def_ro("groups", &Conv1DTransposeAttrs::groups,
197 "Number of groups to split the input into for grouped convolution. The number of "
198 "input and "
199 "output channels should be divisible by the number of groups.")
200 .def_ro("data_layout", &Conv1DTransposeAttrs::data_layout,
201 "Dimension ordering of input data. Can be 'NCW', 'NWC', etc."
202 "'N', 'C', 'W' stands for batch, channel, width"
203 "dimensions respectively. Convolution is applied on the 'W' dimensions.")
204 .def_ro("kernel_layout", &Conv1DTransposeAttrs::kernel_layout,
205 "Dimension ordering of weight. Can be 'OIW', 'IOW', etc."
206 "'O', 'I', 'W' stands for num_filter, input_channel, and width"
207 "dimensions respectively.")
208 .def_ro("out_layout", &Conv1DTransposeAttrs::out_layout,
209 "Dimension ordering of output. Can be 'NCW', 'NWC', etc."
210 "'N', 'C', 'W' stands for batch, channel, and width"
211 "dimensions respectively. Default to be same as input layout.")
212 .def_ro("out_dtype", &Conv1DTransposeAttrs::out_dtype,
213 "Output data type, set to explicit type under mixed precision setting");
214 }
215 TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Conv1DTransposeAttrs", Conv1DTransposeAttrs,
216 AttrsNode);
217}; // struct Conv1DTransposeAttrs
218
221 ffi::Array<int64_t> strides;
222 ffi::Array<int64_t> padding;
223 ffi::Array<int64_t> output_padding;
224 ffi::Array<int64_t> dilation;
226 ffi::String data_layout;
227 ffi::String kernel_layout;
228 ffi::String out_layout;
229 ffi::Optional<DLDataType> out_dtype;
230
231 static void RegisterReflection() {
232 namespace refl = tvm::ffi::reflection;
233 refl::ObjectDef<Conv2DTransposeAttrs>()
234 .def_ro("strides", &Conv2DTransposeAttrs::strides,
235 "Specifies the strides of the convolution.")
236 .def_ro("padding", &Conv2DTransposeAttrs::padding,
237 "If padding is non-zero, then the input is implicitly zero-padded"
238 "Padding support both symmetric and asymmetric as"
239 "one int : same padding used on all sides"
240 "two int : bottom, right will use same padding as top, left"
241 "four int : padding width in the order of (top, left, bottom, right)")
242 .def_ro("output_padding", &Conv2DTransposeAttrs::output_padding,
243 "Used to disambiguate the output shape.")
244 .def_ro("dilation", &Conv2DTransposeAttrs::dilation,
245 "Specifies the dilation rate to use for dilated convolution.")
246 .def_ro("groups", &Conv2DTransposeAttrs::groups,
247 "Number of groups to split the input into for grouped convolution. The number of "
248 "input and "
249 "output channels should be divisible by the number of groups.")
250 .def_ro("data_layout", &Conv2DTransposeAttrs::data_layout,
251 "Dimension ordering of input data. Can be 'NCHW', 'NHWC', etc."
252 "'N', 'C', 'H', 'W' stands for batch, channel, height, and width"
253 "dimensions respectively. Convolution is applied on the 'H' and"
254 "'W' dimensions.")
255 .def_ro("kernel_layout", &Conv2DTransposeAttrs::kernel_layout,
256 "Dimension ordering of weight. Can be 'OIHW', 'OIHW16o16i', etc."
257 "'O', 'I', 'H', 'W' stands for num_filter, input_channel, height, and width"
258 "dimensions respectively.")
259 .def_ro("out_layout", &Conv2DTransposeAttrs::out_layout,
260 "Dimension ordering of output. Can be 'NCHW', 'NHWC', etc."
261 "'N', 'C', 'H', 'W' stands for batch, channel, height, and width"
262 "dimensions respectively. Default to be same as input layout.")
263 .def_ro("out_dtype", &Conv2DTransposeAttrs::out_dtype,
264 "Output data type, set to explicit type under mixed precision setting");
265 }
266 TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Conv2DTransposeAttrs", Conv2DTransposeAttrs,
267 AttrsNode);
268}; // struct Conv2DTransposeAttrs
269
272 ffi::Array<int64_t> strides;
273 ffi::Array<int64_t> padding;
274 ffi::Array<int64_t> output_padding;
275 ffi::Array<int64_t> dilation;
277 ffi::String data_layout;
278 ffi::String kernel_layout;
279 ffi::String out_layout;
280 ffi::Optional<DLDataType> out_dtype;
281
282 static void RegisterReflection() {
283 namespace refl = tvm::ffi::reflection;
284 refl::ObjectDef<Conv3DTransposeAttrs>()
285 .def_ro("strides", &Conv3DTransposeAttrs::strides,
286 "Specifies the strides of the convolution.")
287 .def_ro("padding", &Conv3DTransposeAttrs::padding,
288 "If padding is non-zero, then the input is implicitly zero-padded"
289 "Padding support both symmetric and asymmetric as"
290 "one int : same padding used on all sides"
291 "three int : back/bottom/right will use same padding as front/top/left"
292 "six int : padding width in the order of (front, top, left, back, bottom, right)")
293 .def_ro("output_padding", &Conv3DTransposeAttrs::output_padding,
294 "Used to disambiguate the output shape.")
295 .def_ro("dilation", &Conv3DTransposeAttrs::dilation,
296 "Specifies the dilation rate to use for dilated convolution.")
297 .def_ro("groups", &Conv3DTransposeAttrs::groups,
298 "Number of groups to split the input into for grouped convolution. The number of "
299 "input and "
300 "output channels should be divisible by the number of groups.")
301 .def_ro("data_layout", &Conv3DTransposeAttrs::data_layout,
302 "Dimension ordering of input data. Can be 'NCDHW', 'NDHWC', etc."
303 "'N', 'C', 'D', 'H', 'W' stands for batch, channel, depth, height, and width"
304 "dimensions respectively. Convolution is applied on the 'D', 'H', and"
305 "'W' dimensions.")
306 .def_ro(
307 "kernel_layout", &Conv3DTransposeAttrs::kernel_layout,
308 "Dimension ordering of weight. Can be 'IODHW', etc."
309 "'I', 'O', 'D', 'H', 'W' stands for input_channel, output_channel, depth, height, and "
310 "width"
311 "dimensions respectively.")
312 .def_ro("out_layout", &Conv3DTransposeAttrs::out_layout,
313 "Dimension ordering of output. Can be 'NCDHW', 'NDHWC', etc."
314 "'N', 'C', 'D', 'H', 'W' stands for batch, channel, depth, height, and width"
315 "dimensions respectively. Default to be same as input layout.")
316 .def_ro("out_dtype", &Conv3DTransposeAttrs::out_dtype,
317 "Output data type, set to explicit type under mixed precision setting");
318 }
319 TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Conv3DTransposeAttrs", Conv3DTransposeAttrs,
320 AttrsNode);
321}; // struct Conv3DTransposeAttrs
322
324struct Pool1DAttrs : public AttrsNode {
325 ffi::Array<int64_t> pool_size;
326 ffi::Array<int64_t> strides;
327 ffi::Array<int64_t> padding;
328 ffi::Array<int64_t> dilation;
331 ffi::String layout;
332 ffi::String out_layout;
333
334 static void RegisterReflection() {
335 namespace refl = tvm::ffi::reflection;
336 refl::ObjectDef<Pool1DAttrs>()
337 .def_ro("pool_size", &Pool1DAttrs::pool_size, "Size of the pooling windows.")
338 .def_ro("strides", &Pool1DAttrs::strides, "Specifies the strides of the convolution.")
339 .def_ro("dilation", &Pool1DAttrs::dilation, "Specifies the dilation of the convolution.")
340 .def_ro("padding", &Pool1DAttrs::padding,
341 "If padding is non-zero, then the input is implicitly zero-padded"
342 "Padding support both symmetric and asymmetric as"
343 "one int : same padding used on all sides"
344 "two int : padding width in the order of (left, right)")
345 .def_ro(
346 "ceil_mode", &Pool1DAttrs::ceil_mode,
347 "A boolean indicating if use ceil or floor to compute the output shape. By using ceil, "
348 "every element in the input tensor will be covered by a sliding window.")
349 .def_ro("count_include_pad", &Pool1DAttrs::count_include_pad,
350 "When true, will include padding to compute the average")
351 .def_ro("layout", &Pool1DAttrs::layout,
352 "Dimension ordering of input data. Can be 'NCW', 'NWC', etc."
353 "'N', 'C', 'W' stands for batch, channel, and width"
354 "dimensions respectively. Pooling is applied on the 'W' dimensions.",
355 refl::DefaultValue("NCW"))
356 .def_ro("out_layout", &Pool1DAttrs::out_layout,
357 "Dimension ordering of output data. Can be 'NCW', 'NWC', etc."
358 "'N', 'C', 'W' stands for batch, channel, and width"
359 "dimensions respectively. Pooling is applied on the 'W' dimensions.");
360 }
362}; // struct Pool1dAttrs
363
365struct Pool2DAttrs : public AttrsNode {
366 ffi::Array<int64_t> pool_size;
367 ffi::Array<int64_t> strides;
368 ffi::Array<int64_t> padding;
369 ffi::Array<int64_t> dilation;
372 ffi::String layout;
373 ffi::String out_layout;
374
375 static void RegisterReflection() {
376 namespace refl = tvm::ffi::reflection;
377 refl::ObjectDef<Pool2DAttrs>()
378 .def_ro("pool_size", &Pool2DAttrs::pool_size, "Size of the pooling windows.")
379 .def_ro("strides", &Pool2DAttrs::strides, "Specifies the strides of the convolution.")
380 .def_ro("dilation", &Pool2DAttrs::dilation, "Specifies the dilation of the convolution.")
381 .def_ro("padding", &Pool2DAttrs::padding,
382 "If padding is non-zero, then the input is implicitly zero-padded"
383 "Padding support both symmetric and asymmetric as"
384 "one int : same padding used on all sides"
385 "two int : bottom, right will use same padding as top, left"
386 "four int : padding width in the order of (top, left, bottom, right)")
387 .def_ro(
388 "ceil_mode", &Pool2DAttrs::ceil_mode,
389 "A boolean indicating if use ceil or floor to compute the output shape. By using ceil, "
390 "every element in the input tensor will be covered by a sliding window.")
391 .def_ro("count_include_pad", &Pool2DAttrs::count_include_pad,
392 "When true, will include padding to compute the average")
393 .def_ro("layout", &Pool2DAttrs::layout,
394 "Dimension ordering of input data. Can be 'NCHW', 'NHWC', etc."
395 "'N', 'C', 'H', 'W' stands for batch, channel, height, and width"
396 "dimensions respectively. Pooling is applied on the 'H' and"
397 "'W' dimensions.")
398 .def_ro("out_layout", &Pool2DAttrs::out_layout,
399 "Dimension ordering of output data. Can be 'NCHW', 'NHWC', etc."
400 "'N', 'C', 'H', 'W' stands for batch, channel, height, and width"
401 "dimensions respectively. Pooling is applied on the 'H' and"
402 "'W' dimensions.");
403 }
405}; // struct Pool2dAttrs
406
408struct Pool3DAttrs : public AttrsNode {
409 ffi::Array<int64_t> pool_size;
410 ffi::Array<int64_t> strides;
411 ffi::Array<int64_t> padding;
412 ffi::Array<int64_t> dilation;
415 ffi::String layout;
416 ffi::String out_layout;
417
418 static void RegisterReflection() {
419 namespace refl = tvm::ffi::reflection;
420 refl::ObjectDef<Pool3DAttrs>()
421 .def_ro("pool_size", &Pool3DAttrs::pool_size, "Size of the pooling windows.")
422 .def_ro("strides", &Pool3DAttrs::strides, "Specifies the strides of the convolution.")
423 .def_ro("dilation", &Pool3DAttrs::dilation, "Specifies the dilation of the convolution.")
424 .def_ro("padding", &Pool3DAttrs::padding,
425 "If padding is non-zero, then the input is implicitly zero-padded"
426 "Padding support both symmetric and asymmetric as"
427 "one int : same padding used on all sides"
428 "three int : back, bottom, right will use same padding as front, top, left"
429 "four int : padding width in the order of (front, top, left, back, bottom, right)")
430 .def_ro(
431 "ceil_mode", &Pool3DAttrs::ceil_mode,
432 "A boolean indicating if use ceil or floor to compute the output shape. By using ceil, "
433 "every element in the input tensor will be covered by a sliding window.")
434 .def_ro("count_include_pad", &Pool3DAttrs::count_include_pad,
435 "When true, will include padding to compute the average")
436 .def_ro("layout", &Pool3DAttrs::layout,
437 "Dimension ordering of input data. Can be 'NCDHW', 'NDHWC', etc."
438 "'N', 'C', 'D', 'H', 'W' stands for batch, channel, depth, height, and width"
439 "dimensions respectively. Pooling is applied on the 'D', 'H' and"
440 "'W' dimensions.")
441 .def_ro("out_layout", &Pool3DAttrs::out_layout,
442 "Dimension ordering of output data. Can be 'NCDHW', 'NDHWC', etc."
443 "'N', 'C', 'D', 'H', 'W' stands for batch, channel, depth, height, and width"
444 "dimensions respectively. Pooling is applied on the 'D', 'H' and"
445 "'W' dimensions.");
446 }
448}; // struct Pool3dAttrs
449
452 ffi::Optional<ffi::Array<int64_t>> output_size;
453 ffi::String layout;
454 ffi::String out_layout;
455
456 static void RegisterReflection() {
457 namespace refl = tvm::ffi::reflection;
458 refl::ObjectDef<AdaptivePool1DAttrs>()
459 .def_ro("output_size", &AdaptivePool1DAttrs::output_size, "Output width.")
460 .def_ro("layout", &AdaptivePool1DAttrs::layout,
461 "Dimension ordering of input data. Can be 'NCW', 'NWC', etc."
462 "'N', 'C', 'W' stands for batch, channel and width"
463 "dimensions respectively. Pooling is applied on the"
464 "'W' dimensions.")
465 .def_ro("out_layout", &AdaptivePool1DAttrs::out_layout,
466 "Dimension ordering of output data. Can be 'NCW', 'NWC', etc."
467 "'N', 'C', 'W' stands for batch, channel and width"
468 "dimensions respectively. Pooling is applied on the"
469 "'W' dimensions.");
470 }
471 TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.AdaptivePool1DAttrs", AdaptivePool1DAttrs,
472 AttrsNode);
473}; // struct AdaptivePool1DAttrs
474
477 ffi::Optional<ffi::Array<int64_t>> output_size;
478 ffi::String layout;
479 ffi::String out_layout;
480
481 static void RegisterReflection() {
482 namespace refl = tvm::ffi::reflection;
483 refl::ObjectDef<AdaptivePool2DAttrs>()
484 .def_ro("output_size", &AdaptivePool2DAttrs::output_size, "Output height and width.")
485 .def_ro("layout", &AdaptivePool2DAttrs::layout,
486 "Dimension ordering of input data. Can be 'NCHW', 'NHWC', etc."
487 "'N', 'C', 'H', 'W' stands for batch, channel, height, and width"
488 "dimensions respectively. Pooling is applied on the 'H' and"
489 "'W' dimensions.")
490 .def_ro("out_layout", &AdaptivePool2DAttrs::out_layout,
491 "Dimension ordering of output data. Can be 'NCHW', 'NHWC', etc."
492 "'N', 'C', 'H', 'W' stands for batch, channel, height, and width"
493 "dimensions respectively. Pooling is applied on the 'H' and"
494 "'W' dimensions.");
495 }
496 TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.AdaptivePool2DAttrs", AdaptivePool2DAttrs,
497 AttrsNode);
498}; // struct AdaptivePool2DAttrs
499
502 ffi::Optional<ffi::Array<int64_t>> output_size;
503 ffi::String layout;
504 ffi::String out_layout;
505
506 static void RegisterReflection() {
507 namespace refl = tvm::ffi::reflection;
508 refl::ObjectDef<AdaptivePool3DAttrs>()
509 .def_ro("output_size", &AdaptivePool3DAttrs::output_size, "Output depth, height and width.")
510 .def_ro("layout", &AdaptivePool3DAttrs::layout,
511 "Dimension ordering of input data. Can be 'NCDHW', 'NDHWC', etc."
512 "'N', 'C', 'D', 'H', 'W' stands for batch, channel, depth, height, and width"
513 "dimensions respectively. Pooling is applied on 'D', 'H' and"
514 "'W' dimensions.")
515 .def_ro("out_layout", &AdaptivePool3DAttrs::out_layout,
516 "Dimension ordering of output data. Can be 'NCDHW', 'NDHWC', etc."
517 "'N', 'C', 'D', 'H', 'W' stands for batch, channel, depth, height, and width"
518 "dimensions respectively. Pooling is applied on 'D', 'H' and"
519 "'W' dimensions.");
520 }
521 TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.AdaptivePool3DAttrs", AdaptivePool3DAttrs,
522 AttrsNode);
523}; // struct AdaptivePool3DAttrs
524
526struct SoftmaxAttrs : public AttrsNode {
527 int axis;
528
529 static void RegisterReflection() {
530 namespace refl = tvm::ffi::reflection;
531 refl::ObjectDef<SoftmaxAttrs>().def_ro("axis", &SoftmaxAttrs::axis,
532 "The axis to sum over when computing softmax.");
533 }
535};
536
538struct LeakyReluAttrs : public AttrsNode {
539 double alpha;
540
541 static void RegisterReflection() {
542 namespace refl = tvm::ffi::reflection;
543 refl::ObjectDef<LeakyReluAttrs>().def_ro("alpha", &LeakyReluAttrs::alpha,
544 "The slope of the negative part.");
545 }
547};
548
550struct SoftplusAttrs : public AttrsNode {
551 double beta;
552 double threshold;
553
554 static void RegisterReflection() {
555 namespace refl = tvm::ffi::reflection;
556 refl::ObjectDef<SoftplusAttrs>()
557 .def_ro("beta", &SoftplusAttrs::beta,
558 "Scaling factor controlling the sharpness of the Softplus transition.")
559 .def_ro("threshold", &SoftplusAttrs::threshold,
560 "Value determining when to use linear approximation for numerical stability.");
561 }
563};
564
566struct PReluAttrs : public AttrsNode {
567 int axis;
568
569 static void RegisterReflection() {
570 namespace refl = tvm::ffi::reflection;
571 refl::ObjectDef<PReluAttrs>().def_ro("axis", &PReluAttrs::axis,
572 "The axis along which the alpha values are applied.");
573 }
575};
576
578struct BatchNormAttrs : public AttrsNode {
579 int axis;
580 double epsilon;
581 bool center;
582 bool scale;
583 double momentum;
585
586 static void RegisterReflection() {
587 namespace refl = tvm::ffi::reflection;
588 refl::ObjectDef<BatchNormAttrs>()
589 .def_ro("axis", &BatchNormAttrs::axis, "The axis along which the normalization is applied.")
590 .def_ro("epsilon", &BatchNormAttrs::epsilon,
591 "Small float added to variance to avoid dividing by zero")
592 .def_ro("center", &BatchNormAttrs::center,
593 "Indicating if the beta offset will be added to the normalized tensor.")
594 .def_ro("scale", &BatchNormAttrs::scale,
595 "Indicating if the gamma scale will be multiplied.")
596 .def_ro("momentum", &BatchNormAttrs::momentum,
597 "The value used for the moving_mean and moving_var update.")
598 .def_ro("training", &BatchNormAttrs::training,
599 "Whether we are training (i.e., not in eval mode).");
600 }
602}; // struct BatchNormAttrs
603
605struct LayerNormAttrs : public AttrsNode {
606 ffi::Array<int64_t> axes;
607 double epsilon;
608 bool center;
609 bool scale;
610
611 static void RegisterReflection() {
612 namespace refl = tvm::ffi::reflection;
613 refl::ObjectDef<LayerNormAttrs>()
614 .def_ro("axes", &LayerNormAttrs::axes,
615 "The axes that along which the normalization is applied.")
616 .def_ro("epsilon", &LayerNormAttrs::epsilon,
617 "Small float added to variance to avoid dividing by zero")
618 .def_ro("center", &LayerNormAttrs::center,
619 "Indicating if the beta offset will be added to the normalized tensor.")
620 .def_ro("scale", &LayerNormAttrs::scale,
621 "Indicating if the gamma scale will be multiplied.");
622 }
624}; // struct LayerNormAttrs
625
627struct GroupNormAttrs : public AttrsNode {
630 ffi::Array<int64_t> axes;
631 double epsilon;
632 bool center;
633 bool scale;
634
635 static void RegisterReflection() {
636 namespace refl = tvm::ffi::reflection;
637 refl::ObjectDef<GroupNormAttrs>()
638 .def_ro("num_groups", &GroupNormAttrs::num_groups,
639 "The number of groups to separate the channels into.")
640 .def_ro("channel_axis", &GroupNormAttrs::channel_axis,
641 "The axis that represents the channel.")
642 .def_ro(
643 "axes", &GroupNormAttrs::axes,
644 "The axes that along which the normalization is applied (excluding the channel axis).")
645 .def_ro("epsilon", &GroupNormAttrs::epsilon,
646 "Small float added to variance to avoid dividing by zero")
647 .def_ro("center", &GroupNormAttrs::center,
648 "Indicating if the beta offset will be added to the normalized tensor.")
649 .def_ro("scale", &GroupNormAttrs::scale,
650 "Indicating if the gamma scale will be multiplied.");
651 }
653}; // struct GroupNormAttrs
654
658 ffi::Array<int64_t> axes;
659 double epsilon;
660 bool center;
661 bool scale;
662
663 static void RegisterReflection() {
664 namespace refl = tvm::ffi::reflection;
665 refl::ObjectDef<InstanceNormAttrs>()
666 .def_ro("channel_axis", &InstanceNormAttrs::channel_axis,
667 "The axis that represents the channel.")
668 .def_ro("axes", &InstanceNormAttrs::axes,
669 "The axes that along which the normalization is applied.")
670 .def_ro("epsilon", &InstanceNormAttrs::epsilon,
671 "Small float added to variance to avoid dividing by zero")
672 .def_ro("center", &InstanceNormAttrs::center,
673 "Indicating if the beta offset will be added to the normalized tensor.")
674 .def_ro("scale", &InstanceNormAttrs::scale,
675 "Indicating if the gamma scale will be multiplied.");
676 }
678}; // struct InstanceNormAttrs
679
681struct RMSNormAttrs : public AttrsNode {
682 ffi::Array<int64_t> axes;
683 double epsilon;
684
685 static void RegisterReflection() {
686 namespace refl = tvm::ffi::reflection;
687 refl::ObjectDef<RMSNormAttrs>()
688 .def_ro("axes", &RMSNormAttrs::axes,
689 "The axes that along which the normalization is applied.")
690 .def_ro("epsilon", &RMSNormAttrs::epsilon,
691 "Small float added to variance to avoid dividing by zero");
692 }
694}; // struct RMSNormAttrs
695
697struct NLLLossAttrs : public AttrsNode {
698 ffi::String reduction;
700
701 static void RegisterReflection() {
702 namespace refl = tvm::ffi::reflection;
703 refl::ObjectDef<NLLLossAttrs>()
704 .def_ro("reduction", &NLLLossAttrs::reduction,
705 "The reduction method to apply to the output. Can be"
706 "'none', 'mean' or 'sum'.",
707 refl::DefaultValue("mean"))
708 .def_ro("ignore_index", &NLLLossAttrs::ignore_index, "The target value to ignore.");
709 }
711}; // struct NLLLossAttrs
712
714struct DropoutAttrs : public AttrsNode {
715 double rate;
716
717 static void RegisterReflection() {
718 namespace refl = tvm::ffi::reflection;
719 refl::ObjectDef<DropoutAttrs>().def_ro(
720 "rate", &DropoutAttrs::rate,
721 "Fraction of the input that gets dropped out during training time");
722 }
724}; // struct DropoutAttrs
725
727struct AttentionAttrs : public AttrsNode {
728 ffi::Optional<FloatImm> scale;
729 ffi::Optional<ffi::String> causal_mask;
730 ffi::Optional<IntImm> window_size;
731
732 static void RegisterReflection() {
733 namespace refl = tvm::ffi::reflection;
734 refl::ObjectDef<AttentionAttrs>()
735 .def_ro(
736 "scale", &AttentionAttrs::scale,
737 "The custom scale applied before the softmax. The default value is 1 / sqrt(head_dim).")
738 .def_ro("causal_mask", &AttentionAttrs::causal_mask,
739 "The type of the causal mask, i.e. 'TopLeft' and 'BottomRight'.")
740 .def_ro("window_size", &AttentionAttrs::window_size,
741 "The size of the window for sliding-window attention.");
742 }
744}; // struct AttentionAttrs
745
747struct PadAttrs : public AttrsNode {
748 ffi::Array<int64_t> pad_width;
749 double pad_value = 0.0;
750 tvm::ffi::String pad_mode;
751
752 static void RegisterReflection() {
753 namespace refl = tvm::ffi::reflection;
754 refl::ObjectDef<PadAttrs>()
755 .def_ro("pad_width", &PadAttrs::pad_width,
756 "Number of values padded to the edges of each axis, "
757 "in the format of (before_1, after_1, ..., before_N, after_N)")
758 .def_ro("pad_value", &PadAttrs::pad_value, "The value to fill in padded area with",
759 refl::DefaultValue(0.0))
760 .def_ro("pad_mode", &PadAttrs::pad_mode,
761 "Padding type to use. \"constant\" pads with constant_value, "
762 "\"edge\" pads using the edge values of the input array, "
763 "\"reflect\" pads by reflecting values with respect to the edges.",
764 refl::DefaultValue("constant"));
765 }
767};
768
772
773 static void RegisterReflection() {
774 namespace refl = tvm::ffi::reflection;
775 refl::ObjectDef<PixelShuffleAttrs>().def_ro("upscale_factor",
777 "Scale factor for spatial upsampling.");
778 }
780};
781
782} // namespace relax
783} // namespace tvm
784
785#endif // TVM_RELAX_ATTRS_NN_H_
Base class of all attribute class.
Definition attrs.h:49
RAII wrapper function to enter and exit a context object similar to python's with syntax.
Definition with_context.h:59
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition analyzer.h:40
Attributes for 1d adaptive pool operator.
Definition nn.h:451
ffi::String out_layout
Definition nn.h:454
ffi::Optional< ffi::Array< int64_t > > output_size
Definition nn.h:452
ffi::String layout
Definition nn.h:453
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.AdaptivePool1DAttrs", AdaptivePool1DAttrs, AttrsNode)
static void RegisterReflection()
Definition nn.h:456
Attributes for 2d adaptive pool operator.
Definition nn.h:476
ffi::Optional< ffi::Array< int64_t > > output_size
Definition nn.h:477
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.AdaptivePool2DAttrs", AdaptivePool2DAttrs, AttrsNode)
static void RegisterReflection()
Definition nn.h:481
ffi::String out_layout
Definition nn.h:479
ffi::String layout
Definition nn.h:478
Attributes for 3d adaptive pool operator.
Definition nn.h:501
ffi::Optional< ffi::Array< int64_t > > output_size
Definition nn.h:502
static void RegisterReflection()
Definition nn.h:506
ffi::String layout
Definition nn.h:503
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.AdaptivePool3DAttrs", AdaptivePool3DAttrs, AttrsNode)
ffi::String out_layout
Definition nn.h:504
Attributes used in Attention operator.
Definition nn.h:727
ffi::Optional< IntImm > window_size
Definition nn.h:730
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.AttentionAttrs", AttentionAttrs, AttrsNode)
ffi::Optional< FloatImm > scale
Definition nn.h:728
ffi::Optional< ffi::String > causal_mask
Definition nn.h:729
static void RegisterReflection()
Definition nn.h:732
Attributes used in batch_norm operator.
Definition nn.h:578
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.BatchNormAttrs", BatchNormAttrs, AttrsNode)
bool training
Definition nn.h:584
bool scale
Definition nn.h:582
static void RegisterReflection()
Definition nn.h:586
double epsilon
Definition nn.h:580
int axis
Definition nn.h:579
double momentum
Definition nn.h:583
bool center
Definition nn.h:581
Attributes used in Conv1d operator.
Definition nn.h:33
ffi::String out_layout
Definition nn.h:40
ffi::Array< int64_t > strides
Definition nn.h:34
ffi::Array< int64_t > dilation
Definition nn.h:36
int groups
Definition nn.h:37
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Conv1DAttrs", Conv1DAttrs, AttrsNode)
ffi::Optional< DLDataType > out_dtype
Definition nn.h:41
ffi::String data_layout
Definition nn.h:38
static void RegisterReflection()
Definition nn.h:43
ffi::Array< int64_t > padding
Definition nn.h:35
ffi::String kernel_layout
Definition nn.h:39
Attributes used in Conv1DTranspose operator.
Definition nn.h:171
ffi::String data_layout
Definition nn.h:177
static void RegisterReflection()
Definition nn.h:182
ffi::Array< int64_t > dilation
Definition nn.h:175
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Conv1DTransposeAttrs", Conv1DTransposeAttrs, AttrsNode)
ffi::Optional< DLDataType > out_dtype
Definition nn.h:180
ffi::Array< int64_t > output_padding
Definition nn.h:174
ffi::String out_layout
Definition nn.h:179
ffi::Array< int64_t > strides
Definition nn.h:172
ffi::Array< int64_t > padding
Definition nn.h:173
int groups
Definition nn.h:176
ffi::String kernel_layout
Definition nn.h:178
Attributes used in Conv2d operator.
Definition nn.h:77
ffi::String out_layout
Definition nn.h:84
ffi::Array< int64_t > strides
Definition nn.h:78
ffi::Array< int64_t > dilation
Definition nn.h:80
ffi::String kernel_layout
Definition nn.h:83
static void RegisterReflection()
Definition nn.h:87
ffi::Optional< DLDataType > out_dtype
Definition nn.h:85
int groups
Definition nn.h:81
ffi::String data_layout
Definition nn.h:82
ffi::Array< int64_t > padding
Definition nn.h:79
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Conv2DAttrs", Conv2DAttrs, AttrsNode)
Attributes used in Conv2d operator.
Definition nn.h:220
ffi::String kernel_layout
Definition nn.h:227
ffi::Optional< DLDataType > out_dtype
Definition nn.h:229
ffi::Array< int64_t > dilation
Definition nn.h:224
ffi::String data_layout
Definition nn.h:226
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Conv2DTransposeAttrs", Conv2DTransposeAttrs, AttrsNode)
ffi::Array< int64_t > padding
Definition nn.h:222
int groups
Definition nn.h:225
ffi::Array< int64_t > strides
Definition nn.h:221
ffi::Array< int64_t > output_padding
Definition nn.h:223
ffi::String out_layout
Definition nn.h:228
static void RegisterReflection()
Definition nn.h:231
Attributes used in Conv3d operator.
Definition nn.h:123
ffi::String kernel_layout
Definition nn.h:129
ffi::String out_layout
Definition nn.h:130
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Conv3DAttrs", Conv3DAttrs, AttrsNode)
ffi::Array< int64_t > strides
Definition nn.h:124
static void RegisterReflection()
Definition nn.h:133
ffi::Array< int64_t > dilation
Definition nn.h:126
ffi::Optional< DLDataType > out_dtype
Definition nn.h:131
ffi::String data_layout
Definition nn.h:128
ffi::Array< int64_t > padding
Definition nn.h:125
int groups
Definition nn.h:127
Attributes used in Conv3dTranspose operator.
Definition nn.h:271
ffi::String out_layout
Definition nn.h:279
ffi::Array< int64_t > padding
Definition nn.h:273
ffi::Array< int64_t > strides
Definition nn.h:272
ffi::Array< int64_t > dilation
Definition nn.h:275
int groups
Definition nn.h:276
static void RegisterReflection()
Definition nn.h:282
ffi::String data_layout
Definition nn.h:277
ffi::String kernel_layout
Definition nn.h:278
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Conv3DTransposeAttrs", Conv3DTransposeAttrs, AttrsNode)
ffi::Array< int64_t > output_padding
Definition nn.h:274
ffi::Optional< DLDataType > out_dtype
Definition nn.h:280
Attributes used in dropout operator.
Definition nn.h:714
double rate
Definition nn.h:715
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.DropoutAttrs", DropoutAttrs, AttrsNode)
static void RegisterReflection()
Definition nn.h:717
Attributes used in group_norm operator.
Definition nn.h:627
ffi::Array< int64_t > axes
Definition nn.h:630
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.GroupNormAttrs", GroupNormAttrs, AttrsNode)
int num_groups
Definition nn.h:628
int channel_axis
Definition nn.h:629
double epsilon
Definition nn.h:631
bool center
Definition nn.h:632
static void RegisterReflection()
Definition nn.h:635
bool scale
Definition nn.h:633
Attributes used in instance_norm operator.
Definition nn.h:656
bool center
Definition nn.h:660
double epsilon
Definition nn.h:659
bool scale
Definition nn.h:661
static void RegisterReflection()
Definition nn.h:663
ffi::Array< int64_t > axes
Definition nn.h:658
int channel_axis
Definition nn.h:657
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.InstanceNormAttrs", InstanceNormAttrs, AttrsNode)
Attributes used in layer_norm operator.
Definition nn.h:605
bool scale
Definition nn.h:609
static void RegisterReflection()
Definition nn.h:611
bool center
Definition nn.h:608
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.LayerNormAttrs", LayerNormAttrs, AttrsNode)
ffi::Array< int64_t > axes
Definition nn.h:606
double epsilon
Definition nn.h:607
Attributes used in softmax operators.
Definition nn.h:538
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.LeakyReluAttrs", LeakyReluAttrs, AttrsNode)
static void RegisterReflection()
Definition nn.h:541
double alpha
Definition nn.h:539
Attributes used in nll_loss operator.
Definition nn.h:697
static void RegisterReflection()
Definition nn.h:701
ffi::String reduction
Definition nn.h:698
int ignore_index
Definition nn.h:699
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.NLLLossAttrs", NLLLossAttrs, AttrsNode)
Attributes used in PReLU operator.
Definition nn.h:566
static void RegisterReflection()
Definition nn.h:569
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.PReluAttrs", PReluAttrs, AttrsNode)
int axis
Definition nn.h:567
Attributes used for the padding operator.
Definition nn.h:747
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.PadAttrs", PadAttrs, AttrsNode)
tvm::ffi::String pad_mode
Definition nn.h:750
ffi::Array< int64_t > pad_width
Definition nn.h:748
double pad_value
Definition nn.h:749
static void RegisterReflection()
Definition nn.h:752
Attributes used for the pixel shuffle operator.
Definition nn.h:770
int upscale_factor
Definition nn.h:771
static void RegisterReflection()
Definition nn.h:773
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.PixelShuffleAttrs", PixelShuffleAttrs, AttrsNode)
Attributes used in max_pool1d and avg_pool1d operator.
Definition nn.h:324
ffi::Array< int64_t > strides
Definition nn.h:326
ffi::Array< int64_t > dilation
Definition nn.h:328
static void RegisterReflection()
Definition nn.h:334
ffi::Array< int64_t > pool_size
Definition nn.h:325
ffi::String layout
Definition nn.h:331
ffi::Array< int64_t > padding
Definition nn.h:327
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Pool1DAttrs", Pool1DAttrs, AttrsNode)
bool count_include_pad
Definition nn.h:330
ffi::String out_layout
Definition nn.h:332
bool ceil_mode
Definition nn.h:329
Attributes used in max_pool2d and avg_pool2d operator.
Definition nn.h:365
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Pool2DAttrs", Pool2DAttrs, AttrsNode)
ffi::Array< int64_t > pool_size
Definition nn.h:366
static void RegisterReflection()
Definition nn.h:375
bool count_include_pad
Definition nn.h:371
ffi::Array< int64_t > dilation
Definition nn.h:369
ffi::String out_layout
Definition nn.h:373
ffi::Array< int64_t > padding
Definition nn.h:368
bool ceil_mode
Definition nn.h:370
ffi::Array< int64_t > strides
Definition nn.h:367
ffi::String layout
Definition nn.h:372
Attributes used in max_pool3d and avg_pool3d operator.
Definition nn.h:408
ffi::Array< int64_t > strides
Definition nn.h:410
bool ceil_mode
Definition nn.h:413
ffi::String out_layout
Definition nn.h:416
ffi::String layout
Definition nn.h:415
static void RegisterReflection()
Definition nn.h:418
bool count_include_pad
Definition nn.h:414
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.Pool3DAttrs", Pool3DAttrs, AttrsNode)
ffi::Array< int64_t > dilation
Definition nn.h:412
ffi::Array< int64_t > padding
Definition nn.h:411
ffi::Array< int64_t > pool_size
Definition nn.h:409
Attributes used in rms_norm operator.
Definition nn.h:681
ffi::Array< int64_t > axes
Definition nn.h:682
double epsilon
Definition nn.h:683
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.RMSNormAttrs", RMSNormAttrs, AttrsNode)
static void RegisterReflection()
Definition nn.h:685
Attributes used in softmax operators.
Definition nn.h:526
int axis
Definition nn.h:527
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.SoftmaxAttrs", SoftmaxAttrs, AttrsNode)
static void RegisterReflection()
Definition nn.h:529
Attributes used in softplus operators.
Definition nn.h:550
double threshold
Definition nn.h:552
double beta
Definition nn.h:551
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.attrs.SoftplusAttrs", SoftplusAttrs, AttrsNode)
static void RegisterReflection()
Definition nn.h:554