mindspore.mint.nn.functional.interpolate
- mindspore.mint.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None)[源代码]
按照给定的 size 或 scale_factor 根据 mode 设置的插值方式,对输入 input 进行插值。
警告
这是一个实验性API,后续可能修改或删除。
说明
在linear模式下, align_corners`为False时不支持 `scale_factor 。
在nearest模式下,在输入为3-D/4-D Tensor图像按 scale_factor 进行缩放的场景中可能存在精度问题.
mode 和 recompute_scale_factor 只能为常量。
- 参数:
input (Tensor) - 被调整大小的Tensor。输入向量必须为三维,四维或五维,shape为 \((N, C, [optional D], [optional H], W)\) ,数据类型为float。
size (Union[int, tuple[int], list[int]], 可选) - 目标大小。如果 size 为tuple或list,那么其长度应该和 input 去掉 N, C 的维度相同。 size 和 scale_factor 同时只能指定一个。默认值:
None
。scale_factor (Union[float, tuple[float], list[float]],可选) - 每个维度的缩放系数。如果 scale_factor 为tuple或list,那么其长度应该和 input 去掉 N, C 的维度相同。 size 和 scale_factor 同时只能指定一个。默认值:
None
。mode (str) - 采样算法。以下采样方式的一种,'nearest'(最近邻插值), 'linear' (线性插值,仅三维),'bilinear' (双线性插值,仅四维),'trilinear'(三线性插值,仅五维),'bicubic' (双三次插值,仅四维)。默认值:
"nearest"
。align_corners (bool) - 是否使用角对齐进行坐标映射。假设对输入Tensor沿x轴进行变换,具体计算公式如下:
ori_i = new_length != 1 ? new_i * (ori_length - 1) / (new_length - 1) : 0 # 'align_corners' 为 True ori_i = new_length > 1 ? (new_i + 0.5) * ori_length / new_length - 0.5 : 0 # 'align_corners' 为 False
其中, \(ori\_length\) 与 \(new\_length\) 分别表示Tensor在x轴方向上转换前、后的长度, \(new\_i\) 表示转换后沿x轴第i个元素的坐标, \(ori\_i\) 表示沿x轴原始数据的对应坐标。
此选项只对
'linear'
、'bilinear'
和'bicubic'
模式有效,默认值:False
。recompute_scale_factor (bool, 可选) - 重计算 scale_factor 。如果为True,会使用参数 scale_factor 计算参数 size,最终使用 size 的值进行缩放。如果为False,将使用 size 或 scale_factor 直接进行插值。默认值:
None
。
参数支持列表和支持平台:
mode
input.dim
align_corners
scale_factor
device
nearest
3
-
√
Ascend
4
-
√
Ascend
5
-
√
Ascend
linear
3
√
√
Ascend
bilinear
4
√
×
Ascend
bicubic
4
√
×
Ascend
trilinear
5
√
√
Ascend
- 表示无此参数。
× 表示当前不支持此参数。
√ 表示当前支持此参数。
- 返回:
采样后的Tensor,维度和数据类型与 input 相同。
- Shape:
输入: \((N, C, W_{in})\), \((N, C, H_{in}, W_{in})\) 或 \((N, C, D_{in}, H_{in}, W_{in})\) 输出: \((N, C, W_{out})\), \((N, C, H_{out}, W_{out})\) 或 \((N, C, D_{out}, H_{out}, W_{out})\), 其中
\[D_{out} = \left\lfloor D_{in} \times \text{scale\_factor} \right\rfloor\]\[H_{out} = \left\lfloor H_{in} \times \text{scale\_factor} \right\rfloor\]\[W_{out} = \left\lfloor W_{in} \times \text{scale\_factor} \right\rfloor\]- 异常:
TypeError - input 不是Tensor。
ValueError - size 和 scale_factor 都不为空。
ValueError - size 和 scale_factor 都为空。
ValueError - size 为元组或列表类型时长度不等于 input.ndim - 2 。
ValueError - scale_factor 为元组或列表类型时长度不等于 input.ndim - 2 。
ValueError - mode 不在模式支持列表中。
ValueError - input.ndim 不在模式对应维度的支持列表中。
ValueError - size 不为空, recompute_scale_factor 不为空。
ValueError - scale_factor 不在对应的支持列表中。
ValueError - align_corners 不在对应的支持列表中。
- 支持平台:
Ascend
样例:
>>> import mindspore >>> from mindspore import Tensor, mint >>> input = Tensor([[[1, 2, 3], [4, 5, 6]]], mindspore.float32) >>> output = mint.interpolate(input, size=(6,), mode='nearest') >>> print(output) [[[1. 1. 2. 2. 3. 3.] [4. 4. 5. 5. 6. 6.]]]