當前位置:編程學習大全網 - 源碼下載 - tensor.view()、tensor.reshape()、tensor.resize_() 三者的區別

tensor.view()、tensor.reshape()、tensor.resize_() 三者的區別

我們已經知道pytorch的tensor由“頭信息區”和“storage”兩部分組成,其中tensor的實際數據是以壹維數組(storage)的方式存於某個連續的內存中的。。

view 從字面意思上就是“ 視圖 ”的意思,就是將原tensor以某種排列方式展示給我們, view()不會改變原storage、也不會新建storage,只新建頭信息區

本質上, view()返回的是針對壹維storage的某種排列視圖,並且這種視圖只能是連續、等距切分storage再連續豎向疊加形成的視圖,不能跳躍式切分 ,如下圖例子。

註意:如果tensor是不連續的,則不能使用view()( /p/51678ea7a959 )。

我們知道,tensor不連續是不能使用 view() 方法的。

只有將不連續tensor轉化為連續tensor(利用contiguous(), /p/51678ea7a959 )後,才能使用view()。

reshape()正是先完成連續化,然後再進行view()

reshape() 和 view() 的區別:

(1)當 tensor 滿足連續性要求時,reshape() = view(),和原來 tensor ***用存儲區;

(2)當 tensor不滿足連續性要求時,reshape() = **contiguous() + view(),會產生有新存儲區的 tensor,與原來tensor 不***用存儲區。

前面說到的 view()和reshape()都必須要用到全部的原始數據,比如妳的原始數據只有12個,無論妳怎麽變形都必須要用到12個數字,不能多不能少。因此妳就不能把只有12個數字的 tensor 強行 reshap 成 2×5 的。

但是 resize_() 可以做到,無論原始存儲區有多少個數字,我都能變成妳想要的維度,數字不夠怎麽辦?隨機產生湊!數字多了怎麽辦?就取我需要的部分!

1.截取時:

會改變原tensor a,但不會改變storage(地址和值都不變),且a和b***用storage(這裏是2638930351680

)。

2.添加時:會改變原tensor a,且會改變storage(地址和值都變),但a和b還是***用storage(這裏是2638924338752

)。

  • 上一篇:期貨的止損方法和關鍵點位設定,求高手賜教~
  • 下一篇:跑腿app都能做什麽服務?
  • copyright 2024編程學習大全網