torch.nn.functional.affine_grid¶
- torch.nn.functional.affine_grid(theta, size, align_corners=None)[source][source]¶
根据一批仿射矩阵生成 2D 或 3D 流场(采样网格)
theta
。注意
此函数常与
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 的大小为 ( )
- 返回类型:
输出(张量)
警告
当
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
(输入图像的中心)。