欢迎光临散文网 会员登陆 & 注册

《PyTorch深度学习实践》完结合集

2023-03-23 17:12 作者:学虚幻引擎的小王  | 我要投稿


理解 随机分布


  • 什么是智能?
  • 推理
  • 信息 = 推理 = 》决策
  • 预测
  • 图像 和 抽象对象 联系起来
  • 监督学习


  • 基于统计
  • 机器学习
  • 表示学习


怎么设计学习系统?

  1. 基于规则的系统
  2. 求原函数:知识库、规则、搜索树
  3. 缺点:复杂系统,难设计维护
  4. 经典ML
  5. 手动特征提取(数据变向量)、找映射(mapping)
  6. 表示学习
  7. Features
  8. SVM family
  9. DL
  10. 变换、层、学习器
  11. 无监督:Feature的训练
  12. End to End 过程


  • 为甚进行 特征提取
  • 维度诅咒
  • 大数定律
  • 特征压缩
  • 保持 高维空间的信息
  • 表示学习 (Manifold 流形)
  • 用来 降维


模型选择(经典ML)

  • SVM 缺点
  • 无结构 难

数学 工程学


  • 寒武纪 眼睛 光线
  • 运动

视觉是 分层结构

仿生学算法


  • 反向传播 计算图 是为了求 链式法则的导数


【重点】学习 构造模型的方法,学会基本块,可以针对任务 组装自己的模型


学术 PyTorch

工业 TF


安装过程

按照 官网 下载

  1. 英伟达 安装 CUDA,自定义
  2. PyTorch


  1. 线性模型

过程:

  1. DataSet
  2. Model (选择/设计)
  3. Training (确定权重)
  4. inferring

> 人工 training

上图表示 ML 的过程

训练数据 可以表示 真实分布(整体)吗?


核心问题:

  1. 过拟合 =》 泛化能力
  2. 训练集 开发集
  3. 比赛时候 看不到 测试集


什么是模型?

思路:先用线性模型


预测结果 加帽子 y_hat


怎么计算?

  1. 随即猜测
  2. 评估 偏差
  3. 评估模型 =》 损失

> 有点像 实验设计


Error

MSE = Mean Square Error


这里用 穷举


# 重要 算法实现 线性回归

这个和 DL 关系

用训练 轮数(Epoc) 绘图

观察这个 ,用来判断 超参数

打印日志、或绘图

Visdom: 时间长,断点重开

模型持久化、存盘



3D 图的绘制

》》》》》》》》》》》》》》》》》》

03 梯度下降

  • 真实情况
  • 目标函数 多维 维度灾难
  • 措施
  • 分治
  • 问题:局部最优
  • 优化问题

梯度下降算法

梯度定义:

算法 = 贪心

可以得到 局部最优

DL 局部最优 少

存在 鞍点 g = 0【 没法继续 迭代】


把 公式 变成 函数(python 类)

目的: 函数图 收敛


怎么看 可以停?

  • 指数平滑 可以更方便看 趋势

线 发散 的可能?

学习率 太大


随机梯度下降

引入 随机 跨过鞍点

权衡

Batch 折中

批量的随机梯度下降 SDD

Mini-Batch ,现在用Batch 代名


04 反向传播

简单模型 解析式

  • 复杂模型
  • w 权重很多
  • 计算图

绿色 计算模块

矩阵乘法 matrix -cook -book

简单合并 会化简模型

为增加模型复杂性,做以下变换

增加 非线性变换函数 σ

求导

链式求导

第一: 制作计算图

第二:

完整的 计算图

蓝色 训练对象

残差项

损失

两个练习

  1. 。。。
  2. 。。。


Pytorch

构建模型 主要是构建 计算图


  1. 数据集
  2. 权重


代码 是 构建 计算图

l.backward 计算grad

w.data 不计算张量

w.grad.data.zero_() 清零

