(轉)Tensorflow 實戰Google深度學習框架 讀書筆記

本文大致脈絡:

讀書筆記的自我說明
對讀書筆記的摘要

具體章節的摘要:
第一章 深度學習簡介
第二章 TensorFlow環境搭建
第三章 TensorFlow入門
第四章 深層神經網絡
第五章 MNIST 數字識別問題
第六章 圖像識別和卷積神經網絡
第七章 圖像數據處理
第八章 循環神經網絡 Recurrent Neural Network
第九章 TensorBoard可視化
第十章 TensorFlow計算加速

讀書筆記的自我說明

《TensorFlow實戰Google深度學習框架》讀書筆記
讀書筆記目的是把書讀薄,每次看完一本書的半年後,對這本書的印象基本只剩零星的概念。
如果有了讀書筆記,可以用半小時重讀這本書,也可以搜索關鍵字,然後快速翻到書中的對應地方,方便查找知識點,我的一種學習方法~
具體方法:我會先看一章,把最核心的幾句話勾出來,用這幾句話回想整個章節內容,把他們默寫到電腦裏,想不起來看看書,繼續默寫。

#特殊符號:0 參數;J(0) + λR(w)
#完整代碼:說明那個地方有代碼,需要後期重新碼一遍
#圖:說明有重要的結構圖

對讀書筆記的摘要

構造一個深度學習系統需要的知識點總結:(對讀書筆記的再次提煉)

神經元:多個輸入,一個輸出,輸入可以是整個神經網絡的輸入,也可以是其他多個神經元的輸出。輸出就是所有輸入的加權和。
不同輸入的權重就是我們要調節的參數
M-P神經元模型:一個神經元接收到來自其他神經元的輸入信號,每個輸入信號都有各自權重,神經元接受的總輸入值和閾值進行比較,
然後經過激活函數的處理得到輸出。激活函數是Sigmoid函數。神經網絡就是由無數個這樣的神經元組成。
全連接層:相鄰兩層任意兩個節點之間都有連接
節點:神經元
參數:W,權重,W上部數字代表神經網絡所在的層數,下面數字:連接左右節點編號
輸出:輸入的加權和。;
前向傳播算法:無數個加權和的過程通過矩陣乘法來完成

使用監督學習方式設置參數取值,設置參數過程就是調節神經網絡的訓練過程
神經網絡優化算法:反向傳播算法,backpropagation;實現了迭代的過程;有上百萬輪迭代;會不斷更新參數取值
損失函數:刻畫當前預測值和真實值之間的差距,比如:交叉熵(cross entropy)

激活函數實現去線性化
神經網絡結果加上激活函數和偏置項bias:f(Wx +b); f(x)是激活函數,b是偏置項
每個神經元的輸出經過非線性函數,整個模型就不是非線性了。這個非線性函數就是激活函數。
三個常見激活函數:ReLU激活函數,Sigmoid激活函數,tanh函數;
交叉熵(cross entropy)損失函數判斷兩個概率分佈之間的距離,判定實際的輸出與期望的輸出的接近程度。也可以用來判斷多分類問題

Softmax迴歸把前向傳播算法得到的結果變成了概率分佈;稱作Softmax層,位於最終輸出層之前,原始輸出層之前。
分類問題用的損失函數:交叉熵
迴歸問題常用的損失函數是均方誤差MSE:mean squared error

反向傳播法和梯度下降法調整神經網絡中參數的取值。
梯度下降優化單個參數,反向傳播算法在所有參數上使用梯度優化算法。
0 : 參數;J(0):損失函數
優化目標:尋找0,讓 J(0)最小。
梯度下降法迭代更新參數 0,沿着梯度的反方向讓參數朝着總損失更小的方向移動。
梯度通過求偏導數計算
學習率定義每次參數更新幅度
損失函數爲凸函數保證梯度下降達到最優解。
梯度下降缺點:計算時間太長;
隨機梯度下降SGD:stochastic gradient descent加速訓練過程:隨機優化某一條訓練數據上的損失函數

