《动手学深度学习pytorch》学习笔记,仅用作自己复习。
数据操作
在深度学习中,我们通常会频繁地对数据进行操作。作为动手学深度学习的基础,介绍如何对内存中的数据进行操作。
在PyTorch中, torch.Tensor 是存储和变换数据的主要工具。如果你之前⽤用过NumPy,你会发现Tensor 和NumPy的多维数组⾮常类似。然⽽, Tensor 提供GPU计算和自动求梯度等更多功能,这些使 Tensor 更更加适合深度学习。
"tensor"这个单词⼀般可译作“张量”,张量可以看作是一个多维数组。标量可以看作是0维张量,向量可以看作1维张量,矩阵可以看作是二维张量。
创建 TENSOR
⾸先导入PyTorch:
import torch
然后我们创建⼀一个5x3的未初始化的 Tensor :
x = torch.empty(5, 3) print(x)
输出:
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]])
创建⼀一个5x3的随机初始化的 Tensor :
x = torch.rand(5, 3) print(x)
输出:
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]])
创建⼀一个5x3的long型全0的 Tensor :
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]])
还可以直接根据数据创建:
x = torch.tensor([5.5, 3]) print(x)
输出:
tensor([5.5000, 3.0000])
还可以通过现有的 Tensor 来创建,此⽅方法会默认重⽤输⼊Tensor 的一些属性,例如数据类型,除非自定义数据类型。
x = x.new_ones(5, 3, dtype=torch.float64) # 返回的tensor默认具有相同的 new_one1 torch.dtype和torch.device print(x) x = torch.randn_like(x, dtype=torch.float) # 指定新的数据类型 print(x)
我们可以通过 shape 或者 size() 来获取 Tensor 的形状:
print(x.size()) print(x.shape)
输出:
torch.Size([5, 3]) torch.Size([5, 3])
注意:返回的torch.Size其实就是⼀一个tuple, ⽀支持所有tuple的操作。
函数 功能
Tensor(*sizes) 基础构造函数
tensor(data,) 类似np.array的构造函数
ones(*sizes) 全1Tensor
zeros(*sizes) 全0Tensor
eye(*sizes) 对⻆角线为1,其他为0
arange(s,e,step) 从s到e,步⻓长为step
linspace(s,e,steps) 从s到e,均匀切分成steps份rand/randn(*sizes) 均匀/标准分布
normal(mean,std)/uniform(from,to) 正态分布/均匀分布
randperm(m) 随机排列这些创建⽅方法都可以在创建的时候指定数据类型dtype和存放device(cpu/gpu)。