YJango的TensorFlow整體把握

目前主流的TensorFlow,用tensorflow這樣工具的原因是:它允許我們用計算圖(Computational Graphs)的方式建立網路。同時又可以非常方便的對網路進行操作。

下面就是對計算圖的直觀講解。

比喻說明:

  • 結構:計算圖所建立的只是一個網路框架。在編程時,並不會有任何實際值出現在框架中。所有權重和偏移都是框架中的一部分,初始時至少給定初始值才能形成框架。因此需要initialization初始化。
  • 比喻:計算圖就是一個管道。編寫網路就是搭建一個管道結構。在投入實際使用前,不會有任何液體進入管道。而神經網路中的權重和偏移就是管道中的閥門,可以控制液體的流動強弱和方向。在神經網路的訓練中,閥門會根據數據進行自我調節、更新。但是使用之前至少要給所有閥門一個初始的狀態才能形成結構。用計算圖的好處是它允許我們可以從任意一個節點處取出液體。

用法說明:

請類比管道構建來理解計算圖的用法

構造階段(construction phase):組裝計算圖(管道)

  • 計算圖(graph):要組裝的結構。由許多操作組成。
  • 操作(ops):接受(流入)零個或多個輸入(液體),返回(流出)零個或多個輸出。
  • 數據類型:主要分為張量(tensor)、變數(variable)和常量(constant)
    • 張量:多維array或list(管道中的液體)
      • 創建語句

tensor_name=tf.placeholder(type, shape, name)n

    • 變數:在同一時刻對圖中所有其他操作都保持靜態的數據(管道中的閥門)
      • 創建語句

name_variable = tf.Variable(value, name)n

      • 初始化語句

#個別變數ninit_op=variable.initializer()n#所有變數ninit_op=tf.initialize_all_variables()n#注意:init_op的類型是操作(ops),載入之前並不執行n

      • 更新語句

update_op=tf.assign(variable to be updated, new_value)n

    • 常量:無需初始化的變數
      • 創建語句

name_constant=tf.constant(value)n

執行階段(execution phase):使用計算圖(獲取液體)

  • 會話:執行(launch)構建的計算圖。可選擇執行設備:單個電腦的CPU、GPU,或電腦分散式甚至手機。
    • 創建語句

#常規nsess = tf.Session()n#交互nsess = tf.InteractiveSession()n#交互方式可用tensor.eval()獲取值,ops.run()執行操作n#關閉nsess.close()n

  • 執行操作:使用創建的會話執行操作
    • 執行語句

sess.run(op)n

    • 送值(feed):輸入操作的輸入值(輸入液體)
      • 語句

sess.run([output], feed_dict={input1:value1, input2:value1})n

    • 取值(fetch):獲取操作的輸出值(得到液體)
      • 語句

#單值獲取 nsess.run(one op)n#多值獲取nsess.run([a list of ops])n

更多內容參考官網文檔

推薦閱讀:

深度神經網路學習筆記
M.1.2 神經網路的數學基礎-度量、運動、變換和群
S 1.1 機器學習-樸素貝葉斯與單層神經網路關係

TAG:TensorFlow | 神经网络 | 机器学习 |