三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

PyTorch深度学习基础(一):张量 Tensor 与基本数据操作详解

PyTorch深度学习基础(一):张量 Tensor 与基本数据操作详解

本系列目标:从零开始学习深度学习基础,掌握 PyTorch 编程核心工具,为后续学习神经网络、CNN、Transformer、大模型等内容打下基础。

在深度学习中,我们每天都在处理大量的数据,例如:

  • 图片:二维像素矩阵
  • 文本:词向量序列
  • 蛋白质序列:氨基酸编码矩阵
  • 图结构:节点和边的特征矩阵

这些数据最终都会被转换为一种统一的数据结构:

Tensor(张量)

PyTorch 中最核心的数据结构就是 Tensor。

本节我们将学习:

  1. 什么是 Tensor?
  2. 如何创建 Tensor?
  3. Tensor 的形状和维度
  4. Tensor 基本运算
  5. 广播机制
  6. 索引与切片
  7. 内存优化
  8. Tensor 与 NumPy 转换

1. PyTorch简介

PyTorch 是目前最流行的深度学习框架之一,由 Meta AI 开发。

它提供:

  • 自动求导机制(Autograd)
  • GPU 加速计算
  • 神经网络模块(torch.nn)
  • 优化算法(torch.optim)
  • 大量深度学习工具

安装完成后,我们首先导入 PyTorch:

importtorch

注意:

虽然框架名字叫PyTorch

但是 Python 中导入模块使用:

torch

而不是:

pytorch

2. 什么是Tensor(张量)

Tensor定义

Tensor 可以理解为:

一个包含数字的数据容器,是深度学习中存储数据的基本单位。

例如:

标量 Scalar

一个数字:

x=5 x = 5x=5

对应:

torch.tensor(5)

向量 Vector

一维数组:

x=[1,2,3,4]x = \begin{bmatrix}1,2,3,4 \end{bmatrix}x=[1,2,3,4]

代码:

x=torch.tensor([1,2,3,4])

矩阵 Matrix

二维数组:

X=[1234] X= \begin{bmatrix} 1&2\\ 3&4 \end{bmatrix}X=[1324]

代码:

torch.tensor([[1,2],[3,4]])

高维Tensor

例如:

图片:

Height×Width×Channel Height×Width×ChannelHeight×Width×Channel

RGB图片:

224×224×3 224×224×3224×224×3

Batch图片:

Batch×Channel×Height×Width Batch×Channel×Height×WidthBatch×Channel×Height×Width

例如:

torch.zeros((32,3,224,224))

表示:

32张图片

3个颜色通道

224×224像素


3. 创建Tensor

3.1 使用 arange 创建连续数据

x=torch.arange(12)print(x)

输出:

tensor([0,1,2,3,4,5,6,7,8,9,10,11])

这里生成:

0,1,2,...,11 0,1,2,...,110,1,2,...,11

共12个元素。


4. Tensor形状 Shape

Tensor 的形状可以通过:

x.shape

查看:

输出:

torch.Size([12])

表示:

这是一个长度为12的一维向量。


5. Tensor元素数量

使用:

x.numel()

输出:

12

numel:

number of elements

表示:

Tensor中元素总数量。


6. Tensor改变形状 reshape

深度学习中经常需要调整数据维度。

例如:

原始:

[0,1,2,3,4,5,6,7,8,9,10,11]

转换为:

3行4列矩阵:

X=x.reshape(3,4)print(X)

结果:

tensor([ [0,1,2,3], [4,5,6,7], [8,9,10,11] ])

注意:

reshape不会改变数据:

只是改变观察方式。


7. 自动推断维度 -1

例如:

x.reshape(-1,4)

PyTorch 会自动计算:

第一维是多少。

因为:

$ 12 \div 4=3 $

所以:

(3,4)

等价于:

x.reshape(3,4)

8. 创建特殊Tensor

8.1 全零矩阵

torch.zeros((2,3,4))

表示:

2个矩阵

每个矩阵:

3行4列

结果:

[ [ [0,0,0,0], [0,0,0,0], [0,0,0,0] ], [ ... ] ]

8.2 全1矩阵

torch.ones((2,3,4))

所有元素:

xi=1 x_i=1xi=1