過擬合:模型過分複雜,對訓練數據擬合的很好,對預測數據表現很差
正則化:避免過擬合的方法;思想:在損失函數中加入刻畫模型複雜度的指標,防止模型過度模擬訓練數據中的隨機噪音,
優化目標:J(0) + λR(w) ;λ表示模型複雜損失在總損失中的比重,類似權重;
L1正則化:求絕對值和,讓參數更稀疏:更多參數變爲0;正則化計算公式不可導;
L2正則化:這裏知識和以前概念有問題。正則化計算公式可導;
滑動平均模型讓最終模型更加健壯

具體章節的摘要:

第一章 深度學習簡介

略過,因爲我看過6本人工智能的書,已經知道了這些知識,跳過這章,加快學習進度

第二章 TensorFlow環境搭建

因爲我電腦已經裝好了,跳過這章

第三章 TensorFlow入門

三個模型:計算模型,數據模型,運行模型
3.1 TensorFlow計算模型–計算圖
所有計算轉化爲計算圖上的節點
3.1.1 計算圖的概念
TensorFlow中,張量被簡單理解爲數組,每一個計算都是計算圖中的一個節點。圖中節點之間的邊描述了計算之間的依賴關係。
節點:運算;邊:依賴關係;
3.1.2 計算圖的使用
兩個階段:定義計算階段和執行計算階段
tf.get_default_graph函數獲取當前默認計算圖
tf.Graph函數生成新的計算圖
tf.Graph.device指定運行計算設備
tf.add_to_collection函數把資源加入到一個或者多個集合中
tf.get_collection函數獲取一個集合裏面的所有資源。

3.2 數據模型 --張量
所有數據通過張量形式表現出來。張量就是數組,0階張量就是數字,1階張量是向量,也就是一維數組;n階張量就是n維數組
張量沒有保存數字,保存三個屬性:名字,維度,類型
3.2.2 張量的使用
兩類:1 對中間計算結果的引用,中間結果可以賦值給一個字母2:獲得計算結果。會話session得到具體數字
3.3 運行模型–會話
會話session執行定義好的運算
tf.InteractiveSession函數在交互式環境下構建默認會話函數

3.4 TensorFlow實現神經網絡
3.4.1 TensorFlow遊樂場及神經網絡簡介
遊樂場包含:數據集,輸入值,隱含層,輸出層,學習率,激活函數,正則化,正則化率,問題種類。
舉例:零件二分類問題;
灰色:合格;黑色:不合格。零件的判斷就變成了區分點的顏色
特徵提取:零件變成平面上的點,點的橫縱座標表示零件長度和質量
特徵向量:描述實體的數字的組合,比如(長度,質量)(X1,X2)
神經網絡包括:輸入層,隱藏層,輸出層
輸入層:代表特徵向量中每個特徵的取值,
隱藏層:輸入層和輸出層之間的都是隱藏層,可以由多個隱藏層。
輸出層:輸出層得到計算結果;輸出值和閾值比較,大於零:合格,小於零:不合格
特點:同一層不會相互連接,每一層只和下一層連接。
訓練結果分析:
小格子代表一個神經網絡節點,邊代表節點之間的連線。
邊:參數;神經網絡就是調節合適的參數解決分類迴歸問題。邊顏色越深,參數絕對值越大
節點顏色:節點的區分平面;平面每個點代表了(x1,x2)的一種取值。顏色越深,輸出值絕對值越大
神經網絡解決分類問題的步驟:
1 提取問題中實體,比如零件的特徵向量作爲神經網絡輸入
2 定義神經網絡的結構,定義如何從輸入得到輸出。如 3.4.2
3 通過訓練數據來調整參數,(得到合適的參數是我們的目的)
4 訓練好的神經網絡預測未知數據

3.4.2 前向傳播算法
神經元模型
權重:每個東西的分量,被重視的程度
閾值:類似警戒線,超過了就會有什麼結果發生。

M-P神經元模型:一個神經元接收到來自其他神經元的輸入信號,每個輸入信號都有各自權重,神經元接受的總輸入值和閾值進行比較,
然後經過激活函數的處理得到輸出。激活函數是Sigmoid函數。神經網絡就是由無數個這樣的神經元組成。

