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