Deep Learning with pytorch筆記(第三章)
阿新 • • 發佈:2020-07-13
3.7Tensor底層原理
真正管理儲存這資料的記憶體區域的,是類Storage的例項,這個Storage的例項通過一個一維陣列來儲存資料。不管外在表現為多少維的陣列,都是儲存在一個一維陣列中。而怎麼讓這個一維陣列看起來像多維陣列,就是Tensor完成的。
Storage類中有一個指標指向儲存資料的一位陣列,而Tensor通過對Storage進行封裝,使得在外部看來資料是多維的。
那麼如何得到tensor中的某個值在Storage的索引位置呢?
\[offset_{i,j} = stride[0]*i + stride[1]*j + storage\_offset \quad (1) \]
通過Size、storage offset和stride三個屬性
a = torch.tensor([[5, 7, 4], [1, 3, 2], [7, 3, 8]])
print(a)
print(a.storage())
print("size is {}".format(a.size()))
print("stride is {}".format(a.stride()))
print("storage offset is {}".format(a.storage_offset()))
size 一個torch.Size物件,它儲存著一個指示每個維度上有多少個元素的列表。
storage_offset
stride 一個元組,表示獲取一個Storage中的一個元素需要在每個維度上跳過多少個元素。
比如下圖:
其 stride=(3.1),storage_offset=0,根據方程(1),tensor中第2行第2列的值3在Storage中的索引: \(3*1+1*1 + 0=4\)