持续创造,加快生长!这是我参与「日新计划 10 月更文挑战」的第1天,点击检查活动详情
前语
PyTorch
建立在张量之上,PyTorch
张量是一个 n
维数组,类似于 NumPy
数组。假如对NumPy
较为熟悉,咱们会在运用张量时看到语法上的相似之处:
Numpy数组 | PyTorch张量 | 描绘 |
---|---|---|
numpy.ones() | torch.ones() | 创立一个全 1 数组 |
numpy.zeros() | torch.zeros() | 创立一个全 0 数组 |
numpy.random.rand() | torch.rand() | 创立一个随机数组 |
numpy.array() | torch.tensor() | 运用给定值创立数组 |
x.shape | x.shape | 获取数组形状 |
在本节中,咱们将学习怎么界说和更改张量,将张量转换为数组,以及在核算设备之间移动张量。
界说张量数据类型
默认张量数据类型是 torch.float32
,这是张量运算最常用的数据类型。
1. 界说一个具有默认数据类型的张量:
x = torch.ones(2, 2)
print(x)
print(x.dtype)
2. 界说张量时指定数据类型:
x = torch.ones(2, 2, dtype=torch.int8)
print(x)
print(x.dtype)
更改张量的数据类型
咱们能够运用 type()
办法更改张量的数据类型:
1.运用 torch.uint8
类型界说一个张量:
x=torch.ones(1,dtype=torch.uint8)
print(x.dtype)
2. 更改张量数据类型:
x=x.type(torch.float)
print(x.dtype)
将张量转换为 NumPy 数组
咱们能够十分方便地将 PyTorch
张量转换为 NumPy
数组。
1. 界说一个张量:
x=torch.rand(2,2)
print(x)
print(x.dtype)
2. 将张量转换为 NumPy
数组:
y=x.numpy()
print(y)
print(y.dtype)
将 NumPy 数组转换为张量
咱们还能够将 NumPy
数组转换为 PyTorch
张量。
1. 界说一个 NumPy
数组:
import numpy as np
x=np.zeros((2,2),dtype=np.float32)
print(x)
print(x.dtype)
2. 将 NumPy
数组转换为 PyTorch
张量:
y=torch.from_numpy(x)
print(y)
print(y.dtype)
在设备之间移动张量
默认情况下,PyTorch
张量存储在 CPU
上,PyTorch
张量能够在运用GPU
来加快核算。这是张量与 NumPy
数组比较的首要优势。为了利用这一优势,咱们需要将张量移动到 CUDA
设备上,咱们能够运用 to()
办法将张量移动到其它可用设备上。
1. 在 CPU
上界说一个张量:
x=torch.tensor([1.5, 2])
print(x)
print(x.device)
2. 界说一个 CUDA
设备:
if torch.cuda.is_available():
device = torch.device("cuda:0")
3. 将张量移动到 CUDA
设备上:
x = x.to(device)
print(x)
print(x.device)
4. 同样,咱们能够将张量移动到 CPU
:
device = torch.device("cpu")
x = x.to(device)
print(x)
print(x.device)
5. 咱们也能够直接在可用设备上创立张量:
device = torch.device("cuda:0")
x = torch.ones(2,2, device=device)
print(x)
小结
在本节中,咱们首要界说了一个张量,获得了张量类型,并改变了它的类型。然后,咱们将 PyTorch
张量转换为 NumPy
数组,然后进行相反的转换操作。同时,咱们还介绍了怎么运用 type()
办法更改张量数据类型。然后,咱们学习了怎么运用 numpy()
办法将 PyTorch
张量转换为 NumPy
数组。
之后,咱们运用 from_numpy(x)
办法将 NumPy
数组转换为 PyTorch
张量。然后,咱们向学习了怎么运用 to()
办法将张量在 CPU
和 CUDA
设备之间移动;假如创立张量时不指定设备,则张量将默认创立在 CPU
设备上。