本质:

  1. loss
  2. backward
  3. 梯度下降 更新


小问题:

绘制 计算图

》》》》》》》》》》》》》》》

05 线性回归

PyTorch 的工具 完成 线性模型

有弹性、 可拓展


步骤:

  1. 数据集
  2. 设计模型
  3. 构造 loss 和 optimizer (封装的功能)
  4. 训练周期 (前馈、反馈、更新)

第一步

使用mini-batch


向量 矩阵 广播

mini-batch 数据需要是 矩阵


第二步

PyTorch 重点 构造计算图

这里是 线性单元

loss 标量


nn.Module 模板

继承

函数名 固定

自动 backward


Functions 类

构建自己的 求导块


使用 Linear 类 定义 Linear Unit

两种公式,目的 拼出 乘法的维度

检查:训练集、开发集 都 收敛

尝试 不同优化器

观察 损失降低的

》》》》》》》》》》》》》》》》》

06 Logistic Regression 做分类

MNIST Dataset 做分类

分类问题:

对象属于 类别的概率


  • 数据集
  • MNIST
  • CIFAR10 类别彩图


类别 的 概率

x 映射 到 【0-1】

需要用 luojisite 函数

饱和函数

因为 正态分布 产生的函数

x 放 y_hat 求 概率

  1. 导函数 > 0
  2. 不断增加
  3. 饱和函数

所以 增加了 σ() 计算模块

距离最小化

