断断续续在b站看了三个星期的《动手学深度学习》,这门课真的是太棒了,特别感谢李沐大神!
总结一下目前的一些收获。
一、 数据处理
一些基本的数据处理,常用pytorch语法
- torch常用语法:
- 创建张量:
- torch.arange(n).reshape()
- torch.zeros((ceng, row, col))
- torch.tensor(),
怎么创建/辨别二/三维?
- 拼接张量:
- torch.cat((x, y), dim=0/1)
- 基本运算:
- 求幂 x ** y
- 求和但是保持维度 x.sum(axis = , keepdim = True)
- 累加 x.cumsum(axis = )
- 求L2范数: torch.norm(tensor)
- L1 范数 torch.abs().sum()
- others in python
- 逻辑判断 x == y
- 重新赋值 x= x + y 和 切片赋值 x[:] = y + z 都相当于浅拷贝
- 创建张量:
二、线性代数+矩阵计算+自动求导
矩阵一个基本求导,反向梯度如何实现?一些Code技巧
- 矩阵求导,矩阵-标量之间求导,有一个图,最常用的是XTA对X求导,结果为AT.
- 理解反向传播算法,用于自动求导。有一个计算图可以直观表示出来。(很多框架都用了自动求导)。
求反向传播梯度: 清楚自变量梯度——>定义函数——>调用backward
三、线性回归+基础优化算法
线性回归模型是什么?参数有哪些?一个模型训练的全过程是什么?
- 造轮子:
- 数据下载和处理。人工构建数据集()
- 需要的预备函数:返回batch的迭代器
- 模型定义:模型+损失函数(Code1)+优化算法
- 训练:初始化参数+定义参数(lr, num_epoch等)+循环训练
- 损失函数:均方损失
- 优化函数:小批量随机梯度下降SGD
- 框架实现:
- torch的data,nn包
- 模型:nn.Sequential()
- Code
- 1 x.reshape(y.shape)
- 分不清行/列向量时: x.reshape((-1, next_dim))