TensorFlow:实战Google深度学习框架(一)计算、数据、运行模型
- 第3章 TensorFlow入門
- 3.1 TensorFlow計算模型——計算圖
- 3.1.1 計算圖的概念
- 3.1.2 計算圖的使用
- 3.2 TensorFlow數據模型——張量
- 3.2.1 張量的概念
- 3.2.2 張量的使用
- 3.3 TensorFlow運行模型——會話
- 3.1 TensorFlow計算模型——計算圖
第3章 TensorFlow入門
3.1 TensorFlow計算模型——計算圖
計算圖是TF框架中最基本的概念,所有的計算都會被轉化為計算圖上的點,下面詳細介紹計算圖。
3.1.1 計算圖的概念
Tensor——張量,可以理解為多維數組;
Flow——流,體現了計算模型,表達了張量之間通過計算相互轉化的過程;
每個計算都會被轉化為計算圖上的一個節點,節點之間的邊描述了計算之間的依賴關系
3.1.2 計算圖的使用
Tensorflow程序會分為兩個階段:
第一階段需要定義計算圖中的所有計算
第二階段執行計算
| tf.get_default_graph | 獲取當前默認的計算圖 |
| tf.Graph | 生成新的計算圖 |
| tf.Graph_device | 指定運算設備 |
計算圖的另一個功能:有效整理TF程序中的資源
通過集合來整合資源:
| tf.add_to_collection | 將資源加入一個或多個集合 |
| tf.get_collection | 獲取一個集合中的所有資源 |
為方便使用,TF也自動管理了一些常用的集合
| tf.GraphKeys.VARIABLES | 所有變量 | 持久化TensorFlow模型 |
| tf.GraphKeys.TRAINABLE_VARIABLES | 可學習的變量 | 模型訓練、生成模型可視化內容 |
| tf.GraphKeys.SUMMARIES | 日志生成相關張量 | TensorFlow計算可視化 |
| tf.GraphKeys.QUEUE_RUNNERS | 處理輸入的QueueRunner | 輸入處理 |
| tf.GRaphKeys.MOVING_AVEGAGE_VARIABLES | 所有計算了滑動平均值的變量 | 計算變量的滑動平均值 |
3.2 TensorFlow數據模型——張量
張量是TF的數據管理形式
3.2.1 張量的概念
在TF程序中,所有的數據都是通過張量的形式來表示的,從功能角度看,張量可以被理解為多維數組,其中零階張量表示標量(scalar),也就是一個數;一階張量表示向量(vector),也就是也一維數組;n階張量可以理解為n維數組。
張量的實現:并不是直接采用數組的形式,而只是對tensorflow中計算結果的引用。
張量保存的是什么:并不是真正的數字,而是保存如何得到這些數字的計算過程。
張量的屬性:名字(name)、維度(shape)、類型(type)
Tensor("MatMul:0", shape=(1, 1), dtype=int32)- 名字:張量的唯一標識符,且說明了張量是如何計算出來的; node:src_output的形式
- node:節點名稱
- src_output:當前張量來自第幾個節點的第幾個輸出(MatMul:0表示計算節點“MatMul的第一個結果”)
- 維度:描述了張量的維度信息(shape=(1, 1)表示該張量是二維數組)
- 類型:每個張量會有一個唯一的類型(TF會對所有參與運算的張量進行類型檢查,不匹配會報錯)
3.2.2 張量的使用
- 第一類:對中間結果進行引用,當一個計算包含很多中間結果時,使用張量可以提高代碼可讀性。
- 第二類:當計算圖構造完成之后,張量可以用來獲得計算結果,也就是得到真實的數字。
雖然張量本身沒有存儲具體數字,但可以通過會話(session)來得到具體數字
3.3 TensorFlow運行模型——會話
會話(session):執行定義好的運算
會話擁有并管理TensorFlow程序運行時的所有資源,當所有計算完成之后需要關閉會話來回收資源,否則可能出現資源泄露的問題。
會話模式有兩種:
- 第一種模式:需要明確調用會話生成函數和關閉會話函數(當程序異常退出時,關閉會話函數可能不會執行,導致資源泄露)
- 第二種模式:通過Python上下文管理機制
會話如何生成:指定默認會話(默認會話不會自動生成),通過 tf.Tensor.eval 函數計算張量取值。
run和eval的區別:ecal一次只能得到一個節點的值,run可以得到多個節點的值
sess = tf.Session() with sess.as_default():print(result.eval()) [ 4. 6.]以下代碼實現相同的功能:
sess = tf.Session()# 下面的兩個命令有相同的功能 print(sess.run(result)) print(result.eval(session = sess))使用tf.InteractiveSession()構建會話:
通過默認會話的方式獲取張量的取值會更加方便,TensorFlow提供了一種在交互式環境下直接構建默認會話的函數,會自動將生成的會話注冊為默認會話。
sess=tf.InteractiveSession() print(result.eval()) sess.close()使用ConfigProto Protocol Buffer配置需要生成的會話:
config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True) sess1 = tf.InteractiveSession(config=config) sess2 = tf.Session(config=config)allow_soft_placement=True 在下面的任意一個條件成立,GPU的運算可以放到CPU上進行:
運算無法在GPU上執行;
沒有GPU資源(比如運算被指定在第二個GPU上運行,但是機器只有一個GPU);
運算輸入包含對CPU計算結果的引用。
log_device_placement=True日志中將會記錄每個節點被安排在了哪個設備上以方便調試。
總結
以上是生活随笔為你收集整理的TensorFlow:实战Google深度学习框架(一)计算、数据、运行模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 接班马斯克?朱晓彤卸任特斯拉中国关联公司
- 下一篇: 深度学习与计算机视觉(一)图像分类与KN