torch.Tensor.to#
- Tensor.to(*args, **kwargs) Tensor#
執行 Tensor 的 dtype 和/或 device 轉換。
torch.dtype和torch.device是從self.to(*args, **kwargs)的引數推斷出來的。注意
如果
selfTensor 已經具有正確的torch.dtype和torch.device,則返回self。否則,返回的 Tensor 是self的副本,具有所需的torch.dtype和torch.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。如果dtype為None,則推斷為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.dtype和torch.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')