神經元:多個輸入,一個輸出,輸入可以是整個神經網絡的輸入,也可以是其他多個神經元的輸出。輸出就是所有輸入的加權和。
不同輸入的權重就是我們要調節的參數
全連接層:相鄰兩層任意兩個節點之間都有連接
節點:神經元
參數:W,權重,W上部數字代表神經網絡所在的層數,下面數字:連接左右節點編號
輸出:輸入的加權和。;
前向傳播算法:無數個加權和的過程通過矩陣乘法來完成代碼:
a = tf.matmul(x, w1) #矩陣相乘
y = tf.matmul(a,w2)

3.4.3 神經網絡參數與TensorFlow變量
變量tf.Variable:保存和更新參數
隨機數給變量賦初值:weights = tf.Variable(tf.random_normal([2,3], stddev = 2)) #2*3矩陣,均值=0;標準差=2
常數初始化變量:tf.zeros;tf.ones; tf.fill; tf.constant
偏置項bias(bias)初始化:biases = tf.Variable(weights.initialized_value()) #長度爲3,初始值爲0
tf.initialize_all_variables()初始化所有變量
變量的聲明函數tf.Variable()是一個運算,運算的結果是張量。這個張量就是這節課的變量。
tf.all_valiables函數拿到計算圖中所有變量
tf.trainable_variables()函數得到所有需要優化的參數。
變量屬性:維度,shape;類型type
變量類型一旦確定就不能改變
維度可以隨時改變

3.4.4 通過TensorFlow訓練神經網絡模型
神經網絡反向傳播優化流程圖
使用監督學習方式設置參數取值,設置參數過程就是調節神經網絡的訓練過程
神經網絡優化算法:反向傳播算法,backpropagation;實現了迭代的過程;有上百萬輪迭代;會不斷更新參數取值
batch:(一批)取小部分做測試的數據,batch取值有8
placeholder機制提供輸入數據
feed_dict是一個字典,需要給出每一個placeholder的取值,
損失函數:刻畫當前預測值和真實值之間的差距,比如:交叉熵(cross entropy)

3.4.5 完整神經網絡樣例程序
完整代碼
訓練神經網絡的過程:
1 定義神經網絡結構和前向傳播的輸出結果
2 定義損失函數以及選擇反向傳播的優化算法
3 生成會話(tf.Session)並且在訓練數據上反覆運行反向傳播優化算法。

第四章 深層神經網絡

4.1 深度學習與深層神經網絡

4.1.1 線性模型的侷限性
線性模型中,模型輸出爲輸入的加權和。特點:任意線性模型的組合仍然是線性模型

4.1.2 激活函數實現去線性化
神經網絡結果加上激活函數和偏置項:f(Wx +b); f(x)是激活函數,b是偏置項
每個神經元的輸出經過非線性函數,整個模型就不是非線性了。這個非線性函數就是激活函數。
三個常見激活函數:ReLU激活函數,Sigmoid激活函數,tanh函數;

4.1.3 多層網絡解決異或運算
感知機:單層神經網絡,無法模擬異或
加入隱藏層後,解決異或問題
深層神經網絡有組合特徵提取的功能

4.2 損失函數定義:
神經網絡模型的效果和優化的目標是通過損失函數定義的。

4.2.1 經典損失函數
通過Softmax層把神經網絡輸出變成一個概率分佈圖
神經網路解決多分類問題:設置n個輸出節點,n是類別的個數。樣本有k類,一個類對應輸出值爲1,其他爲0,這樣效果最好
交叉熵(cross entropy)損失函數判斷兩個概率分佈之間的距離,判定實際的輸出與期望的輸出的接近程度。也可以用來判斷多分類問題
比如兩個概率p爲期望輸出,概率分佈q爲實際輸出,H(p,q)爲交叉熵,則:H(p, q) = -p(x)logq(x) 的和;
事件總數是有限的情況下,概率分佈p(X =x)滿足:0<P<1,概率和爲1
Softmax迴歸處理:神經網絡的原始輸出不是一個概率值,實質上只是輸入的數值做了複雜的加權和與非線性處理之後的一個值而已,
Softmax迴歸把前向傳播算法得到的結果變成了概率分佈;稱作Softmax層,位於最終輸出層之前,原始輸出層之前。
交叉熵值越小,兩個概率分佈越近,效果越好。代碼實現交叉熵:
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, le-10, 1.0)))
y_代表正確結果,y代表預測結果
tf.clip_by_value函數限制張量數值在一個範圍內
v1 * v2 :矩陣每個位置對應元素的乘積
tf.matmul函數矩陣乘法運算
分類問題用的損失函數:交叉熵
迴歸問題解決對數值的預測。常用的損失函數是均方誤差MSE:mean squared error,代碼:
mse = tf.reduce_mean(tf.square(y_ -y))

