《PyTorch深度學(xué)習(xí)實(shí)踐》完結(jié)合集


理解 隨機(jī)分布
- 什么是智能?
- 推理
- 信息 = 推理 = 》決策
- 預(yù)測(cè)
- 圖像 和 抽象對(duì)象 聯(lián)系起來(lái)
- 監(jiān)督學(xué)習(xí)
- 基于統(tǒng)計(jì)

- 機(jī)器學(xué)習(xí)
- 表示學(xué)習(xí)
怎么設(shè)計(jì)學(xué)習(xí)系統(tǒng)?
- 基于規(guī)則的系統(tǒng)
- 求原函數(shù):知識(shí)庫(kù)、規(guī)則、搜索樹
- 缺點(diǎn):復(fù)雜系統(tǒng),難設(shè)計(jì)維護(hù)
- 經(jīng)典ML
- 手動(dòng)特征提取(數(shù)據(jù)變向量)、找映射(mapping)
- 表示學(xué)習(xí)
- Features
- SVM family
- DL
- 變換、層、學(xué)習(xí)器
- 無(wú)監(jiān)督:Feature的訓(xùn)練
- End to End 過(guò)程
- 為甚進(jìn)行 特征提取
- 維度詛咒
- 大數(shù)定律
- 特征壓縮
- 保持 高維空間的信息
- 表示學(xué)習(xí) (Manifold 流形)
- 用來(lái) 降維
模型選擇(經(jīng)典ML)

- SVM 缺點(diǎn)
- 無(wú)結(jié)構(gòu) 難
數(shù)學(xué) 工程學(xué)
- 寒武紀(jì) 眼睛 光線
- 運(yùn)動(dòng)

視覺(jué)是 分層結(jié)構(gòu)
仿生學(xué)算法
- 反向傳播 計(jì)算圖 是為了求 鏈?zhǔn)椒▌t的導(dǎo)數(shù)

【重點(diǎn)】學(xué)習(xí) 構(gòu)造模型的方法,學(xué)會(huì)基本塊,可以針對(duì)任務(wù) 組裝自己的模型

學(xué)術(shù) PyTorch
工業(yè) TF
安裝過(guò)程

按照 官網(wǎng) 下載
- 英偉達(dá) 安裝 CUDA,自定義
- PyTorch
- 線性模型
過(guò)程:
- DataSet
- Model (選擇/設(shè)計(jì))
- Training (確定權(quán)重)
- inferring
> 人工 training

上圖表示 ML 的過(guò)程
訓(xùn)練數(shù)據(jù) 可以表示 真實(shí)分布(整體)嗎?
核心問(wèn)題:
- 過(guò)擬合 =》 泛化能力
- 訓(xùn)練集 開(kāi)發(fā)集
- 比賽時(shí)候 看不到 測(cè)試集
什么是模型?
思路:先用線性模型
預(yù)測(cè)結(jié)果 加帽子 y_hat
怎么計(jì)算?
- 隨即猜測(cè)
- 評(píng)估 偏差
- 評(píng)估模型 =》 損失
> 有點(diǎn)像 實(shí)驗(yàn)設(shè)計(jì)
Error
MSE = Mean Square Error
這里用 窮舉
# 重要 算法實(shí)現(xiàn) 線性回歸

這個(gè)和 DL 關(guān)系
用訓(xùn)練 輪數(shù)(Epoc) 繪圖

觀察這個(gè) ,用來(lái)判斷 超參數(shù)
打印日志、或繪圖
Visdom: 時(shí)間長(zhǎng),斷點(diǎn)重開(kāi)
模型持久化、存盤

3D 圖的繪制
》》》》》》》》》》》》》》》》》》
03 梯度下降
- 真實(shí)情況
- 目標(biāo)函數(shù) 多維 維度災(zāi)難
- 措施
- 分治
- 問(wèn)題:局部最優(yōu)
- 優(yōu)化問(wèn)題
梯度下降算法
梯度定義:

算法 = 貪心
可以得到 局部最優(yōu)

