天天看點

《TensorFlow技術解析與實戰》學習筆記2

  • 第4章 TensorFlow基礎知識

裝置層和網絡層gRPC(google Remote Procedure Call Protocol),RDMA(Remote Direct Memory Access)

資料操作層:卷積函數,激活函數。

圖計算層

API層

應用層

指令式程式設計Imperative Style Programming,即通常意義上的程式。t=8+9; print(t)

符号式程式設計Symbolic Style Programming。

先定義變量,建立資料流圖,規定各個變量之間的計算關系,進行編譯。t=tensorflow.add(8,9); print(t)

涉及的運算放在圖中,圖的運作隻在Session中。開啟會話後,用資料填充節點進行運算。

Input/Reshape/Relu Layer/Logit Layer/Softmax/Cross Entropy/gradient/SGD Trainer

資料流圖,節點、邊組成的有向無環圖Directed Acycline Graph。

  • 邊Edge

兩種連接配接關系:

資料依賴,實線,代表資料(張量)。Forward Propagation,殘差Backward Propagation。

控制依賴Control Denpendency,虛線,Happens-before。沒有資料流過,源節點必須先于目的節點執行前,完成執行。

  • 節點

算子,代表一個操作。

輸入起點、輸出終點。

讀取、寫入持久變量(Persistent variable)終點。

  • 其他

圖,

會話,feed/fetch, extend添加邊和接單,run

裝置,比如指定在哪個GPU上運作。

變量,在圖中有固定位置,不能流動。

核心,

常用API

tf.Graph

tf.Operation

tf.Tensor

tf.Summary

name_scope

variable_scope

Batch Normalization

網絡深度加深,會導緻梯度消失Vanishing Gradient Problem。

Internal Covariate Shift,Source Domain/Target Domain的資料分布是一緻的。

Generalization

用在激活函數之前。加大了梯度。收斂速度慢或梯度爆炸等無法訓練的情況下。

激活函數、卷積函數,池化函數,損失函數,優化器。

  • 激活函數

激活函數:運作時激活神經網絡中某一部分神經元,将激活資訊傳入下一層的神經網絡。神經網絡能夠解決非線性問題,就是激活函數加入了非線性因素。

神經網絡的資料基礎是處處可微。

激活函數不會更改輸入資料的次元。tf.nnsigmoid():最常用。

sigmoid():最常用之一。有點是(0, 1),缺點是軟飽和性。輸入特征相差不明顯時較好。

a = tf.constant([[1.0, 2.0], [1.0, 2.0], [1.0, 2.0]])

sess = tf.Session();

sess.run(tf.sigmoid(a))

(我這裡加print 會出錯)

tanh():最常用之二。以0為中心,收斂速度快。軟飽和性。輸出特征相差明顯時較好。

relu():最收歡迎的。有時輸入資料可以不用規範化。

softplus():relu的平滑版本。硬飽和,導緻對應的權重無法更新,神經元死亡。

relu6()

crelu()

elu()

bias_add()

softsign()

dropout():一個神經元以keep_prob機率是否被抑制。被抑制輸出為0,否則輸出放大到1/keep_prob。

預設神經元是獨立的,也可以通過noise_shape調節。

  • 卷積函數

在一批圖像上掃碼的二位過濾器。tf.nn

convolution():N維卷積和。

con2d():對四維輸入資料input和四維卷積核filter進行操作,然後進行二維的卷積操作,最後得到卷積之後的結果。

depthwise_conv2d():多個通道?

separable_conv2d():分離卷積核做卷積。

atrous_conv2d():孔卷積。

conv2d_transpose():conv2d的轉置。

conv1d():3維輸入的一維卷積。

conv3d():5維輸入的三維卷積。

  • 池化函數

一般用在卷積函數的下一層。

利用一個矩陣視窗在張量上掃描,将視窗中的值取最大值或平均值來減少元素個數。

avg_pool():

max_pool():

max_pool_with_argmax():最大值及所在位置。

avg_pool3d()/max_pool3d()

fractional_avg_pool()fractional_max_pool()。池化後的圖檔大小可以非整數倍的縮小。

pool():執行N維的池化操作。

  • 分類函數

sigmoid_cross_entropy_with_logits()

softmax()

log_softmax()

softmax_cross_entropy_with_logits()

sparse_softmax_cross_entropy_with_logits()

  • 優化方法

加速訓練的優化方法都是基于梯度下降的。梯度下降是求函數極值的方法,學習到最後就是求損失函數的極值問題。

BGD:Batch Gradient Descent。優點:保證收斂;缺點:速度越來越慢。

SGD:Stochastic Gradient Descent。随機梯度下降。優點:訓練資料集很大時,較快收斂;缺點:誤差,局部最優,被困。

Momentum:引入了變量V。初期加速學習;後期加快收斂。

Nesterov Momentum:

Adagrad:自适應為各個參數配置設定不同的學習率。優點:學習率的自動更改。缺點:學習率單調遞減。

Adadelta:

RMSProp:引入了一個衰減系數。

Adam:Adaptive moment estimation。

  • 模型的存儲與加載

生成檢查點檔案(Checkpoint file)。tf.train.Saver()。包含權重、變量,不包含圖結構。

生成圖協定檔案(Graph proto file)。tf.train.write_graph。隻包含圖結構。

  • 隊列和線程

FIFOQueue

RandomShuffleQueue

QueueRunner

Coordinator

  • 加載資料

預加載資料

填充資料

從檔案讀取資料

繼續閱讀