深度学习(5)TensorFlow基础操作一: TensorFlow数据类型
深度學習(5)TensorFlow基礎操作一: TensorFlow數據類型
- Data Container(數據載體)
- What’s Tensor
- TF is a computing lib(科學計算庫)
- 創建不同類型的數據
- Tensor Property(Tensor屬性)
- Check Tensor Type(判斷數據類型)
- Convert(數據類型轉換)
- bool & int(布爾型和整型數據之間的轉換)
- tf.Variable(可以優化參數的一種數據類型)
- To numpy(如何將數據由tensor類型轉換為numpy類型)
Data Container(數據載體)
(1) list
優點: 非常靈活,在list中間可以添加任何類型的數據,例如: [1, 1.2, ‘Hello’, (1, 2), layers, …],而且可以隨意添加刪除編輯;
缺點: 遇到大數據時,例如一張圖片維度是[224, 224],那么使用list所消耗的內存空間是巨大的,而且讀取寫入的效率低;
(2) np.array
優點: 專門解決同類型數據運算而設計的數據載體,可以很方便地將大數據(例如一組圖片的維度是[64, 224, 224, 3])進行存儲和運算;
缺點: Numpy是在深度學習出現之前就已經設計好的科學計算庫,所以它不能很好地支持GPU計算或者自動求導功能;
(3) tf.Tensor
與Numpy地位相等,添加了一些深度學習的方法和工具; 更加偏向于神經網絡方面的操作,為了更好地入門,其API設計與Numpy的API設計相近;
What’s Tensor
- scalar: 1.1
標量; dim = 0; - vector: [1.1], [1.1, 2.2, …]
向量; dim = 1; - matrix: [[1.1, 2.2], [3.3, 4.4], [5.5, 6.6]]
矩陣; dim = 2; [1.1, 2.2]、[3.3, 4.4]、[5.5, 6.6]均是作為一行存在; - tensor: rank>2rank>2rank>2
其實所有數據都可以叫做tensor,不只是維度大于2的數據,scalar、vector、matrix都可以叫做tensor,但是常見實戰時各叫各的,方便區分,這樣解釋是為了方便理解tensor。
Tensor Flow in Graph
TF is a computing lib(科學計算庫)
- int(整型數據),float(單精度浮點型數據),double(雙精度浮點型數據)
- bool(布爾類型數據)
- string(字符串類型數據)
創建不同類型的數據
tf.constant()為創建一個Tensor;
Tensor Property(Tensor屬性)
(1) tf.device(“cpu”): 指定創建的數據在CPU上計算;
tf.device(“gpu”): 指定創建的數據在GPU上計算;
注: 如果a和b都在CPU或者都在GPU上是可以一起運算的,但是如果a在CPU上而b在GPU上,或者a在GPU而b在CPU上時,是不可以一起運算的,需要進行CPU/GPU轉換
(2) aa = a.gpu(): 將a由在CPU計算轉換為在GPU計算并賦值給aa;
bb = b.cpu: 將b由在GPU計算轉換為在CPU計算并賦值給bb;
(3) b.numpy(): 將b由tensor數據類型轉換為numpy數據類型;
(4) b.ndim(): 返回b的維度;
(5) b.shape(): 返回b的結構;
(6) tf.rank(): 返回tensor類型數據的維度;
(7) b.name: 無需理解,為TensorFlow1.0版本的起名問題;
Check Tensor Type(判斷數據類型)
(1) tf.is_tensor(b): 判斷b是否為tensor類型的數據;
(2) a.dtype: 返回a的數據類型;
(3) a.dtype = tf.float32: 查看a的數據類型是否為tensor數據類型中的float32;
Convert(數據類型轉換)
(1) a = np.arange(5): 創建a,默認存儲的數據類型為int64;
(2) aa = tf.convert_to_tensor(a): 將a轉換為tensor類型的數據,轉換后數據類型保持不變,依然為int64;
(3) aa = tf.convert_to_tensor(a, dtype = tf.int32): 將a轉換為tensor類型的數據,并且改變a的數據類型為int32;
(4) tf.cast(aa, dtype = tf.float32): cast是一個專業的數據類型轉換工具,將aa由int32轉換為float32;
bool & int(布爾型和整型數據之間的轉換)
在計算時我們往往會將布爾類型的數據轉換為整型數據,方便計算,因此,布爾型和整型數據之間的相互轉換非常常見。
(1) tf.cast(b, dtype = tf.bool): 將b由整型數據轉換為布爾型數據。其中,0轉換為False,1轉換為True;
(2) tf.cast(b, dtype = tf.bool): 將bb由布爾型數據轉換為整型數據。其中,False轉換為0,True轉換為1;
tf.Variable(可以優化參數的一種數據類型)
例如: y=w?x+by=w*x+by=w?x+b,這里的www和bbb都是參數,那么www和bbb除了是tensor類型的數據以外,還有一個額外的屬性,就是Variable,就是說我們可以認為: w = tf.Variable(w),這樣的話,一個tensor類型的數據經過Variable包裝后,會自動具有了一些可求導的特性,經過包裝后會有name和trainable兩個屬性,其中name屬性無需考慮,是TensorFlow1.0中的概念; trainable屬性是可以訓練的意思,就是說當www和bbb需要進行向后傳播或者求導的時候,需要trainable這個屬性進行對www和bbb的跟蹤,會自動記錄www和bbb的梯度信息。
注: isinstance()并不推薦使用,更推薦使用tf.is_tensor()。
To numpy(如何將數據由tensor類型轉換為numpy類型)
tensor數據一般是運行在GPU上的,我們可能需要在CPU上完成一些額外的控制,所以我們需要將數據由tensor類型轉換為numpy類型。
(1) a.numpy(): 將a轉換為numpy類型的數據;
(2) 如果a是scalar(即標量)數據的話,我們可以直接使用int(a)或者float(a)來對a的數據類型進行轉換;
參考文獻:
[1] 龍良曲:《深度學習與TensorFlow2入門實戰》
[2] https://playground.tensorflow.org
總結
以上是生活随笔為你收集整理的深度学习(5)TensorFlow基础操作一: TensorFlow数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机海战术?曝一加Ace2系列还有新机 天
- 下一篇: 深度学习(6)TensorFlow基础操