TensorFlow基礎筆記
tensorflow的依賴包protocol buffer(處理結構化數據的工具)(XML和JSON也是)和bazel
protocol buffer是二進位流,不是字元串,還原的時候需要一個格式schema,所以數據小,格式文件保存在.proto文件里,每一個message代表了一類結構化的數據
bazel是自動化構建工具,相比makefile等更加出色,workspace是一個基本概念,通過build文件來找需要編譯的目標,可以支持三種編譯方式py_binary(可執行文件),py_library(庫函數),py_test(編譯測試程序)build裡面有一個deps是給出的依賴關係
tf.get_default_gragh()獲取當前默認的計算圖
tf.Gragh()生成新的計算圖
tf.Gragh.device指定運行計算的設備
tf.add_to_collection()可以將資源加到一個或多個集合當中
常用的集合有(自動維護的)VARIABLES(所有變數).TRAINABLE_VARIABLES(可學習的變數)SUMMARIES(日誌生成相關的張量)QUEUE_RUNNERS(處理輸入的QUEUERUNNER)
MOVING_AVERAGE_VARIABLES(所有計算了滑動平均值的變數)
張量,簡單理解就是多維數組,tensorflow中保存的是它的計算過程而不是結果
有三個屬性:name, shape維度,type類型
張量本身不存儲具體數字,可以使用sess.run(result)來得到結果,session得到具體的數字
使用with不需要close()
InteractiveSession()註冊為默認會話
ConfigProto()可以配置allow_soft_placement,gpu可以放cpu上,log_device_placement。記錄每個節點安排在哪個設備上以方便調試
stddev=1(好像是標準差的意思)seed=1(隨機種子,不懂)
tf.initialize_all_variables()初始化所有變數
placeholder是定義存放輸入數據的地方,數據類型需要指定,
交叉熵(損失函數)與softmax回歸(變成概率分布)一起使用,反向傳播優化演算法,
激活函數(線性和非線性)輸出的時候做的變換
回歸問題常用均方誤差MSE定義損失
優化方法:反向傳播演算法和梯度下降演算法,學習率(指數衰減法)在此定義,只有當損失函數為凸函數的時候,梯度下降演算法才能保證達到全局最優解。
避免過擬合:L1正則化(會讓參數變的更稀疏),L2正則化
集合,可以在一個計算圖中保存一組實體(比如張量)
滑動平均模型,decay,用於控制模型更新的速度,越大的時候模型就越穩定,一般會設成接近1的數,前期為了更新的快一些,可以動態設置這個衰減率,
tf.variable_scope函數生成一個上下文管理器(可以嵌套)。get_variable獲取已經創建的變數
tf.train.Saver()用於保存模型。
saver.restore載入已經保存的模型
variables_to_restore生成tf.train.Saver類所需要的變數重命名字典
convert_variables_to_constants可以將計算圖中的變數以及取值通過常量的方式保存
圖像處理:裁剪,翻轉,色彩調整,標註框,
存放到TFRecord格式中
多線程,隊列不僅僅是一種數據結構,還是非同步計算張量取值的一個重要機制,tf.Coordinator(協調線程一起停止)和tf.QueueRunner(啟動多個線程來操作同一個隊列)
循環神經網路(RNN):主要用處理和預測序列數據,記憶之前的信息,循環神經網路可以被砍走是同一神經網路結構在時間序列上被複制多次的結果,如何設計循環體的網路結構是循環神經網路解決實際問題的關鍵。如果序列過長會導致優化時出現梯度消散的問題,所以會規定一個最大長度
長短時記憶網路(LSTM):三個門(門:一個使用sigmoid神經網路和一個按位做乘法的操作),遺忘門和輸入門至關重要。
還有雙向循環神經網路和深層循環神經網路
ptb文本數據集——語言模型學習的數據集
TFLearn對模型進行了一些封裝
tensor board - -logdir=/path/to/log啟動tensorboard
tf.viaiable_scope和tf.name_scope管理變數的命名空間,唯一的區別是使用tf.get_variable函數時
TAG:書香山林 |