第二章
- 数据操作
- 创建张量
- 操作
- 算数操作
- 索引
- 改变形状
- 线性代数
- 广播机制
- 运算的内存开销
- Tensor和Numpy的相互转换
数据操作
pytorch
中,torch.Tensor
是存储和变换数据的主要工具,Tensor
提供GPU计算和自动求梯度等功能。N维数组是机器学习和神经网络的主要数据结构
-
tensor
(张量):多维数组 - 标量:0维张量
- 向量:一维张量
- 矩阵:二维张量
创建张量
import torch # 导入pytorch
x=torch.empty(5, 3) # 创建⼀个5x3的未初始化的 Tensor
print(x)
y=torch.rand(5, 3) # 创建⼀个5x3的随机初始化的 Tensor
print(y)
z=torch.zeros(5, 3, dtype=torch.long)# 创建⼀个5x3的long型全0的 Tensor
print(z)
w=torch.tensor([5.5, 3]) # 直接根据数据集创建
控制台输出
tensor([[-1.1745e-17, 1.0412e-42, -1.1745e-17],
[ 1.0412e-42, -1.1747e-17, 1.0412e-42],
[-1.1747e-17, 1.0412e-42, -1.1740e-17],
[ 1.0412e-42, -1.1740e-17, 1.0412e-42],
[-1.1746e-17, 1.0412e-42, -1.1746e-17]])
tensor([[0.2267, 0.6189, 0.2569],
[0.3100, 0.8409, 0.9816],
[0.6405, 0.5193, 0.0425],
[0.5121, 0.7064, 0.0093],
[0.8851, 0.1488, 0.3974]])
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
还可以通过现有的tensor来创建
还有很多函数可以创建tensor,可以查看官网,这些方法都可以在创建的时候,指定数据类型dtype和存放设备device(GPU还是CPU)
操作
算数操作
pytorch中一种运算,可能有多种形式
索引
可以通过索引的方式,访问tensor
的一部分,索引的结果和原数据共享内存,修改一个,另一个也被修改
改变形状
⽤ view()
来改变 Tensor
的形状,不会改变内存,只是改变了对该张量的观察视角
线性代数
pytorch支持线性代数的操作
广播机制
当对两个形状不同的 Tensor 按元素运算时,可能会触发⼴播(broadcasting)机制:先适当复制元素使这两个 Tensor 形状相同后再按元素运算。例如:
运算的内存开销
-
view
操作不会改变内存 -
y=x + y
会改变内存,y指向新的内存
可以通过python中的Id来验证,第一个代码,可以说明,内存发生了改变。但是,可以通过切片功能,将新的元素保存到原来的内存中