日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorFlow学习笔记之一(TensorFlow基本介绍)

發布時間:2024/9/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow学习笔记之一(TensorFlow基本介绍) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • TensorFlow計算模型---計算圖
        • 計算圖的使用
        • TensorFlow數據模型---張量
      • TensorFlow運算模型---會話
        • 使用tf.InteractiveSession在交互式環境直接構建默認會話
        • 通過ConfigProto配置會話
      • 小結

TensorFlow計算模型—計算圖

在TensorFlow有連個重要的概念,Tensor和Flow。
Tensor就是張量,張量可以被簡單理解為多維數組,也就是矩陣。它代表著TensorFlow的數據結構。
Flow意思是“流”,它直觀表達了張量之間通過計算相互轉換的過程。

TensorFlow是一個通過計算圖的形式來表述計算的編程系統。TensorFlow中的每個計算都是計算圖上的一個節點,而節點之間的邊描述了計算機之間的依賴關系。
兩個向量相加樣例的計算圖。

計算圖的使用

TensorFlow程序一般可以分為兩個階段:第一階段定義計算圖中的所有的計算;第二階段執行計算。
下面代碼為第一階段,定義計算

# 引入tensorflow,并取別名為tf import tensorflow as tf# 定義張量a,名字為a,內容為[1.0,2.0]的向量 a = tf.constant([1.0, 2.0], name="a") #1 b = tf.constant([1.0, 2.0], name="b")result = a + b

TensorFlow會自動將計算轉化為計算圖上的節點。在TensorFlow程序中,系統會自動維護一個默認的計算圖,通過tf.get_default_graph()函數獲取當前默認的計算圖。

除了默認的計算圖,TensorFlow支持通過tf.Graph函數生成新的計算圖。不同的計算圖上的張量和計算不會共享。

計算圖只描述計算過程,不進行計算。

TensorFlow數據模型—張量

在TensorFlow中,所有的數據都是通過張量的形式來表示。在功能角度來看,張量可以被理解為多維數組。其中零階張量表示表示標量,也及時一個數。一階張量為向量,即一維數組。n階張量可以理解為一個n維數組。但是張量在TensorFlow中實現并不直接采用數組的形式,它只是對TensorFlow中運算結果的引用。

從代碼可以看出,TensorFlow計算結果不是一個具體的數字,而是一個張量的結構。其中最主要有三個屬性:名字(name),維度(shape)和類型(type)。
張量的第一個屬性名字不僅是一個張量的唯一標識符,也給出了這個張量是如何被計算出來的。因為計算圖上的每個節點代表了一個計算,計算的結果偶就保存在張量之中,所以張量和計算圖上的計算結果是對應的。這樣張量的命名就可以通過“node:src_output”的形式來給出。其中node為節點名稱,src_output為當前張量來自節點的第幾個輸出。比如"add:0"表示張量result是計算節點add輸出的第一個結果。
第二個屬性,表明了張量的維度(shape),如shape=(2,)表示張量result是一個一維數組,長度為2.
第三個屬性,類型(type),每個張量會有一個唯一的類型。TensorFlow會對參與運算的所有張量進行檢查,張量類型不匹配會報錯。

對于張量的類型,可以在創建時指定,比如,c = tf.constant([1, 2], name="c",dtype=tf.float32)
不指定,TensorFlow會給出默認的類型,不帶小數點會默認為int32,帶小數點默認為float32。

TensorFlow支持的14中類型

  • 實數(tf.float32,tf.float64)
  • 整數(tf.int8,tf.int16,tf.int32,tf.int64,tf.uint8)
  • 布爾型(tf.bool)
  • 復數(tf.complex64,tf.complex128)

TensorFlow運算模型—會話

會話擁有并管理TensorFlow程序運行時所有的資源。所有就算完成后需要關閉會話來幫助系統回收資源,否則會出現資源泄漏的問題。TensorFlow有兩種模式:

sess = tf.Session() sess.run() sess.close()

使用這種模式時,在所有的計算完成后,需要明確調用Session.close()函數來關閉會話并釋放資源。然而,當程序因為異常退出時,關閉會話的函數可能就不會被執行從而導致資源泄漏。
為了解決程序因異常退出導致資源釋放的問題。TensorFlow可以通過Python的上下文管理器來使用會話。代碼如下:

# 創建一個會話,并通過Python中的上下文管理器來管理這個會話 with tf.Session() as sess:# 使用創建好的會話來計算結果sess.run() # 當上下文退出時會話關閉和資源釋放也自動完成了

這樣既避免了因為異常退出時資源釋放的問題,同時也解決了忘記調用Session.close()而導致資源泄漏的問題。

前面提到了過tensorflow會生成一個默認的計算圖,如果沒有特殊指定,運算會自動加入到這個計算圖中。同樣TensorFlow的會話也有類似的機制。但他不會生成默認的會話,而是需要手動指定。當默認的會話被指定后,可以通過tf.Tensor.eval()函數來計算一個張量的取值,代碼如下:

# 引入tensorflow,并取別名為tf import tensorflow as tf# 定義張量a,名字為a,內容為[1.0,2.0]的向量 a = tf.constant([1.0, 2.0], name="a") #1 b = tf.constant([1.0, 2.0], name="b")result = a + bsess = tf.Session() # 將產生的會話注冊為默認的會話 with sess.as_default():print(result.eval())

結果如下

可以看出,其本質為矩陣的加法運算。

另一種實現:

# 引入tensorflow,并取別名為tf import tensorflow as tf# 定義張量a,名字為a,內容為[1.0,2.0]的向量 a = tf.constant([1.0, 2.0], name="a") #1 b = tf.constant([1.0, 2.0], name="b")result = a + bsess = tf.Session() # 下面兩個代碼有相同的功能 print(sess.run(result)) print(result.eval(session=sess))

使用tf.InteractiveSession在交互式環境直接構建默認會話

import tensorflow as tf a = tf.constant([1.0, 2.0], name="a") b = tf.constant([1.0, 2.0], name="b") result = a + b sess = tf.InteractiveSession() print(result.eval()) [2. 4.] sess.close()



通過tf.InteractiveSession()可以省去將產生的會話注冊為默認會話的過程。
無論是哪個,都可以通過ConfigProto Protocol Buffer來配置需要生成的會話。

通過ConfigProto配置會話

config = tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)sess1 = tf.InteractiveSession(config=config) sess2 = tf.Session()

對于ConfigProto(),他可以配置類似并行的線程數、GPU分配策略、運算超時時間等參數。最常用的參數有兩個:allow_soft_placement和log_device_placement

參數默認值含義
allow_soft_placementFalse為True時,表示運算在GPU上執行
log_device_placementFlaseTrue時,日志將會記錄每個節點被安排到哪個設備上以方便調試

對于allow_soft_placement,當它為True時,一下三種情況,GPU運算都會放在CPU上運行

  • 運算無法再GPU上運行
  • 沒有GPU資源
  • 運算輸入包含了對CPU計算結果的引用(就是需要CPU運算的結果)

小結

基于上面的代碼情景,畫出如下圖形:
對于TensorFlow中的張量、計算圖和會話。個人看法如下圖:

計算圖是我們設計好的算法,張量是存放計算的數據的。但是,此時算法并沒有運行起來。
等到計算圖定義好了后,再將計算圖放在會話中跑起來。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的TensorFlow学习笔记之一(TensorFlow基本介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。