一、使用圖(graphs)來表示計算任務,用於搭建神經網絡的計算過程,但其只搭建網絡,不計算python
二、在被稱之爲會話(Session)的上下文(context)中執行圖編程
三、使用張量(tensor)表示數據,用「階」表示張量的維度。關於這一點須要展開一下數組
0階張量稱爲標量,表示單獨的一個數網絡
1階張量稱爲向量, 表示一個一維數組框架
2階張量稱爲矩陣,表示一個二維數組fetch
……spa
張量是幾階的能夠經過張量右邊的方括號數來判斷。例如 t = [ [ [ ] ] ],顯然這個爲3階。code
四、經過變量(Variable)維護狀態blog
五、使用feed和fetch能夠爲任意的操做賦值或者從其中獲取數據ip
Tensorflow是一個編程系統,使用圖(graphs)來表示計算任務,圖(graphs)中的節點稱之爲op(operation),一個op得到0個或者多個Tensor,執行計算,產生0個或多個Tensor,Tensor看做是一個n維的數組或列表。圖必須在會話(Session)裏被啓動。
1 import tensorflow as tf # 簡寫方便一點 2 3 # 建立兩個常量(constant) 4 m1=tf.constant([[3,3]]) #一行兩列的矩陣,這裏是矩陣乘法,因此是二維數組,注意書寫格式以及矩陣乘法規則
5 m2=tf.constant([[2],[3]]) #兩行一列的矩陣 6 7 # 建立一個矩陣乘法(matmul)的op 8 product=tf.matmul(m1,m2) 9 print(product)
運行會獲得顯示結果,其中MatMul爲節點名,0表明第0個輸出;shape是維度,(1,1)表明一行一列的張量,長度爲1;dtype指數據類型爲整型。
Tensor("MatMul:0", shape=(1, 1), dtype=int32)
結果並非想象中的是一個具體數字,而是一個Tensor,這是由於以前提到過 圖必須在會話中運行,如今咱們並未使用會話,因此只能獲得一個Tensor。
定義會話有兩種方法,通常使用第二種。
1 # method 1 2 sess=tf.Session() # 將Session簡寫爲sess 3 result=sess.run(product) # 調用run方法執行圖,這個觸發了三個op(操做),兩個常量的創建,矩陣的乘法 4 print(result) 5 sess.close() # 關閉會話
1 # method 2 2 with tf.Session() as sess: # Session()後面的()由於代碼提示裏沒有,因此很容易丟 3 result=sess.run(product) 4 print(result) # with as的這種結構會自動關閉會話
運行顯示結果爲
[[15]]
注意:Session() 常常會寫錯,大小寫問題和括號問題,都是典型錯誤,多加練習
上文常量使用tf.constant()表示,變量是用tf.Variable()表示
1 import tensorflow as tf 2 3 x=tf.Variable([1,2]) # 定義一個變量,這裏是張量的加減法,因此一維數組便可 4 a=tf.constant([3,3]) # 定義一個常量 5 6 sub=tf.subtract(x,a) # 增長一個減法op 7 add=tf.add(x,sub) # 增長一個加法op 8 9 init=tf.global_variables_initializer() # 在tensorflow中使用變量要初始化,此條語句也能夠初始化多個變量,這句代碼提示沒有(),多加練習 10 11 with tf.Session() as sess: 12 sess.run(init) # 變量初始化,也要放在會話中,才能執行 13 print(sess.run(sub)) 14 print(sess.run(add))
運行將獲得結果
[-2 -1]
[-1 1]
上述代碼展現了變量的定義和初始化,但尚未體現變量的本質,下面一段代碼實現變量a進行5次+1的操做
值得一提的是,在打印常量和變量時,不能像python中的直接print(a),而是也須要放在sess.run()中。
1 a=tf.Variable(0,name='counter') # 建立一個變量初始化爲0,並命名爲counter。(此段代碼中命名無做用) 2 new_value = tf.add(a,1) # 建立一個加法op,做用是使state加1 3 update=tf.assign(a,new_value) # 此句話是賦值op,在tensorflow中,賦值也須要對應的op 4 init=tf.global_variables_initializer() # 變量初始化 5 with tf.Session() as sess: 6 sess.run(init) 7 print(sess.run(a)) 8 for i in range(5): 9 sess.run(update) 10 print(sess.run(a))
運行,顯示結果爲
0
1
2
3
4
5
注意:初始化時,pycharm會代碼提示 tf.global_variables_initializer,但每每會把括號漏掉,需注意
經常使用的op如今除了加減乘除,還多了個assign()的賦值op
sess.run([fetch1,fetch2]) 進行多個op,注意格式
1 import tensorflow as tf 2 3 input1 = tf.constant(3.0) 4 input2 = tf.constant(2.0) 5 input3 = tf.constant(5.0) 6 7 add = tf.add(input2,input3) 8 mul = tf.multiply(input1,add) 9 10 with tf.Session() as sess: 11 result = sess.run([mul,add]) # 執行了兩個op,要注意格式 12 print(result)
運行,結果顯示爲
[21.0, 7.0]
這裏須要提一下tf.matmul()是用於矩陣乘法,tf.multiply是用於點乘。正如上面這段代碼的multiply
定義變量時可先不輸入具體數值,先佔位,在會話中調用op時,再輸入具體值。
import tensorflow as tf input1 = tf.placeholder(tf.float32) # 使用placeholder()佔位,須要提供類型 input2 = tf.placeholder(tf.float32) output = tf.multiply(input1,input2) with tf.Session() as sess: print(sess.run(output,feed_dict={input1:8.0,input2:2.0})) # 以字典形式輸入feed_dict
運行,顯示結果爲
[ 16.]
佔位多組數據之後再說在下一篇隨筆會提到。
以上就是一些比較基本的tensorflow概念的描述和代碼實現。
本人初學者,有錯誤歡迎指出。感謝。