mirror of
https://github.com/openmlsys/openmlsys-zh.git
synced 2026-04-23 18:13:14 +08:00
update ch03 (#359)
* fix ch03 table * fix ch03 table * update ch03-table-test
This commit is contained in:
@@ -9,15 +9,16 @@
|
||||
|
||||
在计算框架中,基础组件包含张量和算子,张量是基础数据结构,算子是基本运算单元。在数学中定义张量是基于向量与矩阵的推广,涵盖标量、向量与矩阵的概念。可以将标量理解为零阶张量,向量为一阶张量,我们熟悉的RGB彩色图像即为三阶张量。在计算框架中张量不仅存储数据,还存储数据类型、数据形状、维度或秩以及梯度传递状态等多个属性,如:numref:`tensor_attr`所示,列举了主要的属性和功能。可以通过[代码示例](https://github.com/openmlsys/openmlsys-pytorch/blob/master/chapter_computational_graph/tensor.py)查看张量的属性和部分操作展示
|
||||
|
||||
|
||||
:张量属性
|
||||
|
||||
|张量属性|功能|
|
||||
|:-: |:-:|
|
||||
| 形状(shape) | 存储张量的每个维度的长度,如[3,3,3] |
|
||||
| 维度或秩(dim) | 表示张量维度的数量,标量为0,向量为1、矩阵为2|
|
||||
| 数据类型(dtype) |表示存储的数据类型,如bool、int8、int16、float32、float64等|
|
||||
| 存储位置(device) | 创建张量时可以指定存储的设备位置,如CPU、GPU等|
|
||||
| 名字(name) | 张量的标识符 |
|
||||
| 张量属性 | 功能 |
|
||||
| -------------- | -------|
|
||||
| 形状(shape) | 存储张量的每个维度的长度,如[3,3,3] |
|
||||
| 维度或秩(dim) | 表示张量维度的数量,标量为0,向量为1、矩阵为2 |
|
||||
| 数据类型(dtype) | 表示存储的数据类型,如bool、int8、int16、float32、float64等 |
|
||||
| 存储位置(device) | 创建张量时可以指定存储的设备位置,如CPU、GPU等 |
|
||||
| 名字(name) | 张量的标识符 |
|
||||
:label:`tensor_attr`
|
||||
|
||||
张量的形状是一个重要的属性,它记录了每个轴的长度,也就是张量每个维度的元素数量。秩则代表张量的轴数或者阶数。张量中通常可以保存布尔类型、浮点数、整型数以及复数和字符串数据。每一个张量都具有唯一的数据类型,在计算过程中会对所有参与运算的张量进行类型检查,当发现类型不匹配时就会报错。部分特殊的计算则必须使用指定的数据类型,比如逻辑运算应为布尔类型。在部分计算框架中张量的属性中包含可以指明张量存储的设备位置,比如存储于CPU、GPU等。张量数据的存储状态可以分为可变和不可变两种,不可变张量一般用于用户初始化的数据或者网络模型输入的数据;而可变张量则存储网络权重参数,根据梯度信息更新自身数据。
|
||||
@@ -160,7 +161,7 @@ $$
|
||||
|
||||
根据链式法则,相应位置的导数乘积即可将网络得到的损失函数梯度信息传播到每一个权重参数,应用优化器的参数权重更新规则,即可达到神经网络模型参数训练迭代的目的。
|
||||
|
||||
根据上述公式我们可以得出循环控制的反向梯度计算过程如下,在下面代码中伪变量的前缀*grad*代表变量梯度变量,*transpose*代表矩阵转置算子。
|
||||
根据上述公式我们可以得出循环控制的反向梯度计算过程如下,在下面代码中变量的前缀*grad*代表变量梯度变量,*transpose*代表矩阵转置算子。
|
||||
```python
|
||||
grad_X2 = matmul(grad_Y, transpose(W2))
|
||||
grad_W2 = matmul(transpose(X2), grad_Y)
|
||||
|
||||
Reference in New Issue
Block a user