4.2.2 自定義損失函數
例子:預測商品銷量,代碼:loss = tf.reduce_sum(tf.select(tf.greater(v1, v2), (v1 - v2) * a, (v2 - v1)*b))
tf.greater函數比較兩個張量的大小; tf.select函數選擇第二個參數的值或者第三個值,
相同的神經網絡,損失函數不同,訓練得到的模型不同。

4.3 神經網絡優化算法
反向傳播法和梯度下降法調整神經網絡中參數的取值。
梯度下降優化單個參數,反向傳播算法在所有參數上使用梯度優化算法。
0 : 參數;J(0):損失函數
優化目標:尋找0,讓 J(0)最小。
梯度下降法迭代更新參數 0,沿着梯度的反方向讓參數朝着總損失更小的方向移動。
梯度通過求偏導數計算
學習率定義每次參數更新幅度
損失函數爲凸函數保證梯度下降達到最優解。
梯度下降缺點:計算時間太長;
隨機梯度下降SGD:stochastic gradient descent加速訓練過程:隨機優化某一條訓練數據上的損失函數

4.4 神經網絡進一步優化
指數衰減的方法設置梯度下降算法的學習率。
滑動平均模型把每一輪迭代得到的模型綜合起來,從而使得最終得到的模型更加健壯

4.4.1 學習率的設置
學習率過大,會一直搖擺,太小,需要時間太長;所以學習率不可以過大,也不可以過小
tf.train.exponential_decay函數實現了指數衰減學習率。讓學習率先快後慢
參數staircase選擇不同的衰減方式;

4.4.2 過擬合問題
過擬合:模型過分複雜,對訓練數據擬合的很好,對預測數據表現很差
正則化:避免過擬合的方法;思想:在損失函數中加入刻畫模型複雜度的指標,防止模型過度模擬訓練數據中的隨機噪音,
優化目標:J(0) + λR(w) ;λ表示模型複雜損失在總損失中的比重,類似權重;
L1正則化:求絕對值和,讓參數更稀疏:更多參數變爲0;正則化計算公式不可導;
L2正則化:這裏知識和以前概念有問題。正則化計算公式可導;

4.4.3 滑動平均模型
滑動平均模型讓模型在測試數據上更加健壯。
tf.train.ExponentialMovingAverage函數實現滑動平均模型。
shadow_variable函數爲影子變量,variable爲代更新的變量,decay爲衰減率。

第五章 MNIST 數字識別問題

5.1 MNIST數據處理
MNIST是一個手寫數字識別數據集。是NIST數據集的子集。包含60000張圖片作爲訓練集, 10000測試集。
圖片包含0-9數字,圖片大小爲2828
TensorFlow的類會自動下載並且轉化MNIST格式。
input_data.read_data_sets函數自動把MNIST裏面數據集分爲訓練,驗證,測試部分。處理後的圖片是一個784(28
28)的數組。數組取值範圍是0-1,代表顏色深淺。
mnist.train.next_batch函數獲取一部分數據作爲一個訓練batch.

5.2 神經網絡模型訓練及不同模型結果對比

5.2.1 TensorFlow訓練神經網絡
這裏有完整代碼,調用了前面所有的方法。

5.2.2 使用驗證數據集判斷模型效果
如何設置7種不同的參數,比如:初始學習率,學習率的衰減率,隱藏層節點數,迭代輪數;
5.2.3 不同模型效果比較

