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