mindspore.Symbol
- class mindspore.Symbol(max=0, min=1, divisor=1, remainder=0, unique=False, **kawgs)[源代码]
符号,用来传递张量形状的符号信息(symbolic shape)的数据结构。
对于动态shape网络,相比只设置 shape 的未知维度(
None
),提供未知维度的数学符号信息能帮助框架更好地优化计算图,提高网络执行性能。- 参数:
max (int) - 最大值,表示此维度的最大长度。只有当它大于 min 值时才有效。默认值:
0
。min (int) - 最小值,表示此维度的最小长度,要求是正数。默认值:
1
。divisor (int) - 约数 \(d\) 。默认值:
1
。remainder (int) - 余数 \(r\)。与 divisor 一起表示符号值为 \(d*N+r\),其中 \(N \ge 1\)。 默认值:
0
。unique (bool) - 符号具有唯一值。当这个 Symbol 对象被 Tensor 多次引用时,如果 unique 为
True
,表示用到这个 Symbol 对象的维度的长度都相等;否则表示只共享符号信息,不一定相等。默认值:False
。
- 输出:
Symbol。
- 异常:
TypeError - 如果 max 、 min 、 divisor 、 remainder 不是整数。
TypeError - 如果 unique 不是布尔值。
ValueError - 如果 min 不是正数。
ValueError - 如果 divisor 不是正数。
ValueError - 如果 remainder 不在区间 \([0, d)\) 内。
样例:
>>> import numpy as np >>> import mindspore as ms >>> from mindspore import nn, Tensor, Symbol >>> >>> class Net(nn.Cell): ... def __init__(self): ... super(Net, self).__init__() ... self.abs = ms.ops.Abs() ... def construct(self, x): ... return self.abs(x) ... >>> net = Net() >>> s1 = Symbol(divisor=8, remainder=1) >>> s2 = Symbol(max=32, unique=True) >>> dyn_t = Tensor(shape=(None, s1, s1, s2, s2), dtype=ms.float32) >>> net.set_inputs(dyn_t) >>> # the shape values of last two dimensions must be equal, because "s2" is set to "unique" >>> net(Tensor(np.random.randn(1, 9, 17, 32, 32), dtype=ms.float32)).shape (1, 9, 17, 32, 32) >>> net(Tensor(np.random.randn(8, 25, 9, 30, 30), dtype=ms.float32)).shape (8, 25, 9, 30, 30)