## 数据操作 0-d(标量) 1-d(向量) 2-d(矩阵) 3-d(RGB图片) 4-d(一个RGB图片的批量处理) 5-d(一个视频批量处理) PS:d为维度 创建数组的需求 >形状 >每个元素的数据类型 >每个元素的值 访问元素:涉及切片 ### pytorch ```python import torch # 张量表示一个数值组成的数组,这个数组可能有多个维度 x = torch.arrange(12) x # out # ([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) # shape属性访问张量的形状和元素个数 # reshape改变张量的形状而不改变元素数量和元素值 # 使用全0、全1、其他常量或者从特定分布中随机采样的数字 torch.zerors((2, 3, 4)) # out """ ([[[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]], [[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]])""" ``` ## 数据处理 处理缺失数据,典型方法包括 插值 和 删除 一般考虑插值 >对于数值,缺失数字补齐即为考虑内容 >对于类别或者离散值,将其视为一个类别,变为数值进行编辑 PS:深度学习一般使用32位浮点数 ## 线性代数 ### 标量 简单操作 >c = a + b > >c = a * b > >c = sin(a) 长度 |a| = a (if a > 0) 或者 =-a (else) |a + b| <= |a| + |b| |a * b| = |a| * |b| ### 向量 长度: 向量的长度,为向量每个元素的平方求和再开根号 ||a|| >= 0 ||a + b|| <= ||a|| + ||b|| ||a * b|| = |a| * ||b|| (这里a为标量) ### 矩阵 #### 基础操作 #### 范数 c = A * b hence ||c|| <= ||A|| * ||b|| 取决于如何衡量b和c的长度 #### 常见范数 矩阵范数:最小的满足上面公式的值 Frobenius范数: ```python A_frob = 0 A = [] for i in range(len(A)): for j in A[i]: A_frob += j ** 2 A_frob = A_frob ** (1/2) # 类似于求向量长度 ``` 一般用F范数,相对简单 #### 特殊矩阵 对称矩阵:Aij = Aji 反对称矩阵:Aij = -Aji 正定 正交矩阵: >所有行都相互正交 > >所有行都有长度 > >可以写成 U * UT = 1 # UT是U的转置 置换矩阵 PS:置换矩阵是正交矩阵 #### 其他 特征向量:不被矩阵改变方向的向量 PS:对称矩阵总是可以找到特征向量 ### 代码实现 ```python import torch import numpy as np x = torch.tensor([3.0]) # 标量 x = torch.arange(4) # x -> tensor([0, 1, 2, 3]) # 向量值可以看作标量值组成的列表 x[3] # tensor(3) # 通过索引访问元素 len(x) # 访问张量的长度 4 x.shape # 只有一个轴的张量,形状只有一个元素 # torch.Size([4]) # 通过指定两个分量m和n来创建一个形状为m*n的矩阵 A = torch.arange(20).reshape(5, 4) # tensor([[ 0, 1, 2, 3], # [ 4, 5, 6, 7], # [ 8, 9, 10, 11], # [12, 13, 14, 15], # [16, 17, 18, 19]]) # 矩阵的转置 A.T # tensor([[ 0, 4, 8, 12, 16], # [ 1, 5, 9, 13, 17], # [ 2, 6, 10, 14, 18], # [ 3, 7, 11, 15, 19]]) # 就像向量是标量的推广,矩阵是向量的推广一样,可以构建具有更多轴的数据结构 x = torch.arange(24).reshape(2, 3, 4) # 4为每一行元素个数,3为列数,2为矩阵数y x.sum() # 求和,无论x是什么,输出sum永远是标量 ``` ### 矩阵计算 #### 亚导数 将导数拓展到不可微的函数
DateWhale学习笔记
最新推荐文章于 2024-11-17 20:04:44 发布