【Tensorflow】Tensorflow的圖、會話、裝置、變數、核心
阿新 • • 發佈:2018-11-26
前言
基礎知識,前面我們介紹到,Tensorflow的資料流圖是由節點和邊組成的有向無環圖,此外,還涉及一些其他概念,如圖、會話、裝置、變數、核心等。
圖(Graph)
import tensorflow as tf
# 建立圖
# 建立一個常量運算操作,產生一個1 x 2的矩陣
matrix1 = tf.constant([[3., 3.]])
# 建立另一個常量運算操作,產生一個2 x 1的矩陣
matrix2 = tf.constant([[2.], [2.]])
# 建立一個矩陣乘法運算,把matrix1 和matrix2 作為輸入
# 返回值product 代表矩陣乘法的結果
product = tf.matmul(matrix1, matrix2)
會話(Session)
啟動圖的第一步是建立一個Session物件。會話提供在圖中執行操作的一些方法,建立會話後,生成一張空圖,在會話中新增節點和邊,形成一張圖,然後執行。
# 會話
with tf.Session() as sess:
# 呼叫Session物件的run()方法來執行圖時,傳入一些Tensor(此過程稱為填充(feed))
# 返回結果,這個過程稱為(fetch)
result = sess.run([product])
print(result)
輸出我:[array([[12.]], dtype=float32)]
會話是圖互動的一個橋樑,一個會話可以有多個圖,會話可以修改圖的結構,也可以往圖中注入資料進行計算。
主要有兩個API介面:Extend和Run
Extend操作:是在Graph中新增節點和邊
Run操作:是輸入計算的節點和填充必要的資料後,進行運算,並輸出運算的結果
裝置(device)
裝置是指一塊用來運算的硬體,如GPU和CPU,主要是為了實現分散式執行操作,充分利用計算資源,我們可以明確指定操作在哪個裝置上執行。
import tensorflow as tf
# 裝置
with tf.Session() as sess:
matrix1 = tf. constant([[3., 3.]])
matrix2 = tf.constant([[2.], [2.]])
product = tf.matmul(matrix1, matrix2)
# 指定在第二個GPU上執行
with tf.device("/gpu:1"):
result = sess.run([product])
print(result)
輸出為:[array([[12.]], dtype=float32)]
變數(variable)
變數在Tensorflow是一種特殊的資料,它在圖中有固定的位置,不像普通的張量那樣可以流動。
- 使用
tf.Variable()
建構函式 - 這個函式需要一個初始值,形狀和型別
# 建立一個變數,初始化為標量0
state = tf.Variable(0, name="counter")
# 建立一個常量張量
input1 = tf.constant(3.0)
Tensorflow提供了填充機制,可以在構建圖時使用,
tf.placeholder()
臨時替代任意操作的張量,在呼叫Session物件的run()方法來執行圖時,使用填充資料作為呼叫的引數,呼叫結束後,填充資料就消失。
# tf.placeholder()臨時替代任意操作的張量
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1, input2)
with tf.Session() as sess:
print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))
輸出為:[array([14.], dtype=float32)]
核心(kernel)
核心是能夠在特定裝置(如GPU、CPU)上的一種對操作的實現。因此,同一個操作可能會對應多個核心