Tensorflow实践 基本原理学习和框架使用
Tensorflow 是google大腦小組的工程師們開發的用于機器學習和深度神經網絡方面的研究,它通過一個數據流圖來進行計算。[本文是對Tensorflow社區資料進行學習和實踐,其中文社區還是很好的學習資源]
??????? 一、基本概念:
??????? 1、 數據流程圖? data flow graphs
???????? 它的數據流圖如下圖所示(來源于網絡):
???????? 2、 節點【nodes】: 圖中的各種形狀的方塊,表示的是某種數學操作【op】
???????? 3、? 線【edges】: 表示節點間相互聯系的多維數據數組,在tensorflow中,稱為 張量【tensor】。個人理解為數學中的向量矩陣如:
??????????????? 三個元素的一維向量? [ 1, 2, 3 ],?? 2x2 的二維向量? [ [ 1, 1],[1, 1 ] ]
???????? 4、? 重塑節點【Reshape】:前面說了 節點表示計算, 所以reshape是一個計算節點,用于進行矩陣的行數、列數、維度的調整。經常用這個節點進行降低維度計算
???????? 5、? 激活函數層【ReLULayer】:實現了對輸入數據的非負處理,將小于零的數據進行了截斷。
???????? 6、? 邏輯層【Logit layer】: 實現邏輯回歸,實現分類器計算
???????? 7、? 計算梯度【Gradients】:計算梯度
???????? 8、? 梯度下降訓練【SGD Trains】:進行梯度下降訓練優化
??? 二、tensorflow的基本使用
??????? 一般來說,tensorflow使用圖(graph)來表示計算任務,在會話 (Session) 的上下文 (context) 中執行圖 ;使用tensor 表示數據,變量 (Variable)記錄計算狀態;使用 feed 和 fetch 可以為任意的操作(arbitrary operation) 賦值或者從其中獲取數據;
??? import tensorflow as tf
??? ?
??? # 創建一個常量 op, 產生一個 1x2 矩陣. 這個 op 被作為一個節點
??? # 加到默認圖中.
??? #
??? # 構造器的返回值代表該常量 op 的返回值.
??? matrix1 = tf.constant([[3., 3.]])
??? ?
??? # 創建另外一個常量 op, 產生一個 2x1 矩陣.
??? matrix2 = tf.constant([[2.],[2.]])
??? ?
??? # 創建一個矩陣乘法 matmul op , 把 'matrix1' 和 'matrix2' 作為輸入.
??? # 返回值 'product' 代表矩陣乘法的結果.
??? product = tf.matmul(matrix1, matrix2)
??? ?
??? #Session 對象在使用完后需要關閉以釋放資源. 除了顯式調用 close 外, 也可以使用 "with" 代碼塊 來自動完成關閉動作.
??? #注意下面第二句和第三局的縮進
??? with tf.Session() as sess:
????? result = sess.run([product])
????? print result
下面看看執行結果
?? 1、變量
變量的使用,需要通過初始化加入到圖中
??? import tensorflow as tf
??? ?
??? # 創建一個變量, 初始化為標量 0.
??? count = tf.Variable(0, name="counter")
??? ?
??? # 創建一個 op, 其作用是使 count 增加 1
??? one = tf.constant(1)
??? new_value = tf.add(count, one)
??? update = tf.assign(count, new_value)
??? ?
??? # 啟動圖后, 變量必須先經過初始化,
??? # 首先必須增加一個`初始化` op 到圖中.
??? init_op = tf.initialize_all_variables()
??? ?
??? # 啟動圖, 運行 op
??? with tf.Session() as sess:
????? # 運行 'init' op
????? result = sess.run(init_op)
????? print sess.run(count)
????? # 運行 op, 更新count值
????? sess.run(update)
????? print sess.run(count)
執行結果如下
之所以會多打印一個1,是因為 tf.assign( oldValue, newValue) 函數會打印
??? 2) Fetch? 拿取、獲取
可以一次傳入多個tensor 獲取結果
??? import tensorflow as tf
??? ?
??? #定義兩個常量
??? x = tf.constant(3)
??? y = tf.constant(4)
??? ?
??? # 創建3個 op,計算x平方和y平方和
??? xx = tf.mul(x, x)
??? yy = tf.mul(y, y)
??? zz = tf.add(xx, yy)
??? ?
??? ?
??? # 啟動圖, 運行 op
??? with tf.Session() as sess:
????? result = sess.run([xx, yy, zz])
????? print result
?執行結果 不因為 sess.run([xx,yy,zz]) 中間的tensor 順序而改變結果
???? 3) feed
???? tensorflow提供了占位符和feed填入的機制,對于計算中的參數(預先用占位符定義),通過feed_dict的方式進行代入實際計算值的方法?? ?
??? import tensorflow as tf
??? ?
??? #定義兩個常量
??? x = tf.placeholder(tf.float32)
??? y = tf.placeholder(tf.float32)
??? ?
??? # 創建3個 op,計算x平方和y平方和
??? xx = tf.mul(x, x)
??? yy = tf.mul(y, y)
??? zz = tf.add(xx, yy)
??? ?
??? ?
??? # 啟動圖, 運行 op
??? with tf.Session() as sess:
????? result = sess.run([xx, yy, zz], feed_dict={x:[3.], y:[4.]} )
????? print result
?計算結果如下:
---------------------
原文:https://blog.csdn.net/csolo/article/details/78788631
總結
以上是生活随笔為你收集整理的Tensorflow实践 基本原理学习和框架使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tensorflow基本开发步骤——以逻
- 下一篇: 新京报快评:浙大设“新生高额奖学金”,为