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, 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 仿射變換(也就是,當其中一個空間維度的大小為單位大小時)是不明確的,也不是預期的使用案例。當align_corners = False
時,這不是問題。在 1.2.0 版本之前,沿著單位維度的所有網格點都被任意地認為是在-1
。從 1.3.0 版本開始,在align_corners = True
下,沿著單位維度的所有網格點都被認為是在0
(輸入影像的中心)。