- 第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
- 加載資料
預加載資料
填充資料
從檔案讀取資料