5.3 變量管理
一個好機制:通過變量名稱創建和獲取一個變量而不是把變量通過參數形式到處傳遞。
tf.Variable函數創建變量。
tf.get_variable函數創建或者獲取變量
tf.constant函數和tf.constant_initializer函數功能一致:把變量初始化爲常數
tf.variable_scope函數生成一個上下文管理器。這個管理器也會創建一個命名空間。

5.4 TensorFlow模型持久化
持久化:重複使用訓練得到的模型
5.4.1 持久化代碼實現
API:tf.train.Saver類保存還原一個神經網絡模型。
模型保存格式:.ckpt,包含三個文件:model.ckpt.meta:保存神經網絡結構;model.ckpt保存變量取值;checkpoint保存模型文件列表
加載已經保存的模型:saver.restore函數
直接加載持久化的圖:tf.train.import_meta_graph函數
保存或者加載部分變量tf.train.Saver(列表)
通過字典保存或者加載時候給變量重命名tf.train.Saver({},{})
重命名的目的是方便使用變臉的滑動平均值
variable_to_restore函數生成tf.train.Saver類需要的變量重命名字典。
convert_variables_to_constants函數把計算圖中的變量保存爲常量

5.4.2 持久化原理及數據格式
跳過
5.5 TensorFlow最佳樣例實現程序
5.2.1 中的完整程序存在缺點:可擴展性不好;參數更多,可讀性差;大量冗餘代碼;沒有持久化模型;程序死機不可控成本;
代碼重構:mnist_inference.py 定義前向傳播過程以及神經網絡中的參數
mnist_train.py定義訓練過程
mnist_eval.py定義測試過程

第六章 圖像識別和卷積神經網絡

Convolutional Neural Network:CNN卷積神經網絡

6.1 圖像識別問題簡介及經典數據集
Cifar數據集,圖片32*32彩色圖片。圖片僅有一個東西。Cifar官網可以下載圖片
圖像詞典項目:Visual Dictionary
斯坦福大學李飛飛整理的ImageNet圖像數據庫有1500張圖片,每張彩色圖片裏面有各種不同的東西。
框出實體的矩形叫做:bounding box;
圖像識別競賽:ImageNet Large Scale Visual Recognition Challenge,ILSVRC

6.2 卷積神經網絡簡介
卷積神經網絡結構示意圖
特點:相鄰兩層只有部分節點相連,每層卷積層的節點組織成一個三維矩陣。
輸入層:圖像原始像素;
輸出層:節點代表類別可信度

卷積和全連接網絡唯一區別就是相鄰兩層連接方式不同。

全連接層的問題是參數太多。卷積可以大量減少參數數目
卷積神經網絡組成:
輸入層:圖片像素矩陣;每一層結點都是一個三維矩陣;三維矩陣長寬代表圖片大小;三維矩陣深度代表圖片色彩通道RGB。
卷積層:每個節點輸入是上一層神經網絡的一部分。比如33;55卷積層讓節點矩陣更深
池化層:不改變三維矩陣深度,只是縮小矩陣大小。圖片分辨率降低,縮小全連接層節點個數,減少參數
全連接層:完成分類任務
Softmax層:迴歸把前向傳播算法得到的結果變成了概率分佈;位於最終輸出層之前,原始輸出層之前。
32323表示32*32圖片大小,3個RGB色彩通道

6.3 卷積神經網絡常用結構
卷積層結構及其前向傳播算法;
6.3.1 卷積層

過濾器或者內核:把當前子結點矩陣轉化爲下一層的單位節點矩陣(長寬爲1,深度不限的矩陣)想象成一個長方體,無限長的集裝箱。
過濾器把不規則的矩形鑄造成了規則矩形。
過濾器尺寸:33;55;人工設置;指輸入節點大小;
過濾器深度:單位矩陣深度;人工設置;指輸出節點大小;
過濾器計算:加權和
前向傳播過程就是通過左側小矩陣的節點計算出右側單位矩陣節點的過程。
卷積層結構的前向傳播過程就是通過一個過濾器從當前層的左上角移動到右下角,並且在移動中計算對應的單位矩陣。
全零填充和設置過濾器移動的步長可以調整矩陣的大小。
每一個卷積層中過濾器中的參數都一樣
共享卷積層中過濾器的參數可以減少神經網絡上的參數,
卷積層參數和圖片大小無關,只和過濾器尺寸,深度和當前層節點矩陣的深度有關

