課程概要
1、tensorflow介紹
2、代碼展示
一、tensorflow介紹
1、什麼是tensorflow?
- 針對數量計算的使用數據流圖流程圖開源軟件庫
- 由Google Brain團隊開發的機器學習的研究
- Tensorflow 是表現機器學習算法的接口,以及執行算法的執行器。
2、編程模型
主要思想:將數量計算表現爲圖(graph)
- 圖節點表示是針對輸入的操作(operation)以及輸出
- 圖邊表示節點之間流動的張量(tensor)
- 變量(variable)是狀態節點,輸出他們自己的值。如b,W
- 佔位節點(Placeholders)是在執行的時候會被喂入值的節點。如x
- 數學運算
- MatMul:兩個矩陣的值相乘 Multiply two matrix values.
- Add: 對應元素相加
- ReLU: 對應元素的激活函數
對應代碼:
- 創建權重,並進行初始化W~Uniform(-1,1);b=0
- 創建x的輸入佔位節點(placeholder):m*784的輸入矩陣
- 建立流程圖(flow graph)
代碼運行時,會自動在目前圖(graph)中自動生成新的節點。
3、節點運行
在定義好了節點以後,我們可以爲圖部署一個會話(session):和目前的執行環境相聯繫。
在代碼上的體現是sess.run(fetches,feeds)
- Fetches:一系列圖節點,返回這些節點的輸出
- feeds:從圖節點字典映射到具體的值。
4、模型訓練
- 定義損失:建立一個placeholder來表示標籤(labels),基於標籤和預測來構建損失節點。
- 梯度計算:通過下面第一行的代碼,我們可以把優化運算加入到運算圖中,同時指定損失函數是cross_entropy,學習率是0.5。除了這種優化方法以外,還有其他的優化器。這些優化器可以自動後饋計算參數的梯度。
- 訓練模型的步驟
- 創建會話(session)
- 建立訓練計劃
- 運行優化器 train_step
5、變量共享問題
有的時候我們會使用很多個GPU來訓練神經網絡,這個時候就涉及到變量共享的問題。
有一種方法是在一開始就建立變量字典,用一些字符串來代表變量,但是不利於封裝。
解決方法是建立一個變量層(variable scope)
- tf.variable_scope() :提供一個層級來避免命名衝突
- tf.get_variable() :當已經存在該變量的時候,就從命名層獲取該變量;當不存在時就創建該變量
6、簡單總結
- 構建圖
- 前饋/預測
- 優化(梯度和train_step運算)
- 初始化一個會話
- 使用session.run(train_step, feed_dict)訓練
二、代碼展示
1、以線性迴歸爲例
繪製出來的圖像
2、skip-gram
計算結果