評價此頁

torch.Tensor.to#

Tensor.to(*args, **kwargs) Tensor#

執行 Tensor 的 dtype 和/或 device 轉換。 torch.dtypetorch.device 是從 self.to(*args, **kwargs) 的引數推斷出來的。

注意

如果 self Tensor 已經具有正確的 torch.dtypetorch.device,則返回 self。否則,返回的 Tensor 是 self 的副本,具有所需的 torch.dtypetorch.device

注意

如果 self 需要梯度(requires_grad=True),但指定的 dtype 是整數型別,則返回的 Tensor 將隱式設定 requires_grad=False。這是因為只有具有浮點數或複數 dtype 的 Tensor 才能需要梯度。

以下是呼叫 to 的方式:

to(dtype, non_blocking=False, copy=False, memory_format=torch.preserve_format) Tensor

返回一個具有指定 dtype 的 Tensor。

引數 (Args)

memory_format (torch.memory_format, optional): 返回的 Tensor 的期望記憶體格式。預設值:torch.preserve_format

注意

根據 C++ 型別轉換規則,將浮點值轉換為整數型別時會截斷小數部分。如果截斷後的值無法裝入目標型別(例如,將 torch.inf 轉換為 torch.long),則行為未定義,結果可能因平臺而異。

torch.to(device=None, dtype=None, non_blocking=False, copy=False, memory_format=torch.preserve_format) Tensor

返回一個具有指定 device 和(可選的)dtype 的 Tensor。如果 dtypeNone,則推斷為 self.dtype。當 non_blocking 設定為 True 時,該函式會嘗試與主機進行非同步轉換(如果可能)。這種非同步行為適用於固定記憶體和分頁記憶體。但使用此功能時需謹慎。有關更多資訊,請參閱 關於 non_blocking 和 pin_memory 的最佳實踐教程。當 copy 設定為 True 時,即使 Tensor 已滿足期望的轉換,也會建立一個新 Tensor。

引數 (Args)

memory_format (torch.memory_format, optional): 返回的 Tensor 的期望記憶體格式。預設值:torch.preserve_format

torch.to(other, non_blocking=False, copy=False) Tensor

返回一個與 Tensor other 具有相同 torch.dtypetorch.device 的 Tensor。當 non_blocking 設定為 True 時,該函式會嘗試與主機進行非同步轉換(如果可能)。這種非同步行為適用於固定記憶體和分頁記憶體。但使用此功能時需謹慎。有關更多資訊,請參閱 關於 non_blocking 和 pin_memory 的最佳實踐教程。當 copy 設定為 True 時,即使 Tensor 已滿足期望的轉換,也會建立一個新 Tensor。

示例

>>> tensor = torch.randn(2, 2)  # Initially dtype=float32, device=cpu
>>> tensor.to(torch.float64)
tensor([[-0.5044,  0.0005],
        [ 0.3310, -0.0584]], dtype=torch.float64)

>>> cuda0 = torch.device('cuda:0')
>>> tensor.to(cuda0)
tensor([[-0.5044,  0.0005],
        [ 0.3310, -0.0584]], device='cuda:0')

>>> tensor.to(cuda0, dtype=torch.float64)
tensor([[-0.5044,  0.0005],
        [ 0.3310, -0.0584]], dtype=torch.float64, device='cuda:0')

>>> other = torch.randn((), dtype=torch.float64, device=cuda0)
>>> tensor.to(other, non_blocking=True)
tensor([[-0.5044,  0.0005],
        [ 0.3310, -0.0584]], dtype=torch.float64, device='cuda:0')