0.tensorflow中的模型運行基礎
tensorflow的運行機制屬於定義和運行相分離,在操作層面可以抽象成兩種:模型構建和模型運行。
在模型構建中的常見概念:
張量(tensor):數據,即某一類型的多為數組
變量(Variable):常用於定義模型中的參數,是通過不斷訓練得到的值
占位符(placeholder):輸入變量的載體,也可以理解成模型的參數
圖中的節點操作(operation,op):即一個op獲得0個或多個tensor,執行得到,輸出得到的tensor
計算圖代表一個計算任務,在模型運行的環節中,圖會在會話中被啟動,session將圖中的op分發到CPU或GPU子類的設備上,同時提供執行op的方。這些方法執行后,將產生tensor返回,在python中返回的是numpy的ndarray對象,在C/C++中返回的tensor是TensorFlow::Tensor實例
session與圖交互過程中還定義了下面兩種數據流向機制:
注入機制(feed):通過占位符模型傳入數據
取回機制(fetch):從模型中得到結果
import tensorflow as tf hello = tf.constant('hello world') sess = tf.Session() print(sess.run(hello)) sess.close()
建立session,在session中輸出hello,world,通過run方法得到hello的值,下面使用with session的作用
# /usr/bin/python # -*- encoding:utf-8 -*- import tensorflow as tf import numpy as np a = tf.constant(4) b = tf.constant(2) with tf.Session() as sess: print("相加: a + b ", sess.run(a+b)) print("相乘: a * b ", sess.run(a*b))
with session的用法是最常見的,它使用python中的with語法,即當程序結束時,會自動關閉session,不需要寫close。
下面演示注入機制,使用注入機制,將具體的實參注入到相應的placeholder中。feed只在調用的方法內有效,方法結束后feed就會自動消失。
import tensorflow as tf import numpy as np a = tf.placeholder(tf.int32) b = tf.placeholder(tf.int32) add = tf.add(a, b) mul = tf.multiply(a, b) with tf.Session() as sess: print("相加: ", sess.run(add, feed_dict={a:3, b:2})) print("相乘: ", sess.run(mul, feed_dict={a:4, b:6}))
構建session的其他方法
交互式的session方式
通常是在交互的環境下使用,具體的用法和with session類似,代碼如下:
sess = tf.InteractiveSession()
Supervisor方式:這種方法可能會更高級些,使用的時候也更加的復雜,可以自動的管理session中的具體任務,比如,載入/載出檢查點文件,寫入tensorboard等,另外該方式還支持分布式的訓練任務部署。