torch.nn.functional.affine_grid¶
- torch.nn.functional.affine_grid(theta, size, align_corners=None)[源代码]¶
给定仿射矩阵
theta
的批次,生成 2D 或 3D 流场(采样网格)。注意
此函数通常与
grid_sample()
结合使用来构建 空间变换网络 。- 参数
theta (张量) – 仿射矩阵的输入批次,形状为 () 用于 2D 或 () 用于 3D
size (torch.Size) – 目标输出图像大小。 ( 用于 2D 或 用于 3D) 例如:torch.Size((32, 3, 24, 24))
align_corners (布尔值,可选) – 如果为
True
,则将-1
和1
视为角像素的中心,而不是图像的角。有关更完整的说明,请参阅grid_sample()
。由affine_grid()
生成的网格应以相同设置传递到grid_sample()
。默认值:False
- 返回值
输出张量大小为 ()
- 返回类型
输出 (Tensor)
警告
当
align_corners = True
时,网格位置取决于像素大小相对于输入图像大小,因此由grid_sample()
采样的位置将因不同分辨率的相同输入而异(即,在经过上采样或下采样后)。直到版本 1.2.0 的默认行为是align_corners = True
。从那时起,默认行为已更改为align_corners = False
,以使其与interpolate()
的默认行为保持一致。警告
当
align_corners = True
时,对 1D 数据的 2D 仿射变换和对 2D 数据的 3D 仿射变换(即,当其中一个空间维度大小为 1 时)定义不明确,并且不是预期的用例。当align_corners = False
时,这不是问题。在版本 1.2.0 之前,单位维度上的所有网格点都被任意认为是-1
。从版本 1.3.0 开始,在align_corners = True
下,单位维度上的所有网格点都被认为是0
(输入图像的中心)。