引言
基礎數據類型
torch.Tensor
是一種包含單一數據類型元素的多維矩陣。- 目前在1.2版本中有9種類型。
- 同python相比,pytorch沒有string類型;
- 由於pytorch是面向計算的,對於字符這種通常通過編碼下手;
- 怎樣用數字的形式去表示語言(字符串) : NLP -> one-hot 或 Embedding(Word2vec,glove)
判斷數據類型
- 打印數據類型:a.type()
- 打印的是基本的數據類型,沒有提供額外的信息:type(a)
- 合法性檢驗:isinstance(a, torch.FloatTensor)
1 |
In[2]: import torch |
同一個tensor部署在cpu和gpu時的數據類型是不一樣的
1 |
In[7]: isinstance(a, torch.cuda.FloatTensor) |
標量 Dimension 0 / rank 0
1 |
In[12]: torch.tensor(1.3) |
loss 就是一個標量
查看標量的維度
len(a.shape)
a.dim()
len(a.size())
1 |
In[13]: a = torch.tensor(2.2) |
常用向量
1維向量
torch.tensor([ 數據 ])
torch.FloatTensor(維度)
- 從numpy導入
torch.from_numpy(data)
1 |
In[19]: torch.tensor([1.1]) |
dim為1的向量有 Bias
Linear Input 線性層的輸入
從0.4版本增加了 標量的表示,以前是[0.3]來表示標量,但這樣語義上不太清晰。
1維的形狀如何得到
- .size
- .shape
幾個概念:
dim:指的是size/shape的長度
size/shape指的是具體的形狀
tensor指的是具體的數字
2維向量
1 |
In[30]: a = torch.randn(2,3) |
常用於帶有batch的 Linear Input 例如 [4, 784] 4張784像素的圖片
3維向量
形狀:list(a.shape)
1 |
In[49]: a = torch.rand(1,2,3) // 使用隨機的均勻分布 |
場景:NLP文字處理
RNN Input Batch 例如 W,F[10, 100] 一個句子由10個單詞構成,且每個單詞由100維向量表示
W,S,F[10, 20, 100] 20個句子,每個句子由10個單詞構成,且每個單詞由100維向量表示
4維向量
1 |
In[54]: a = torch.rand(2,3,28,28) //隨即均勻化 |
場景 : CNN
[b, c, h, w] b:幾張照片 c: 通道 w:寬 h:高度
PS:在我們學習的過程中,一定要結合着物理意義去學習,就比如說我創建一個 [4,3,28,28] 的向量,這個向量有什么含義?當我們把向量進行matmul(矩陣相乘) 后,又有什么含義?不僅僅是為學習工具而去學習,而要時刻明白我這樣做能達到什么樣的效果。