6.3.2 池化層
池化層有效縮小矩陣尺寸,減小全連接層參數,加快計算速度,防止過擬合
過濾器計算:平均值運算或者最大值
最大池化層:採用最大值運算
平均池化層:採用平均值運算
過濾器移動和卷積層類似,區別在於,卷積層過濾器是橫跨整個深度的。池化層隻影響一個深度節點。

6.4 經典卷積網絡模型

6.4.1 LeNet-5 模型
不同卷積層是串聯的
1998年教授成果,缺點:無法處理類似ImageNet大型數據集,處理手寫數字還是可以的。
大部分神經網絡過濾器深度都會逐層遞增。
1:卷積層
2:池化層
3:卷積層
4:池化層
5:全連接層
6:全連接層
7: 全連接層
完整代碼

6.4.2 Inception-v3 模型
卷積層並聯。
6.5 卷積神經網絡遷移學習
遷移學習:訓練好的數據模型簡單調整後應用到新的數據集上
6.5.1 遷移學習介紹
隨着模型層數和複雜度增加,錯誤率也會降低。

6.5.2 TensorFlow實現遷移學習
完整代碼

第七章 圖像數據處理

卷積神經網絡給圖像識別技術帶來了突破性進展
圖像預處理可以讓模型儘可能小的被無關因素影響
TensorFlow多線程處理輸入數據

7.1 TFRecord輸入數據格式
TFRecord輸入數據格式是TensorFlow中統一的數據格式。

7.1.1 TFRecord格式介紹
tr.train.Example 包含字典

7.1.2 TFRecord 樣例程序

7.2 圖像數據處理
圖像經過預處理,可以儘量避免模型受到無關因素的影響。
7.2.1 TensorFlow圖像處理函數
圖片還原爲三維矩陣,需要解碼。
tf.image.resize_image函數調整圖像大小
tf.image.resize_image_with_crop_or_pad函數,圖片裁剪或者填充
原始圖像大於目標圖像:進行裁剪
原始圖像小於目標圖像:原始圖像四周用0填充(四周都是黑色)
tf.image.flip_up_down函數上下翻轉
tf.image.flip_left_right函數左右翻轉
tf.image.transpose_image函數沿着對角線翻轉
tf.image.adjust_brightness函數調整圖像亮度
tf.image.adjust_contrast函數調整對比度
tf.image.adjust_hue函數調整圖像色相
tf.image.adjust_saturation函數調整圖像飽和度
tf.image.draw_bounding_boxes函數在圖像中添加標註框
tf.image.sample_distorted_bounding_box函數隨機截取圖像。

7.2.2 圖像預處理完整案例

7.3 多線程輸入數據處理框架

7.3.1 隊列與多線程
隊列和變量類似都是計算圖上有狀態的節點。
Enqueue函數添加元素到隊列
enqueue_many函數初始化隊列
dequeue函數讓隊列中的第一個元素出隊列
tf.FIFOQueue函數創建先進先出隊列
randomShuffleQueue函數把隊列中的元素打亂
tf.Coordinator函數和tf.QueueRunner函數完成多線程協同的功能。
tf.QueueRunner函數啓動多個線程來操作同一個隊列。

7.3.2 輸入文件隊列
tf.train.string_input_producer函數創建一個輸入隊列,輸入隊列中的文件列表爲tf.train.match_filenames_noce函數獲取的文件列表

7.3.3 組合訓練數據
tf.train.batch函數和tf.train.shuffle_batch函數把單個的樣例組織成batch的形式輸出,也提供了並行化處理輸入數據的方法

7.3.4 輸入數據處理框架
輸入數據處理流程示意圖

完整代碼

第八章 循環神經網絡 Recurrent Neural Network

LSTM:long short-term memory長短時記憶網絡
循環神經網絡在自然語言處理,機器翻譯和時序分析方面應用

