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