9. 随机初始化Tensor

神经网络参数通常需要随机初始化。

例如:

生成:

N(0,1) N(0,1)N(0,1)

即:

均值0

标准差1

代码:

torch.randn(3,4)

输出类似:

[ [-0.13,0.22,...], [1.32,-0.5,...] ]

为什么需要随机初始化?

因为如果所有神经元参数相同:

  • 梯度相同
  • 学习能力下降

所以需要随机打破对称性。


10. Tensor数学运算

PyTorch支持:

  • 加法 +
  • 减法 -
  • 乘法 *
  • 除法 /
  • 幂运算 **

例如:

x=torch.tensor([1.,2,4,8])y=torch.tensor([2.,2,2,2])print(x+y)print(x-y)print(x*y)print(x/y)print(x**y)

结果:

加法:

[3,4,6,10] [3,4,6,10][3,4,6,10]

乘法:

[2,4,8,16] [2,4,8,16][2,4,8,16]


11. 指数函数

torch.exp(x)

计算:

ex e^xex

例如:

e1=2.718 e^1=2.718e1=2.718

在深度学习中:

Softmax:

softmax(xi)=exi∑exj softmax(x_i)= \frac{e^{x_i}} {\sum e^{x_j}}softmax(xi)=exjexi

就使用指数函数。


12. Tensor拼接 concat

多个Tensor合并:

torch.cat()

例如:

两个矩阵:

X=torch.arange(12).reshape(3,4)Y=torch.ones((3,4))

按行拼接:

torch.cat((X,Y),dim=0)

结果:

形状:

(6,4) (6,4)64


按列拼接:

torch.cat((X,Y),dim=1)

结果:

(3,8) (3,8)38


13. Tensor比较运算

例如:

X==Y

返回:

布尔矩阵:

True False

常用于:

  • 判断预测是否正确
  • 创建mask

14. Tensor求和

X.sum()

例如:

0+1+2+...+11=66 0+1+2+...+11=660+1+2+...+11=66

输出:

tensor(66.)

15. Tensor广播机制 Broadcasting

这是PyTorch非常重要的功能。

例如:

a=torch.arange(3).reshape(3,1)b=torch.arange(2).reshape(1,2)

a:

[ [0], [1], [2] ]

b:

[ [0,1] ]

两个形状不同:

(3,1) (1,2)

但是:

a+b

PyTorch自动扩展:

a:

0 0 1 1 2 2

b:

0 1 0 1 0 1

结果:

[ [0,1], [1,2], [2,3] ]

这就是:

广播机制


16. Tensor索引和切片

类似Python列表。

获取最后一行

X[-1]

获取第2~3行

X[1:3]

修改元素

X[1,2]=9

表示:

第2行

第3列


修改整行

X[0:2,:]=12

表示:

前两行全部设置为12。


17. 节省Tensor内存

普通操作:

Y=Y+X

会:

  1. 创建新的Tensor
  2. 修改Y引用

因此:

内存增加。


使用:

Y[:]=X+Y

可以:

原地修改。

也可以:

X+=Y

减少内存开销。


18. Tensor与NumPy转换

PyTorch:

Tensor

NumPy:

ndarray

二者可以互相转换。

Tensor → NumPy

A=X.numpy()

NumPy → Tensor

B=torch.tensor(A)

19. Tensor转换Python数字

如果Tensor只有一个元素:

a=torch.tensor([3.5])

转换:

a.item()

结果:

3.5

也可以:

float(a)int(a)

总结

本节学习了PyTorch最核心的数据结构:

Tensor

掌握:

功能方法
创建Tensortorch.tensor
生成连续数字torch.arange
查看形状shape
元素数量numel
改变维度reshape
全0zeros
全1ones
随机初始化randn
拼接cat
求和sum
索引[]
广播broadcasting
NumPy转换numpy()

深度学习核心思想

神经网络本质上就是:

输入数据→Tensor→矩阵运算→Tensor→预测结果 输入数据 \rightarrow Tensor \rightarrow 矩阵运算 \rightarrow Tensor \rightarrow 预测结果输入数据Tensor矩阵运算Tensor预测结果

因此:

掌握 Tensor,是学习 PyTorch 和深度学习的第一步。

← 返回列表