8.1 循環神經網絡簡介
全連接神經網絡參數過多,無法利用數據中時間序列信息。每層之間的節點沒有連接。
循環神經網絡隱藏層內部的節點是有連接的,外部也有連接,隱藏層輸入包括輸入層輸出,還有上一時刻隱藏層的輸出。
單個循環神經網絡對於每一個時刻的輸入結合當前模型狀態給出一個輸出。
循環神經網絡當前狀態是由上一時刻狀態和當前的輸入共同決定的。
循環神經網絡要求每個時刻都有輸入,但不是每個時刻都有輸出。
循環神經網絡可以被看做同一個神經網絡結構在時間序列上被複制多次的結果。
卷積神經網絡過濾器中參數共享,在循環神經網絡中,循環體網絡結構中的參數在不同時刻也是共享的。

循環神經網絡中狀態是通過一個向量來表示的,向量維度稱爲循環神經網絡隱藏層的大小。
循環神經網絡總損失爲所有時刻上的損失函數的總和。
循環神經網絡序列過長會導致優化時候出現梯度消散問題。

8.2 長短時記憶網絡 LSTM結構
長短時記憶網絡用來解決單詞對不同語句長度的依賴程度。
LSTM結構有三個門:輸入門,輸出門,遺忘門
遺忘門:忘記無用信息;忘記沒用信息後需要從當前輸入補充最新的記憶,這個過程由輸入門完成。
門結構就是使用sigmoid神經網絡和一個按位做乘法的操作。
門結構讓信息有選擇性的影響循環神經網絡每個時刻的狀態。
門打開(輸出1):全部信息通過;門關係(輸出0):任何信息無法通過。

8.3 循環神經網絡變種

8.3.1 雙向循環神經網絡和深層循環神經網絡
雙向循環神經網絡:當前狀態和前後狀態都有關。主體結構:兩個單向循環神經網絡的結合。
深層循環神經網絡:每一個時刻上的循環體重複多次。
MultiRNNCell類實現深層循環神經網絡的前向傳播過程。

8.3.2 循環神經網絡的dropout
dropout讓卷積神經網絡更加健壯也會讓循環神經網絡更加健壯
卷積神經在最後的全連接層使用dropout,循環神經網絡在不同層之間使用dropout,而不在同一層使用dropout
tf.nn.rnn_cell.DropoutWrapper類實現dropout功能。

8.4 循環神經網絡樣例應用

8.4.1 自然語言建模
語言模型的目的是爲了計算一個句子出現的概率
n-gram方法,決策樹,最大熵模型,條件隨機場,神經網絡語言模型都可以進行參數估計。
複雜度:評價語言模型效果好壞,。通過一個語言模型估計一句話出現的概率。
複雜度其實是平均分支系數,即模型預測下一個詞時的平均可選擇數量。
循環神經網絡也可以對自然語言建模。
PTB文本數據集是語言模型學習中最廣泛使用的數據集。
使用循環神經網絡實現語言模型完整代碼

8.4.2 時間序列預測
完整代碼預測正弦函數;TFLearn

第九章 TensorBoard可視化

訓練神經網絡十分複雜,有時候需要幾天甚至幾周的時間。

9.1 TensorBoard簡介
TensorBoard是TensorFlow的可視化工具,它通過TensorFlow程序運行過程中輸出的日誌文件可視化TensorFlow程序的運行狀態。
TensorBoard會隨着TensorFlow安裝被自動安裝。

9.2 TensorFlow計算圖可視化
TensorBoard可以展示TensorFlow計算圖
9.2.1 命名空間與TensorBoard 圖上節點
TensorBoard支持通過TensorFlow命名空間來整理可視化效果圖上的節點。
除了自動方式,TensorBoard也支持手動調整可視化效果。

9.2.2 節點信息
TensorBoard還可以展示節點信息及運行時候消耗的時間和空間。

9.3 監控指標可視化
TensorBoard可以可視化TensorFlow運行過程中各種有助於瞭解程序運行狀態的監控指標。

第十章 TensorFlow計算加速

沒有條件搞多個CPU,GPU,暫時放棄,有需要再看。

以上是我的讀書筆記,也是我的學習方法,你的學習方法是怎樣的呢?歡迎留言交流。謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章