DL 局部最優(yōu) 少
存在 鞍點(diǎn) g = 0【 沒(méi)法繼續(xù) 迭代】

把 公式 變成 函數(shù)(python 類)

目的: 函數(shù)圖 收斂
怎么看 可以停?
- 指數(shù)平滑 可以更方便看 趨勢(shì)

線 發(fā)散 的可能?
學(xué)習(xí)率 太大
隨機(jī)梯度下降
引入 隨機(jī) 跨過(guò)鞍點(diǎn)

權(quán)衡

Batch 折中
批量的隨機(jī)梯度下降 SDD
Mini-Batch ,現(xiàn)在用Batch 代名
04 反向傳播
簡(jiǎn)單模型 解析式
- 復(fù)雜模型
- w 權(quán)重很多
- 計(jì)算圖
綠色 計(jì)算模塊
矩陣乘法 matrix -cook -book

簡(jiǎn)單合并 會(huì)化簡(jiǎn)模型
為增加模型復(fù)雜性,做以下變換
增加 非線性變換函數(shù) σ

求導(dǎo)
鏈?zhǔn)角髮?dǎo)
第一: 制作計(jì)算圖
第二:

完整的 計(jì)算圖
藍(lán)色 訓(xùn)練對(duì)象
殘差項(xiàng)
損失

兩個(gè)練習(xí)
- 。。。
- 。。。
Pytorch

構(gòu)建模型 主要是構(gòu)建 計(jì)算圖
- 數(shù)據(jù)集
- 權(quán)重

代碼 是 構(gòu)建 計(jì)算圖
l.backward 計(jì)算grad
w.data 不計(jì)算張量
w.grad.data.zero_() 清零

本質(zhì):
- loss
- backward
- 梯度下降 更新
小問(wèn)題:
繪制 計(jì)算圖

》》》》》》》》》》》》》》》
05 線性回歸
PyTorch 的工具 完成 線性模型
有彈性、 可拓展
步驟:
- 數(shù)據(jù)集
- 設(shè)計(jì)模型
- 構(gòu)造 loss 和 optimizer (封裝的功能)
- 訓(xùn)練周期 (前饋、反饋、更新)

第一步
使用mini-batch
向量 矩陣 廣播
mini-batch 數(shù)據(jù)需要是 矩陣
第二步
PyTorch 重點(diǎn) 構(gòu)造計(jì)算圖
這里是 線性單元

loss 標(biāo)量
nn.Module 模板
繼承
函數(shù)名 固定
自動(dòng) backward
Functions 類
構(gòu)建自己的 求導(dǎo)塊

使用 Linear 類 定義 Linear Unit

兩種公式,目的 拼出 乘法的維度

檢查:訓(xùn)練集、開(kāi)發(fā)集 都 收斂

嘗試 不同優(yōu)化器

觀察 損失降低的
》》》》》》》》》》》》》》》》》
06 Logistic Regression 做分類
MNIST Dataset 做分類
分類問(wèn)題:
對(duì)象屬于 類別的概率
- 數(shù)據(jù)集
- MNIST
- CIFAR10 類別彩圖
類別 的 概率
x 映射 到 【0-1】
需要用 luojisite 函數(shù)
飽和函數(shù)
因?yàn)?正態(tài)分布 產(chǎn)生的函數(shù)

x 放 y_hat 求 概率

- 導(dǎo)函數(shù) > 0
- 不斷增加
- 飽和函數(shù)
所以 增加了 σ() 計(jì)算模塊

距離最小化
分布 (這個(gè)在統(tǒng)計(jì)上 有什么意義?
分布差異
cross-entropy 交叉熵

加- 因?yàn)?最小

functional 包 有函數(shù)

BCE 二分類 交叉熵

框架 結(jié)構(gòu)

這些模塊 如果復(fù)雜,就單獨(dú)寫庫(kù)/文件

得到的模型 進(jìn)行可視化
07 多維特征的輸入
輸入的X 有多個(gè)特征

增加維度 增加了向量
Mini-Batch
向量函數(shù) 應(yīng)用到每個(gè)元素上的函數(shù)
- 方程組 合成 矩陣運(yùn)算
- 為了 并行計(jì)算

