我搜索了PyTorch 文档,但找不到任何.to()将张量移动到 CPU 或 CUDA 内存的内容。
我记得在某处看到调用to()ann.Module是一个就地操作,但不是张量。
Tensors有就地版本吗?
我在哪里可以找到to()两者nn.Module和Tensor(可能还有其他地方)的 doco ?
Uma*_*pta 14
您已经找到了文档!伟大的。
.to不是张量的就地操作。但是,如果不需要移动,它会返回相同的张量。
In [10]: a = torch.rand(10)
In [11]: b = a.to(torch.device("cuda"))
In [12]: b is a
Out[12]: False
In [18]: c = b.to(torch.device("cuda"))
In [19]: c is b
Out[19]: True
Run Code Online (Sandbox Code Playgroud)
由于b已经在 gpu 上,因此没有进行任何更改并c is b导致True.
然而,对于模型,它是一个就地操作,它也返回一个模型。
In [8]: import torch
In [9]: model = torch.nn.Sequential (torch.nn.Linear(10,10))
In [10]: model_new = model.to(torch.device("cuda"))
In [11]: model_new is model
Out[11]: True
Run Code Online (Sandbox Code Playgroud)
将其保留在模型中是有意义的,因为模型的参数需要移动到另一个设备而不是model对象。对于张量,似乎创建了新对象。
我仍在学习浏览文档站点(搜索不是很好)。
这是我发现的:
torch.Tensor.to()张量版本要么返回:
self 如果张量已经是目标格式,或者,没有列出就地版本。
torch.nn.Module.to()该文档暗示这是一个就地操作:
移动和/或转换参数和缓冲区。
| 归档时间: |
|
| 查看次数: |
11434 次 |
| 最近记录: |