基础性后端
速览
名称 | 初始化:键值/类型/默认值 | 前向输入:键值/类型 | 前向输出:键值/类型 | 功能 | 备注 |
---|---|---|---|---|---|
Identity | 无 | data/any | result/any | dict["result"]=dict["data"] | 默认后端 |
Sequential | Sequential::backend | data/any | |||
Jump | jump | 跳转到其他(根)节点 | |||
Range | Range::backend ;range | data/any | from v0.3.3b2 |
后端展开规则
对于后端配置,部分后端有进行展开的能力,比如,对于backend=A[B]
, 可展开为
backend=A
"A::backend"=B
Identity
什么都不做,只是将输入赋值给输出。
Sequential
具体示例参见Sequential。
初始化
Sequential::backend
可以指定以逗号分开的多个子后端,如Sequential::backend=A,B,C[D],E
.
Sequential
对子后端以展开规则进行展开后得到:
backend=E
backend=C
C::backend=D
backend=B
backend=A
子后端的初始化将按照逆序进行。
Sequential
可复合使用,如:
S[S[DecodeTensor,ResizeTensor],(or)S[DecodeMat,ResizeMat,Mat2Tensor,SyncTensor],SyncTensor]
.
Sequential的子后端可能有重复的情况,此时如果需要对子后端指定不同的参数,可以使用|
符号:
backend="Sequential[a,b,Jump,c,Jump]"
jump="||node_name_1||node_name_2"
# 或者,任意的占位符都是可以的:
# jump="a|b|node_name_1|c|node_name_2"
前向
前向时将串行执行子后端;如果非最后的子后端的结果为空,则中止执行,抛出异常;如果非最后的子后端的结果非空,将执行filter. 默认为swap
.
输入范围
如果子后端输入数据范围都是[1,1], 那么Sequential
的范围是[1,1], 否则,是输入范围非[1,1]的子后端的输入范围的并集. 目前只允许最多有一个子后端满足max() != 1 && max() != UINT32_MAX
. 在Sequential中,目前只允许最多放一个输入范围非平凡的子后端,这个子后端可以认为是整个Sequential的主要的功能实现者,其他后端是辅助或者功能性后端。
Range
设定新的最大最小范围 [target_min, target_max]。
使用动态规划来确定 [target_min, target_max] 范围内的所有整数 'target' 是否可以表示为 Range::backend
的 [min, max] 范围内的多个数字之和,并提供可能的最大值结果。
初始化
- range - 目标 [min, max]。例如,
range="1,10"
。 - Range::backend - 代理的后端。
如果新的范围无法被旧的范围中的范围表示,则初始化失败。例如,range=[10,10], [min, max]=[2,9]
=> 10 = 8+2
。
而以下情况会失败:range=[10,10], [min, max]=[8,8]
=> 10 != 8
。