PyTorch
张量
默认数据类型是torch.float32
维度
- 0:标量
- 1:向量
- 2:矩阵
- …
标量&向量&矩阵&张量
- 标量:0维空间中一个点
- 向量:1维空间中一条线
- 矩阵:2维空间中一个面
- 三维张量:三维空间中一个体
- 向量由标量组成,矩阵由向量组成,三维张量由矩阵组成
常用API
- 返回张量中元素的个数
- torch.numel
- 对角线为1的张量
- torch.eye
- 张量为一个数才能使用
- a.item()
- 张量转换为int(float、short、long)类型
- a.int()
- a.to(dtype=torch.int32)
- 交换张量两个维度
- torch.transpose(a, 0, 1)
- 矩阵乘法
- 二维矩阵乘法 torch.mm
- 多维矩阵乘法 torch.matmul
- 逐元素乘法
- t1 * t2 == torch.mul == torch.multiply
- 点积
- torch.dot
- 两个向量对应元素相乘后的和
- 只能用于一维,且元素个数一样
- 拼接
- torch.cat
- 可指定维度,默认维度dim=0
- 压缩
- torch.squeeze
- 最大元素值索引
- torch.argmax
- 判等
- torch.eq
- 求平均值
- torch.mean
计算图
- 张量复杂计算过程抽象为一张图
- 张量–>张量运算–>张量–>…
- 节点–>函数关系–>节点–>…
- 节点
- 叶子节点
- is_leaf
- 输出节点
- 最后计算得出的张量
- 中间节点
- 除了叶子节点和输出节点外的节点
- 连接和转换信息
- 叶子节点
- 创建可微分张量,整个过程关系会默认被记录
- grad_fn
- 阻断跟踪(记录)
- with torch.no_grad(): …
- 语句块代码不进行计算图记录
- detach()
- 创建张量和原始张量共享数据
- with torch.no_grad(): …
自动微分计算
- 单标量
- 多标量
- 向量
- loss.backward()
- 梯度清零
- 梯度累加存储数据问题