模型變換:維度 修改

多層網(wǎng)絡(luò)
空間轉(zhuǎn)換的函數(shù) 矩陣
- 線性 非線性
- 多個(gè)線性層 模擬 非線性
- Linear 降維
- σ() 非線性 【激活函數(shù)】

- 超參數(shù) 搜索
- 學(xué)習(xí)能力 要有 泛化能力

構(gòu)造多層

醫(yī)療、保險(xiǎn) 需要用
- 讀取函數(shù)
游戲 顯卡 32位浮點(diǎn)數(shù)

2 模型

序列式模型 forward 使用x , 為了避免錯(cuò)誤
3 構(gòu)造 損失和優(yōu)化器

4 訓(xùn)練

ReLU 也常用 不連續(xù)

可以探索不同激活函數(shù)

就該 模型構(gòu)建

ln 0 的問(wèn)題 這里前向 改 sigmoid
0-1 光滑

》》》》》》》》》》》》》》》》》》
08 構(gòu)造數(shù)據(jù)集 Dataset and DataLoader

概念:
- Epoch
- 循環(huán) 寫嵌套循環(huán)
- 外層 周期
- 內(nèi)層 batch
- Batch-Size
- Iterations

打亂
加載
操作: 索引、len

代碼
Dataset 抽象類,只能被子類 繼承
DataLoader 可以實(shí)例化,用來(lái)加載數(shù)據(jù)

數(shù)據(jù) 小 ,讀到內(nèi)存
數(shù)據(jù) 大, 不讀
pytorch 0.4 報(bào)錯(cuò) 多進(jìn)程的問(wèn)題

loader 里數(shù)據(jù) 取出


這里改動(dòng)是
- 數(shù)據(jù)導(dǎo)入 Dataset and Dataloader
- 循環(huán)處 使用Mini-Batch 需要的 嵌套循環(huán)
數(shù)據(jù)集


練習(xí)
Titanic 數(shù)據(jù)集
構(gòu)造分類器,使用 DataLoader

》》》》》》》》》》》》》》》》》》
09 多分類問(wèn)題
需要使用 softmax 分類器
想法1:每個(gè)作為 二分類
想法2:相互抑制

每個(gè)計(jì)算 相同 并行計(jì)算
- 分布 distribution
- 使用 概率分布
- 所以 增加 Softmax Layer
目的:
- >= 0
- 加和 = 1

等于1 的運(yùn)算


下一個(gè)問(wèn)題:損失函數(shù)



交叉熵?fù)p失

讀文檔,比較NLL CrossEL
代碼

數(shù)據(jù)
圖片處理 PIL pillow

pytorch 需要把 C 放前面 方便計(jì)算
Totensor
Normalize 標(biāo)準(zhǔn)化 (經(jīng)驗(yàn)值) 切換到 0,1 分布

圖像數(shù)據(jù) 在使用時(shí) 調(diào)用
全連接網(wǎng)絡(luò) 一階
-1? 自動(dòng)計(jì)算 N 的數(shù)值
x.view(-1,784)

損失
帶 沖量
訓(xùn)練
》 把訓(xùn)練 定義成 函數(shù)

測(cè)試 函數(shù)

問(wèn)題:為啥有
total +=labels.size(0)
correct += (predicted == labels).sum().item()

可以 每10輪 測(cè)試一次
簡(jiǎn)潔
圖像:
- 人工特征提取
- CNN 自動(dòng)特征提取
練習(xí)

》》》》》》》》》》》》》》》》》》》》
10 卷積神經(jīng)網(wǎng)絡(luò)
二維卷積
步驟
- 卷積
- 下采樣
- 卷積
- 下采樣 (降維
- 展開(kāi)
- 全連接
- 特征提取器 前部卷積
- 分類器

柵格 ccd
光敏電阻:一個(gè)光敏電阻 處理 一個(gè)光錐
獲得 一個(gè)像素

電阻R 映射 光強(qiáng)G
有些相片是插值像素
- Patch 圖像塊 做卷積

卷積 包含 圖像塊的所有信息
運(yùn)算過(guò)程
數(shù)乘 = 元素相乘

多通道 就得到 每個(gè)通道的卷積結(jié)果

卷積運(yùn)算
卷積繪圖

N個(gè)通道
- 如果要M 個(gè)輸出?
- M個(gè)卷積核
- Cat 拼接

發(fā)現(xiàn):
- 卷積核 通道數(shù)量 = 輸入通道
- 卷積核 總數(shù) = 輸出通道
共享權(quán)重

4個(gè)維度 的卷積核
代碼實(shí)現(xiàn)

重要的是 Conv2d 設(shè)置 : 4個(gè)參數(shù)
其他重要參數(shù)
padding 圖像外填充 讓 i/o 大小不變
填充0
卷積 = 線性計(jì)算
stride 步長(zhǎng) 降低卷積結(jié)果的w/h
Max Pooling Layer 下采樣
- 通道數(shù)量不變,找區(qū)域內(nèi)最大



重點(diǎn) 維度相關(guān):在輸出 是否和 全連接層 維度對(duì)應(yīng)
- 手算
- pytorch 輸出看看維度 【常用】

view 改變 網(wǎng)絡(luò)為 全連接網(wǎng)絡(luò)

為什么 最后一層 不用激活?
怎么用 GPU
cuda : num (表示 顯卡 索引)

to(device) 就可以把模型、數(shù)據(jù)給 顯卡

錯(cuò)誤率 降低了30%
練習(xí)

》》》》》》》》》》》》》》》》
11 CNN(高級(jí)版)
2種 復(fù)雜 CNN
LeNet 5
GoogLeNet
》 常作為 基礎(chǔ)框架

減少代碼冗余:函數(shù)/類

塊 封裝成 類
- Inception 盜夢(mèng)空間

有多種 構(gòu)造方式
提供幾種 候選的 卷積核
Concatenate 張量拼接,多種路徑下的張量的 拼接

Average Pooling 平均池化
- 1X1 Conv 作用
- 每個(gè)通道
- 可以跨越不同通道 相同位置的信息
- 信息融合
信息融合算法,加權(quán)求和


為什么有 192個(gè)通道?

增加 1X1 的卷積,節(jié)省 計(jì)算量
造卷積


放數(shù)組 ,用 cat ,維度為1

? Net里是什么?

【 位置 讓pytorch 來(lái)求,減少錯(cuò)誤
重點(diǎn) 使用了2 個(gè) Inception 模塊

根據(jù)test 來(lái)決定網(wǎng)絡(luò)是否訓(xùn)練好
每個(gè)新高點(diǎn) 存盤
梯度消失
Residual net 可以解決 梯度消失問(wèn)題
梯度 趨近于 0 難更新 =》 離輸入近的 難更新
古早: 鎖層
Residual net

加 x ,導(dǎo)數(shù) + 1 ,梯度 不為 0
Plain net
Residual net, 有池化層


代碼實(shí)現(xiàn)

把 計(jì)算圖 翻譯為 代碼

網(wǎng)絡(luò)復(fù)雜 用一些類來(lái)封裝
分布式 漸增網(wǎng)絡(luò) 【增量式開(kāi)發(fā)】
練習(xí)

很多 Residual net 的設(shè)計(jì)
可以用 minist 做測(cè)試

Densely Net
后面的路
- 理論《深度學(xué)習(xí)》花書
- 工程、理論
- 閱讀 PyTorch 文檔(通讀一遍)
- 復(fù)現(xiàn) 經(jīng)典工作(代碼下載 -> 跑 【會(huì)配置環(huán)境】 應(yīng)該
- 讀代碼 開(kāi)源代碼(系統(tǒng)架構(gòu)、訓(xùn)練架構(gòu)、測(cè)試架構(gòu)、數(shù)據(jù)讀取架構(gòu)、損失函數(shù)構(gòu)建)
- 寫代碼
- 擴(kuò)充 視野
- 知識(shí) 盲點(diǎn)(寫代碼的)
- 。。
- 需要長(zhǎng)時(shí)間 積累