1. 简介
PyTorch 是基于 Python 科学计算包,面向以下两种使用场景:
- GPU 强大的加速性能,从而替代 NumPy
- PyTorch 作为深度学习研究平台,提供了最大化的灵活性和速度
📜 原文地址:https://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html
张量是一种特殊的数据结构,与数据和矩阵非常相似。在 PyTorch 中,我们使用张量对模型的输入和输出以及模型的参数进行编码。
Tensors 类似于 NumPy 的 ndarrays
,只是张量可以在 GPU 或其他专用硬件上进行加速运算。如果你熟悉 ndarrays
,就可以直接使用 Tensor API。如果没有,请按照下面的 API 快速演练进行操作。
import torch
import numpy as np
2. 初始化
2.1 直接使用数据构建
Tensors 可以直接使用数据来构建,它将自动进行数据类型的推断。
data = [[1, 2],[3, 4]]
x_data = torch.tensor(data)
2.2 使用 NumPy 数组构建
Tensors 可以使用 NumPy 数组进行构建。
np_array = np.array(data)
x_np = torch.from_numpy(np_array)
2.3 使用另外一个tensor构建
除非显式重写,否则新的 Tensor 将保留参数 tensor 的特性(维度、数据类型)。
x_ones = torch.ones_like(x_data) # retains the properties of x_data
print(f"Ones Tensor: \n {x_ones} \n")
x_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data
print(f"Random Tensor: \n {x_rand} \n")
注意:如果声明一个未初始化的矩阵,该矩阵在使用之前不会包含确定已知的值。当创建一个未初始化的矩阵时,分配内存中的值都将显示为初始值。
- 构建一个未初始化的 矩阵:
import torch
x = torch.empty(5, 3)
print(x)
输出结果:
tensor([[6.4158e+10, 9.3046e-43, 6.4150e+10],
[9.3046e-43, 6.4149e+10, 9.3046e-43],
[6.4149e+10, 9.3046e-43, 6.4152e+10],
[9.3046e-43, 6.4152e+10, 9.3046e-43],
[6.4146e+10, 9.3046e-43, 6.4146e+10]])
多次运行该段代码,输出结果每次是不相同的
- 构建一个随机初始化的矩阵:
import torch
x = torch.rand(5, 3)
print(x)
输出结果:
tensor([[0.0333, 0.8159, 0.0170],
[0.5828, 0.3363, 0.5798],
[0.4928, 0.3689, 0.8265],
[0.2678, 0.6598, 0.2170],
[0.7417, 0.5393, 0.6702]])
torch.rand
返回一个符合均匀分布的随机数矩阵,随机数取值区间为 [0, 1)
。
- 构建一个元素填充为 0,且数据类型为
tensor.long
的矩阵:
import torch
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
输出结果:
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
- 直接从列表数据中构建一个 Tensor:
import torch
x = torch.tensor([5.1, 3])
print(x)
输出结果:
tensor([5.1000, 3.0000])
- 根据已知的 tensor 来创建 tensor,以下方法会重复使用输入 tensor 的属性,例如数据类型。除非用户自己指定新的值:
x = torch.rand(5, 3)
y1 = x.new_ones(5, 3, dtype=torch.double)
print(y1)
y2 = torch.rand_like(x, dtype=torch.float)
print(y2)
print(y2.size())
输出结果:
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[0.6728, 0.2809, 0.9017],
[0.1962, 0.8225, 0.9839],
[0.9622, 0.9088, 0.8063],
[0.1374, 0.4724, 0.6598],
[0.9871, 0.6245, 0.0878]])
torch.Size([5, 3])
注意:
torch.Size
事实上是一个元组,所以它支持所有元组的操作。