分布 (这个在统计上 有什么意义?

分布差异

cross-entropy 交叉熵

加- 因为 最小


functional 包 有函数

BCE 二分类 交叉熵

框架 结构

这些模块 如果复杂,就单独写库/文件

得到的模型 进行可视化

07 多维特征的输入

输入的X 有多个特征

增加维度 增加了向量


Mini-Batch

向量函数 应用到每个元素上的函数

  • 方程组 合成 矩阵运算
  • 为了 并行计算

模型变换:维度 修改


多层网络

空间转换的函数 矩阵

  • 线性 非线性
  • 多个线性层 模拟 非线性
  • Linear 降维
  • σ() 非线性 【激活函数】
  • 超参数 搜索
  • 学习能力 要有 泛化能力

构造多层

医疗、保险 需要用


  1. 读取函数

游戏 显卡 32位浮点数

2 模型

序列式模型 forward 使用x , 为了避免错误

3 构造 损失和优化器

4 训练

ReLU 也常用 不连续

可以探索不同激活函数

就该 模型构建

ln 0 的问题 这里前向 改 sigmoid

0-1 光滑

》》》》》》》》》》》》》》》》》》

08 构造数据集 Dataset and DataLoader

概念:

  1. Epoch
  2. 循环 写嵌套循环
  3. 外层 周期
  4. 内层 batch
  5. Batch-Size

  6. Iterations


打乱

加载

操作: 索引、len

代码

Dataset 抽象类,只能被子类 继承

DataLoader 可以实例化,用来加载数据



数据 小 ,读到内存

数据 大, 不读


pytorch 0.4 报错 多进程的问题

loader 里数据 取出


这里改动是

  1. 数据导入 Dataset and Dataloader
  2. 循环处 使用Mini-Batch 需要的 嵌套循环


数据集


练习

Titanic 数据集

构造分类器,使用 DataLoader

》》》》》》》》》》》》》》》》》》

09 多分类问题

需要使用 softmax 分类器

想法1:每个作为 二分类

想法2:相互抑制

每个计算 相同 并行计算

  • 分布 distribution
  • 使用 概率分布
  • 所以 增加 Softmax Layer

目的:

  1. >= 0
  2. 加和 = 1

等于1 的运算



下一个问题:损失函数





交叉熵损失

读文档,比较NLL CrossEL

代码

数据


图片处理 PIL pillow

pytorch 需要把 C 放前面 方便计算

Totensor

Normalize 标准化 (经验值) 切换到 0,1 分布

图像数据 在使用时 调用


全连接网络 一阶

-1? 自动计算 N 的数值

x.view(-1,784)

损失

带 冲量


训练

》 把训练 定义成 函数

测试 函数

问题:为啥有

total +=labels.size(0)

correct += (predicted == labels).sum().item()

可以 每10轮 测试一次

简洁

图像:

  • 人工特征提取
  • CNN 自动特征提取

练习

》》》》》》》》》》》》》》》》》》》》

10 卷积神经网络

二维卷积


步骤

  1. 卷积
  2. 下采样
  3. 卷积
  4. 下采样 (降维
  5. 展开
  6. 全连接
  • 特征提取器 前部卷积
  • 分类器


栅格 ccd

光敏电阻:一个光敏电阻 处理 一个光锥

获得 一个像素

电阻R 映射 光强G

有些相片是插值像素


  • Patch 图像块 做卷积

卷积 包含 图像块的所有信息


运算过程

数乘 = 元素相乘

多通道 就得到 每个通道的卷积结果

卷积运算

卷积绘图

N个通道

  • 如果要M 个输出?
  • M个卷积核
  • Cat 拼接

发现:

  1. 卷积核 通道数量 = 输入通道
  2. 卷积核 总数 = 输出通道

共享权重

4个维度 的卷积核


代码实现

重要的是 Conv2d 设置 : 4个参数


其他重要参数

padding 图像外填充 让 i/o 大小不变

填充0

卷积 = 线性计算


stride 步长 降低卷积结果的w/h

Max Pooling Layer 下采样

  • 通道数量不变,找区域内最大




重点 维度相关:在输出 是否和 全连接层 维度对应

  1. 手算
  2. pytorch 输出看看维度 【常用】

view 改变 网络为 全连接网络

为什么 最后一层 不用激活?


怎么用 GPU

cuda : num (表示 显卡 索引)

to(device) 就可以把模型、数据给 显卡

错误率 降低了30%


练习

》》》》》》》》》》》》》》》》

11 CNN(高级版)

2种 复杂 CNN

LeNet 5


GoogLeNet

》 常作为 基础框架

减少代码冗余:函数/类

块 封装成 类


  • Inception 盗梦空间


有多种 构造方式

提供几种 候选的 卷积核

Concatenate 张量拼接,多种路径下的张量的 拼接

Average Pooling 平均池化


  • 1X1 Conv 作用
  • 每个通道
  • 可以跨越不同通道 相同位置的信息
  • 信息融合

信息融合算法,加权求和


为什么有 192个通道?

增加 1X1 的卷积,节省 计算量

造卷积


放数组 ,用 cat ,维度为1

? Net里是什么?

【 位置 让pytorch 来求,减少错误

重点 使用了2 个 Inception 模块

根据test 来决定网络是否训练好

每个新高点 存盘

梯度消失

Residual net 可以解决 梯度消失问题

梯度 趋近于 0 难更新 =》 离输入近的 难更新

古早: 锁层

Residual net

加 x ,导数 + 1 ,梯度 不为 0

Plain net

Residual net, 有池化层


代码实现

把 计算图 翻译为 代码

网络复杂 用一些类来封装

分布式 渐增网络 【增量式开发】


练习

很多 Residual net 的设计

可以用 minist 做测试

Densely Net


后面的路

  1. 理论《深度学习》花书
  2. 工程、理论
  3. 阅读 PyTorch 文档(通读一遍)
  4. 复现 经典工作(代码下载 -> 跑 【会配置环境】 应该
  5. 读代码 开源代码(系统架构、训练架构、测试架构、数据读取架构、损失函数构建)
  6. 写代码
  7. 扩充 视野
  8. 知识 盲点(写代码的)
  9. 。。
  10. 需要长时间 积累






























《PyTorch深度学习实践》完结合集的评论 (共 条)

分享到微博请遵守国家法律