tensorflow的名字表明了張量的含義。在tensorflow中,所有資料通過張量形式表示。張量可以理解為多維陣列。零階張量表示標量,也就是乙個數;一階張量為向量,一維陣列;n階張量可以理解為n維陣列。
tensorflow中,張量並沒有儲存數字,只是表示數字的計算過程,是對tensorflow中運算結果的引用。
import tensorflow as tf
a = tf.constant([1, 2], name="a", dtype=tf.float32)
b = tf.constant([2.0, 3.0], name="b")
result = tf.add(a, b, name='add')
print(result) # tensor("add:0", shape=(2,), dtype=float32)
上面**中,並不會得到加法的結果,只能得到引用,儲存在result中。
引用的型別表示為: tensor("add:0", shape=(2,), dtype=float32)
張量結構儲存了三個屬性:名字(name)、維度(shape)、型別(type)
張量的第乙個屬性除了是該張量的唯一識別符號外,還表示了張量的計算方式。上面**表明是通過加法計算得到。張量的名字通過"node:src_output"的形式給出,其中node為節點的名稱,src_output表示當前張量來自該節點的第幾個輸出。如a
dd:0說明該張量節點名稱為add,第乙個輸出。
張量的第二個屬性shape表明了他的維度。shape=(2,)說明該張量是乙個一維陣列,長度為2.
張量的第三個屬性表明了該張量的資料型別。執行時,tensorflow會對所有張量進行資料型別檢查,發現型別不匹配時會報錯。如下面這段**會報錯:
import tensorflow as tf
a = tf.constant([1, 2], name="a")
b = tf.constant([2.0, 3.0], name="b")
result = tf.add(a, b, name='add')
print(result) # tensor("add:0", shape=(2,), dtype=float32)
去掉張量a後面的小數點後型別不一致,則報錯,可以在a後顯示新增資料型別:
import tensorflow as tf
a = tf.constant([1, 2], name="a", dtype=tf.float32)
b = tf.constant([2.0, 3.0], name="b")
result = tf.add(a, b, name='add')
print(result) # tensor("add:0", shape=(2,), dtype=float32)
2.張量的使用張量的使用主要分為兩大類:
第一類用途時對中間結果的引用,提高**的可讀性。如下**:
# 使用張量記錄中間結果
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([2.0, 3.0], name="b")
result = a + b
# 直接計算向量的和,可讀性差
result=tf.constant([1.0, 2.0], name="a")+tf.constant([2.0, 3.0], name="b")
第二類情況是計算圖構造玩完成後,張量可以用來獲取計算結果,得到真實的數字。雖然張量本身沒有儲存具體的數字,但是通過會話(session)就可以得到這些具體的數字。如下**:
# 使用張量記錄中間結果
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([2.0, 3.0], name="b")
result = a + b
with tf.session() as sess:
tf.initialize_all_variables().run()
print(sess.run(result))
3.會話
tensorflow使用會話(session)來執行定義好的計算,其擁有並管理程式執行時的所有資源。當計算完成時,我們需要關閉會話來幫助系統**資源,否則就可能資源洩漏。在tensorflow中使用會話的方式有兩種:
第一種需要自己生成會話和關閉會話,**如下:
sess = tf.session() # 建立乙個會話
print(sess.run(result)) # 使用會話獲得結果
sess.close() # 關閉會話,釋放資源
使用這種方式需要最後呼叫sess.close()函式關閉會話,否則可能存在記憶體洩漏的問題。
第二種是通過python的上下文管理器來使用會話,**如下:
with tf.session() as sess:
tf.initialize_all_variables().run()
print(sess.run(result))
此種方式不需要呼叫session.close()函式來關閉會話,當上下文退出時會自動關閉會話和釋放資源。
此外,tensorflow不會自動生成預設的會話,需要手動指定。當預設的會話被指定後可以通過eval()函式獲取張量的值,**如下:
sess = tf.session()
with sess.as_default():
print(result.eval())
使用tf.interactivesession()也可以自動生成預設的會話:
sess = tf.interactivesession()
print(result.eval())
sess.close()
Tensorflow實戰 張量
import tensorflow as tf tf.constant 是乙個計算,這個計算的結果為乙個張量,儲存在變數a中。a tf.constant 1.0,2.0 name a b tf.constant 2.0,3.0 name b result tf.add a,b,name add pr...
tensorflow 張量生成
coding utf 8 import tensorflow as tf import numpy as np 建立張量 a tf.constant 1 5 dtype tf.int64 print a a print a.dtype a.dtype print a.shape a.shape a ...
Tensorflow張量(tensor)解析
tensor是tensorflow基礎的乙個概念 張量。定義在 framework ops.py tensorflow用到了資料流圖,資料流圖包括資料 data 流 flow 圖 graph tensorflow裡的資料用到的都是tensor,所以谷歌起名為tensorflow。下面介紹張量幾個比較...