torch學習筆記--tensor介紹1,對tensor的基本認知


tensor是torch的核心,理論上四大框架如果不考慮直接匯編,使用更底層的語言,那么運算的速度和結果都應該是一樣的。

caffe有blob數據塊減小數據讀取時候造成的時間損失,而tensor也是一樣。(本人只了解過caffe、torch,其它兩款沒碰過)

tensor像是numpy的升級版,對速度十分重視的深度學習(等價於神經網絡模型)來說,對數據讀取,運算速度都嚴格要求。

 --- 創建思維的tensor 4x5x6x2
 z = torch.Tensor(4,5,6,2)
 --- 更多的維數需求也可以通過下面的方式實現,下面是6維的例子:
 s = torch.LongStorage(6)
 s[1] = 4; s[2] = 5; s[3] = 6; s[4] = 2; s[5] = 7; s[6] = 3;
 x = torch.Tensor(s)

  而nDimension()可以得到維數大小,size()可以得到每個維的數量大小。LongStorage數據則會顯示數據的長度。

> x:nDimension()
6
> x:size()
 4
 5
 6
 2
 7
 3
[torch.LongStorage of size 6]

  事實上Tensor數據是保存在Storage中,所以也能夠通過storage()函數獲取tensor數據中的值。但存儲的方式和讀取的方式不同。

       對於三維的tensor數據來說

x:storage()[x:storageOffset()
              +(3-1)*x:stride(1)+(4-1)*x:stride(2)+(5-1)*x:stride(3)]

等價於

x[3][4][5]

  tensor數據寫入的方式也能寫成:

x = torch.Tensor(4,5)
s = x:storage()
for i=1,s:size() do -- 填充storge
  s[i] = i
end
> x -- x被認為是2維矩陣
  1   2   3   4   5
  6   7   8   9  10
 11  12  13  14  15
 16  17  18  19  20
[torch.DoubleTensor of dimension 4x5]

  一行的數據元素是連續存儲的。

x = torch.Tensor(4,5)
i = 0

x:apply(function()
  i = i + 1
  return i
end)

> x
  1   2   3   4   5
  6   7   8   9  10
 11  12  13  14  15
 16  17  18  19  20
[torch.DoubleTensor of dimension 4x5]

> x:stride()
 5
 1  -- 在最后維之中的元素是連續的
[torch.LongStorage of size 2]

  tensor之中數據元素的類別有(分別能在c對應):

ByteTensor -- 無符號字符串
CharTensor -- 有符號字符串
ShortTensor -- short
IntTensor -- ints
LongTensor -- longs
FloatTensor -- floats
DoubleTensor -- doubles

  多數操作都只支持浮點類型數據

由於tensor已經使用了優化過的函數,所以多用已有函數進行操作。

甚至如果你想要復制一個數,也盡量使用函數。

y = torch.Tensor(x:size()):copy(x)

或者

y = x:clone()

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM