1. 程式人生 > >【Tensorflow】Tensorflow的圖、會話、裝置、變數、核心

【Tensorflow】Tensorflow的圖、會話、裝置、變數、核心

前言

基礎知識,前面我們介紹到,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)上的一種對操作的實現。因此,同一個操作可能會對應多個核心