2.2 数据操作
在深度学习中,我们通常会频繁地对数据进行操作。作为动手学深度学习的基础,本节将介绍如何对内存中的数据进行操作。
在PyTorch中,torch.Tensor
是存储和变换数据的主要工具。如果你之前用过NumPy,你会发现Tensor
和NumPy的多维数组非常类似。然而,Tensor
提供GPU计算和自动求梯度等更多功能,这些使Tensor
更加适合深度学习。
"tensor"这个单词一般可译作“张量”,张量可以看作是一个多维数组。标量可以看作是0维张量,向量可以看作1维张量,矩阵可以看作是二维张量。
2.2.1 创建Tensor
我们先介绍Tensor
的最基本功能,即Tensor
的创建。
首先导入PyTorch:
import torch
Copy to clipboardErrorCopied
然后我们创建一个5x3的未初始化的Tensor
:
x = torch.empty(5, 3)
print(x)
Copy to clipboardErrorCopied
输出:
tensor([[ 0.0000e+00, 1.5846e+29, 0.0000e+00],
[ 1.5846e+29, 5.6052e-45, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 1.5846e+29, -2.4336e+02]])
Copy to clipboardErrorCopied
创建一个5x3的随机初始化的Tensor
:
x = torch.rand(5, 3)
print(x)
Copy to clipboardErrorCopied
输出:
tensor([[0.4963, 0.7682, 0.0885],
[0.1320, 0.3074, 0.6341],
[0.4901, 0.8964, 0.4556],
[0.6323, 0.3489, 0.4017],
[0.0223, 0.1689, 0.2939]])
Copy to clipboardErrorCopied
创建一个5x3的long型全0的Tensor
:
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
Copy to clipboardErrorCopied
输出:
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
Copy to clipboardErrorCopied
还可以直接根据数据创建:
x = torch.tensor([5.5, 3])
print(x)
Copy to clipboardErrorCopied
输出:
tensor([5.5000, 3.0000])
Copy to clipboardErrorCopied
还可以通过现有的Tensor
来创建,此方法会默认重用输入Tensor
的一些属性,例如数据类型,除非自定义数据类型。
x = x.new_ones(5, 3, dtype=torch.float64) # 返回的tensor默认具有相同的torch.dtype和torch.device
print(x)
x = torch.randn_like(x, dtype=torch.float) # 指定新的数据类型
print(x) Copy to clipboardErrorCopied
输出:
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[ 0.6035, 0.8110, -0.0451],
[ 0.8797, 1.0482, -0.0445],
[-0.7229, 2.8663, -0.5655],
[ 0.1604, -0.0254, 1.0739],
[ 2.2628, -0.9175, -0.2251]])
Copy to clipboardErrorCopied
我们可以通过shape
或者size()
来获取Tensor
的形状:
print(x.size())
print(x.shape)
Copy to clipboard