vai*_*ijr 0 python pytorch tensor
x = torch.tensor([3])
Run Code Online (Sandbox Code Playgroud)
我有张量对象
print(x)
Run Code Online (Sandbox Code Playgroud)
它给
tensor([3])
x.data[0]
给出tensor(3)
如何得到公正3
?
pro*_*sti 20
x.item()
总是有效的:示例:CPU 上的单元素张量
x = torch.tensor([3])
x.item()
Run Code Online (Sandbox Code Playgroud)
输出:
3
Run Code Online (Sandbox Code Playgroud)
示例:带有 AD 的 CPU 上的单元素张量
x = torch.tensor([3.], requires_grad=True)
x.item()
Run Code Online (Sandbox Code Playgroud)
输出:
3.0
Run Code Online (Sandbox Code Playgroud)
注意:我们需要对 AD 使用浮点运算
示例:CUDA 上的单元素张量
3
Run Code Online (Sandbox Code Playgroud)
输出:
3
Run Code Online (Sandbox Code Playgroud)
示例:带有 AD 的 CUDA 上的单元素张量
x = torch.tensor([3.], requires_grad=True)
x.item()
Run Code Online (Sandbox Code Playgroud)
输出:
3.0
Run Code Online (Sandbox Code Playgroud)
示例:再次使用 AD 在 CUDA 上的单元素张量
3.0
Run Code Online (Sandbox Code Playgroud)
输出:
1.0
Run Code Online (Sandbox Code Playgroud)
下一个示例将显示驻留在 CPU 上的 PyTorch 张量与 numpy 数组共享相同的存储 na
示例:共享存储
import torch
a = torch.ones((1,2))
print(a)
na = a.numpy()
na[0][0]=10
print(na)
print(a)
Run Code Online (Sandbox Code Playgroud)
输出:
tensor([[1., 1.]])
[[10. 1.]]
tensor([[10., 1.]])
Run Code Online (Sandbox Code Playgroud)
示例:消除共享存储的影响,先复制numpy数组
为了避免共享存储的影响,我们需要copy()
将 numpy 数组na
转换为新的 numpy 数组nac
。Numpycopy()
方法创建新的单独存储。
x = torch.tensor([3], device='cuda')
x.item()
Run Code Online (Sandbox Code Playgroud)
输出:
tensor([[1., 1.]])
[[10. 1.]]
[[1. 1.]]
tensor([[1., 1.]])
Run Code Online (Sandbox Code Playgroud)
现在,只有nac
numpy 数组将随行更改nac[0][0]=10
,na
并a
保持原样。
示例:CPU 张量requires_grad=True
3
Run Code Online (Sandbox Code Playgroud)
输出:
tensor([[1., 1.]], requires_grad=True)
[[10. 1.]]
tensor([[10., 1.]], requires_grad=True)
Run Code Online (Sandbox Code Playgroud)
在这里我们调用:
x = torch.tensor([3.], device='cuda', requires_grad=True)
x.item()
Run Code Online (Sandbox Code Playgroud)
这将导致:RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.
,因为require_grad=True
PyTorch AD 记录的张量。
这就是为什么我们需要detach()
在使用numpy()
.
示例:CUDA 张量requires_grad=False
3.0
Run Code Online (Sandbox Code Playgroud)
输出:
tensor([[1., 1.]], device='cuda:0')
[[10. 1.]]
tensor([[1., 1.]], device='cuda:0')
Run Code Online (Sandbox Code Playgroud)
? 在这里,我们只是不将 CUDA 张量转换为 CPU。这里没有共享存储的影响。
示例:CUDA 张量requires_grad=True
x = torch.ones((1,1), device='cuda', requires_grad=True)
x.item()
Run Code Online (Sandbox Code Playgroud)
输出:
tensor([[1., 1.]], device='cuda:0', requires_grad=True)
[[10. 1.]]
tensor([[1., 1.]], device='cuda:0', requires_grad=True)
Run Code Online (Sandbox Code Playgroud)
如果没有detach()
方法,RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.
将设置错误。
没有.to('cpu')
方法TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
将被设置。
您可以用来x.item()
从具有一个元素的张量中获取Python数字
归档时间: |
|
查看次数: |
683 次 |
最近记录: |