Tensorflow 實戰Google深度學習框架之計算圖學習總結

計算圖

張量可以被簡單理解爲多維數組
Tensorflow中的每一個計算都市計算圖上的一個節點,節點間邊描述了計算間的依賴關係
a.graph 因爲沒有特意指定所以計算圖應等於當前默認的計算圖
tf.graph 生成新的計算圖
不同計算圖上的張量和運算都不會共享
tf.graph.device指定運算設備
with g.device (’/gpu:0’):
result=a+b
張量
scalar o階張量 即其爲一個數
vector 第一階張量爲向量
n第n階張量爲N維數組
**運算結果引用?**表示張量中並未真正保存數字,它保存的是如何得到這些數字的計算過程。
shape(2,)表示一維了兩列 但是有兩個元素
shape(2,1)表示兩維一列
當兩數相加時類型不一樣時會報錯
a=tf.constant([1,2],name=“a” ,dtype=tf.float32)dtype指定參數類型
張量來存儲中間結果可以方便獲取中間結果。比如在卷積神經網絡中,卷基層或池化層可能會改變張量的維度,通過result.getshape函數來獲取結果張量的維度信息就可以免去人工計算的麻煩
運行模型-會話session
會話擁有並管理Tensorflow程序呢運行時的所有資源
計算完成後需要關閉會話來幫助系統回收資源,否則會出現資源泄露的問題
模式一

sess=tf.session()
sess.run(..)
sess.close()

模式二

with tf.Session() as sess:
  sess.run()

tf.Tensor.eval函數來計算一個張量的取值
Tensorflow提供了一種在交互式環境下直接構建默認會話的函數,這函數是tf.InteractiveSession 此函數會自動將生成的會話註冊爲默認會話
configproto 配置會話 可以配置類似並行的線程數,GPU分配 運算超時時間

allow-soft_placement 這是一個布爾型的參數 當設置爲true時:

  1. 無法在GPU執行
  2. 無GPU資源
  3. 運算輸入包含對cpu計算結果的引用
    以上三種情況就均可移至CPU
    log_device_placement布爾型參數 其爲true時日誌中將記錄每個節點被安排在哪個設備上,生產環境值設false可減少日誌量
    實現神經網絡
    通過特徵提取可以將實際問題中的實體轉爲空間中的點
    特徵向量是描述實體的數字的組合
    *二分類問題中閾值的問題,輸出值離閾值越遠越可靠?*因爲閾值是用來行亮比如產品是否合格的一個值,輸出的值離閾值越遠表示產品合格率要不很大要不很小,所以越遠越可靠
    神經網絡解決分類問題步驟:
  4. 提取實體,特徵向量作爲神經網絡的輸入
  5. 定義網絡結構’
  6. 訓練神經網絡
  7. 使用訓練好的神經網絡來預測未知數據
    向前傳播算法簡介
    tf,matmul()實現了矩陣乘法的功能 as 表示as矩陣對應未知的
    我認爲向前傳播算法其實就是普通從題目入手思考到結果的過程。但是不完全是這樣,不會解釋了,哈哈就這樣吧
    神經網絡參數與Tensorflow 變量的作用就是如何組織,保存,以及更新神經網絡中的參數
    weighs=tf.variable(tyf.random_normal([2,3],stddev=2))
    | |
    產生2*3矩陣 標準差爲2
    可通過mean來指定平均值
    tf.constant 產生一個給定值的常量
    例: tf.constant([1,2,3]) 得到的就是[1,2,3]
    所有用到的變量需要被初始化,也即是說雖然在變量定義時給出了變量初始化方法但這個方法並未被真正運行
    tf.global_variables_initializer 函數實現初始化所有變量的過程這樣就不用一個一個初始化了
    變量是一種特殊的張量
    random_normal()默認類型是float32,當指定64的時候便會報錯
    tf.assign(w1,w2)表示把w1的值付給w2
    雖然tensorflow支持改變變量的維度tf.assign(w1,w2,validate_shape)來實現,但一般不用
    通過tensorflow訓練神經網絡模型
    監督學習最重要的是,在一直答案的標註數據集上,模型給出的預測結果要儘量接近真實答案
    通過調整神經網絡中的參數對訓練數據進行擬合,可以使得模型提供預測能力
    沒生成一個常量,Tensorflow提供了placeholder 機制用於提供輸入數據
    placeholder 相當於定義了一個位置,這個位置中的數據在程序運行時在指定
    feed_dict是一個字典,在字典中需要給出每個用到的placeholder的取值
    placeholder中n×2的矩陣的每一行爲一個樣例數據,n爲幾就可以得到幾個樣例數據結果,即可以一次性計算多個樣例的前向傳播

完整的神經網絡

  1. 定義神經網絡的結構和前向傳播的輸出結果
  2. 定義隨時函數以及選擇反向傳播優化的算法
  3. 生成會話並且在訓練數據上反覆運行反向傳播優化算法
    ( 交叉熵越小說明真實結果和預測結果差距越小。關於交叉熵後面詳細補充)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章