JavaShuo
欄目
標籤
《TensorFlow實戰》讀書筆記(完結)
時間 2019-12-09
標籤
TensorFlow實戰
讀書
筆記
完結
简体版
原文
原文鏈接
1 TensorFlow基礎
---1.1TensorFlow概要
TensorFlow使用數據流圖進行計算,一次編寫,各處運行.
---1.2 TensorFlow編程模型簡介
TensorFlow中的
計算
是一個
有向圖
,每個
運算操做
都是一個
節點
.每個節點能夠有
任意多個輸入和輸出
,在計算圖的邊中
流動(flow)
的數據被稱爲張量
(tensor)
.
一個
運算操做
表明了一種類型的
抽象運算
,運算操做的全部屬性必須被
預先設置
,或者能在建立計算圖時被
推斷
出來.
Variable爲變量
,在建立時賦值,它能夠將tensor儲存在內存或顯存中.
placeholder爲形參
,能夠在計算圖中賦值.
Session
是
交互接口
,經過Run方法能夠執行計算圖,TensorFlow會自動尋找全部須要計算的節點並按依賴順序執行它們.
TensorFlow能夠根據鏈式法則
自行計算梯度
,從而實現
反向傳播
.
在使用高階語言的
控制流
時,它們會被
自動編譯
爲TensorFlow的原生控制流.
2 TensorFlow和其餘深度學習框架的對比(略)
3 TensorFlow第一步
---3.1 TensorFlow的編譯及安裝(略)
---3.2 TensorFlow實現Softmax Regression識別手寫數字
從TensorFlow自動導入MNIST數據集失敗的話能夠手動下載.
多分類任務最後一層一般使用
Softmax
,用於計算某個類的機率分佈.而損失函數則選用
交叉熵
.
TensorFlow算法
設計的核心步驟
是:
定義算法公式,也就是前向計算
定義loss,選定優化器,而且指定優化器優化loss
迭代地對數據進行訓練
在測試集或驗證集上對準確率進行評測
4 TensorFlow實現自編碼器及多層感知機
---4.1 自編碼器簡介
使用
少許的基本特徵組合
能夠獲得更高層抽象的特徵,因此須要多層神經網絡.
自編碼器就是用
自身的稀疏的高階特徵編碼本身
,輸入節點和輸出節點是一致的,所以須要加入幾種限制以防單純地複製:
減小中間隱含層節點的數量
,並使用
L1正則化控制稀疏程度
給數據加入
噪聲(如高斯噪聲)
.
經過自編碼器和監督學習的結合,能夠解決
梯度彌散
問題,訓練深層網絡.也能夠利用學習到的高階特徵來實現降維.
---4.2 TensorFlow實現自編碼器
使用的是
Xaiver初始化
,它會根據某一層網絡的輸入和輸出節點自動調整最合適的分佈,也就是讓權重知足均值爲0,方差爲2/(nin+nout).可使用tf.random_uniform建立一個
(-sqrt(6/(nin+nout)),sqrt(6/(nin+nout)))
的均勻分佈來實現.
將輸入數據加上噪聲,而後與權重w1相乘後加上偏置b1,再通過激活函數處理後獲得隱含層的結果.將隱含層的結果與權重w2相乘後加上偏置b2就獲得了輸出.
損失函數選用
平方偏差
.
訓練前先對數據進行標準化處理,須要
先在訓練集上fit出一個scaler
,而後將它用到訓練和測試數據上.
去噪自編碼器的實現和一個單隱含層的神經網絡差很少,只不過在數據輸入時作了標準化,並加上了高斯噪聲,同時輸出結果是復原的數據而非分類結果.
---4.3 多層感知機簡介
Dropout
是在訓練時將神經網絡某一層的輸出節點數據
隨機丟棄一部分(訓練時小於1,預測時等於1)
,這等於
創造出了不少新的隨機樣本
,也算是一種bagging.
ReLU
解決了Sigmoid的
梯度彌散
問題,FCN和CNN的隱含層通常都使用ReLU及其變種,可是輸出層通常仍是使用接近機率輸出分佈的Sigmoid.主要變化是:
單側抑制
相對寬闊的興奮邊界
稀疏激活性
---4.4 TensorFlow實現多層感知機
ReLU層
的
權重
能夠用
截斷正態分佈
進行初始化,
偏置
能夠用一些
小的非零值
來初始化以
避免dead neuron
.
Sigmoid層
的
權重
和
偏置
則都初始化爲
0
便可.
使用ReLU做爲隱藏層,並添加dropout,就實現了多層感知機.
5 TensorFlow實現卷積神經網絡
---5.1 卷積神經網絡簡介
CNN最初是爲解決圖像識別等問題而設計的,由於
圖像特徵難以人工提取
.
CNN能夠
利用空間結構關係減小須要學習的參數
,從而
提升反向傳播的效率
.
CNN的一個卷積層一般都進行如下操做:
經過卷積核的
濾波並添加偏置
,提取出局部特徵.
將濾波輸出結果進行
非線性激活函數處理
(如ReLU).
對激活函數的結果進行
池化操做
(如最大池化).
能夠再加上
BN層
或
LRN層
.
CNN通常由
多個卷積層
構成,每一個卷積層能夠對應多個卷積核,每一個卷積核的輸出圖像對應一種圖片特徵.單個卷積核是
權值共享
的.
局部鏈接
和
權值共享下降了參數量
,賦予了CNN對
平移的容忍性
,
池化層降採樣
進一步降
低了參數量
,賦予了對
輕度形變的容忍性
,提升了泛化能力.
---5.2 TensorFlow實現簡單的卷積網絡
激活函數選用ReLU,因此使用截斷的正態分佈初始化權重來打破徹底對稱,使用小的正值(0.1)來初始化偏置以免死亡節點.
兩個卷積層,一個全鏈接層,一個Dropout層和一個Softmax層的CNN在MNIST上的準確率已經達到了99.8%.
---5.3 TensorFlow實現進階的卷積網絡
CIFAR-10是一個經典的圖像數據集,包含60000張32*32的彩色圖片,訓練集50000張,測試集10000張.這裏按書下載數據集時出現了一些問題,因而手動將cifar10.py和cifar10_input.py移到了notebook的根目錄下,而且在運行時添加如下代碼:
tf.app.flags.DEFINE_string(
'
f
'
,
''
,
'
kernel
'
)
在這個CNN中使用了新的技巧:
對權重進行
L2正則化
,用於懲罰特徵權重.
對圖片進行翻轉,隨機剪切等
數據加強
,製造更多樣本
在每一個卷積-最大池化層後面使用了
LRN層(如今通常用BN層替代)
,加強模型的泛化能力.
設計CNN主要就是安排
卷積層,池化層,全鏈接層的分佈和順序
,以及它們的超參數和Trick的使用.
深度學習的特色就是
數據量越大效果越好
,這與通常的機器學習模型不一樣.
6 TensorFlow實現經典卷積神經網絡
---6.1 TensorFlow實現AlexNet
AlexNet的新技術點:
ReLU做爲激活函數,解決了Sigmoid在網絡較深時的梯度彌散問題
Dropout隨機忽略一部分神經元,避免過擬合
重疊的最大池化
LRN層
CUDA加速深度卷積網絡的訓練
數據加強,截取原始圖像的部分增長訓練數據量,預測時提取圖片的四個角和中間位置,並進行左右翻轉,對10個圖片預測並求均值.
---6.2 TensorFlow實現VGGNet
VGGNet所有使用3*3的卷積核和2*2的池化核,經過不斷加深網絡結構來提高性能.兩個3*3的卷積核
串聯
至關於1個5*5的卷積核,並且有
更多的非線性變換
.
在預測時使用
滑窗
的方式進行平均預測,在訓練時將原始圖像
縮放到不一樣尺寸再隨機裁切
來增長數據量.
VGGNet放棄了LRN層,經過多段卷積網絡將圖像變長縮小,卷積輸出通道增長.
---6.3 TensorFlow實現Google Inception Net
Inception V1去除了最後的全鏈接層,用
全局平均池化層
代替.
採用
Inception Module
結構,其中有4個分支:第一個分支是1*1卷積,第二個分支是1*1卷積鏈接3*3卷積,第三個分支是1*1卷積鏈接5*5卷積,第四個分支是3*3最大池化鏈接1*1卷積.最後經過聚合操做
在輸出通道數維度上進行合併
.
靠後
的Inception Module應該捕捉
更高階的特徵
,所以
大面積卷積核的佔比會更高
.
1*1卷積的性價比很高,能夠跨通道組織信息,並
對輸出通道升降維
.同時1*1卷積體現了Hebbian原理,即"一塊兒發射的神經元會連在一塊兒".
Inception Net有22層深,其中間某一層會做爲
輔助分類節點
,按一個小權重加到最終分類結果中.
Inception V2
用兩個3*3的卷積代替5*5的卷積
,並使用
BN層
,對每個mini-batch數據進行標準化處理.BN某種意義上起到了
正則化
的做用,因此能夠
減小或取消Dropout和L2正則
,簡化網絡結構.
Inception V3採用
Factorization into small convolutions
思想,
將一個較大的二維卷積拆成兩個較小的一維卷積
(如3*3卷積拆成3*1卷積和1*3卷積),節約了參數並減輕了過擬合.還優化了Inception Module的結構.
卷積網絡從輸入到輸出,應該讓
圖片尺寸逐漸減少
,
輸出通道數逐漸增長
,即將空間結構簡化,將空間信息轉化爲高階抽象的特徵信息.
---6.4 TensorFlow實現ResNet
ResNet的
殘差學習單元(Residual Unit)
再也不學習一個完整的輸出H(x),而是
學習殘差
H(x)-x.ResNet有不少支線將輸入直接連到後面的層,使得後面的層能夠直接學習殘差,這種結構被稱爲
shortcut
.
兩層
的殘差學習單元包含兩個相同輸出通道數的3x3卷積,
三層
的殘差學習單元則是1x1卷積,3x3卷積,1x1卷積,而且先降維再升維.
7 TensorFlow實現循環神經網絡及Word2Vec
---7.1 TensorFlow實現Word2Vec
Word2Vec是一個
將語言中的字詞轉化爲向量形式表達的模型
.
One-Hot編碼
的問題是
對特徵的編碼是隨機的
,沒有考慮字詞間的關係.而且
稀疏數據的訓練效率較低
.
向量空間模型
假設在相同語境中出現的詞的語義也相近,分爲
計數模型
(統計在語料庫中相鄰出現的詞的頻率)和
預測模型
(根據一個詞周圍的詞推測出這個詞).
Word2Vec就是一種很是高效的預測模型,分爲CBOW(Continuous Bag of Words,從原始語句推測目標詞句)和
Skip-Gram(從目標字詞推測原始語句)
.
CBOW
訓練一個
二元的分類模型
來區分真實的目標詞彙和編造的詞彙(噪聲)兩類.當模型預測真實的目標詞彙爲高几率時,學習目標就被最優化了.使用編造的噪聲詞彙訓練的方法叫
Negative Sampling
,只須要計算隨機選擇的k個詞彙,所以訓練速度很快.對應的損失函數是
Noise-Contrastive Estimation Loss
.
Skip-Gram須要先構造一個語境與目標詞彙的映射關係,即爲
選定單詞左邊和右邊滑窗尺寸數量的詞彙
.由於它是從目標詞彙預測出語境,因此數據集就是(目標詞彙,相鄰單詞).
---7.2 TensorFlow實現基於LSTM的語言模型
RNN的特色是神經元的某些輸出可做爲輸入再次傳輸到神經元中.但RNN難以記憶間隔太遠的信息.LSTM解決了這個問題.
相關文章
1.
《TensorFlow實戰》讀書筆記
2.
《TensorFlow實戰》第一章-TensorFlow基礎讀書筆記
3.
《Java8實戰》讀書筆記
4.
k8s實戰讀書筆記
5.
Maven實戰讀書筆記
6.
《MongoDB實戰》讀書筆記
7.
SpringBoot實戰讀書筆記
8.
讀書筆記------《Spring實戰》
9.
讀書筆記--《Flutter實戰》
10.
Spring4實戰讀書筆記
更多相關文章...
•
PHP 完整表單實例
-
PHP教程
•
Eclipse 添加書籤
-
Eclipse 教程
•
Tomcat學習筆記(史上最全tomcat學習筆記)
•
JDK13 GA發佈:5大特性解讀
相關標籤/搜索
TensorFlow實戰筆記
讀書筆記
FSFA 讀書筆記
MySQL 讀書筆記
Nginx讀書筆記
TensorFlow實戰
讀完
閱讀筆記
實戰總結
完結
紅包項目實戰
MyBatis教程
Redis教程
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
Mud Puddles ( bfs )
2.
ReSIProcate環境搭建
3.
SNAT(IP段)和配置網絡服務、網絡會話
4.
第8章 Linux文件類型及查找命令實踐
5.
AIO介紹(八)
6.
中年轉行互聯網,原動力、計劃、行動(中)
7.
詳解如何讓自己的網站/APP/應用支持IPV6訪問,從域名解析配置到服務器配置詳細步驟完整。
8.
PHP 5 構建系統
9.
不看後悔系列!Rocket MQ 使用排查指南(附網盤鏈接)
10.
如何簡單創建虛擬機(CentoOS 6.10)
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
《TensorFlow實戰》讀書筆記
2.
《TensorFlow實戰》第一章-TensorFlow基礎讀書筆記
3.
《Java8實戰》讀書筆記
4.
k8s實戰讀書筆記
5.
Maven實戰讀書筆記
6.
《MongoDB實戰》讀書筆記
7.
SpringBoot實戰讀書筆記
8.
讀書筆記------《Spring實戰》
9.
讀書筆記--《Flutter實戰》
10.
Spring4實戰讀書筆記
>>更多相關文章<<