2-pytorch基础知识
文章目录
2.1-张量
2.1.1-什么是张量
张量(Tensor)是一个定义在一些向量空间和一些对偶空间的笛卡尔积上的多重线性映射,其坐标是|n|维空间内,有|n|个分量的一种量
——百度百科
从数值到向量,再到矩阵,量的维度不断升高,那么超过3维的我们都可以称作张量,不过更一般的,任何维度都可以用张量表示,如数值就是0维,向量1维,矩阵2未,而上图中的张量就是一个三维的张量。
- 维度不限,通常为3维
- pytorch的基本运算单元
- pytorch中基础的数据定义和运算会频繁地用到张量的特性
- 张量在pytorch中支持GPU运算、自动求导等操作
2.1.2-创建tensor
2.2-自动求导
2.2.1-PyTorch机制
PyTorch是如何实现模型训练的:
- 输入数据,正向传播
- 创建计算图
- 计算损失函数
- 损失函数反向传播
- 更新模型参数
2.2.2-数学基础
多元函数求导的雅各比矩阵:
J
=
(
∂
y
1
∂
x
1
⋯
∂
y
1
∂
x
n
⋮
⋱
⋮
∂
y
m
∂
x
1
⋯
∂
y
m
∂
x
n
)
J=\left(\begin{array}{ccc}\frac{\partial y_{1}}{\partial x_{1}} & \cdots & \frac{\partial y_{1}}{\partial x_{n}} \\ \vdots & \ddots & \vdots \\ \frac{\partial y_{m}}{\partial x_{1}} & \cdots & \frac{\partial y_{m}}{\partial x_{n}}\end{array}\right)
J=⎝⎜⎛∂x1∂y1⋮∂x1∂ym⋯⋱⋯∂xn∂y1⋮∂xn∂ym⎠⎟⎞
假设有
m
m
m个因变量
y
1
,
…
,
y
m
y_1,\dots,y_m
y1,…,ym, 和
n
n
n个自变量
x
1
,
…
,
x
n
x_1,\dots,x_n
x1,…,xn, 那么
Y
Y
Y对
X
X
X的导数可以用矩阵
J
J
J的形式表示出来。
链式求导法则:
若 h ( x ) = f ( g ( x ) ) h(x) = f(g(x)) h(x)=f(g(x)),则 h ′ ( x ) = f ′ ( g ( x ) ) ∗ g ′ ( x ) h^{\prime}(x) = f^\prime(g(x))*g^{\prime}(x) h′(x)=f′(g(x))∗g′(x)
PyTorch自动求导:
损失函数
l
l
l对输出
y
y
y的导数为
v
=
(
∂
l
∂
y
1
⋯
∂
l
∂
y
m
)
v=\left(\begin{array}{lll}\frac{\partial l}{\partial y_{1}} & \cdots & \frac{\partial l}{\partial y_{m}}\end{array}\right)
v=(∂y1∂l⋯∂ym∂l)
那么
l
l
l对输入
x
x
x的导数为
v
J
=
(
∂
l
∂
y
1
⋯
∂
l
∂
y
m
)
(
∂
y
1
∂
x
1
⋯
∂
y
1
∂
x
n
⋮
⋱
⋮
∂
y
m
∂
x
1
⋯
∂
y
m
∂
x
n
)
=
(
∂
l
∂
x
1
⋯
∂
l
∂
x
n
)
v J=\left(\begin{array}{lll}\frac{\partial l}{\partial y_{1}} & \cdots & \frac{\partial l}{\partial y_{m}}\end{array}\right)\left(\begin{array}{ccc}\frac{\partial y_{1}}{\partial x_{1}} & \cdots & \frac{\partial y_{1}}{\partial x_{n}} \\ \vdots & \ddots & \vdots \\ \frac{\partial y_{m}}{\partial x_{1}} & \cdots & \frac{\partial y_{m}}{\partial x_{n}}\end{array}\right)=\left(\begin{array}{lll}\frac{\partial l}{\partial x_{1}} & \cdots & \frac{\partial l}{\partial x_{n}}\end{array}\right)
vJ=(∂y1∂l⋯∂ym∂l)⎝⎜⎛∂x1∂y1⋮∂x1∂ym⋯⋱⋯∂xn∂y1⋮∂xn∂ym⎠⎟⎞=(∂x1∂l⋯∂xn∂l)
2.2.3-动态计算图
将动量和张量创建动态计算图
动态图单元包括:
data
:数据,如torch.tensor(1.0)
requires_grad
:是否计算导数grad
:导数值grad_fn
:导数表示函数is_leaf
:是不是叶子节点,如果requires_grad
为真,且is_leaf
为假,说明计算可以停止了
2.2.4-自动求导.ipynb
动态:
不需要单独计算表达式,只需要用表达式将传参结合起来
2.3-并行计算
没GPU,略过了
总结:
- GPU算的快
- 学习、研究过程中够用
- PyTorch可以在不同设备中计算