官术网_书友最值得收藏!

  • Python 深度學習
  • 呂云翔 劉卓然 關捷雄等編著
  • 597字
  • 2021-04-14 11:54:20

4.3 Tensor的變換、拼接和拆分

PyTorch提供了大量對Tensor進行操作的函數或方法,這些函數內部使用指針實現對矩陣的形狀變換、拼接和拆分等操作,使得我們無須關心Tensor在內存的物理結構或者管理指針就可以方便快速地執行這些操作。Tensor.nelement()、Tensor.ndimension()或ndimension.size()可分別用于查看矩陣元素的個數、軸的個數以及維度,屬性Tensor.shape也可以用于查看Tensor的維度。

在PyTorch中,Tensor.reshape和Tensor.view都能被用于更改Tensor的維度。它們的區別在于:Tensor.view要求Tensor的物理存儲必須是連續的,否則將報錯,而Tensor.reshape則沒有這種要求。但是,Tensor.view返回的一定是一個索引,若更改返回值,則原始值同樣被更改,Tensor.reshape返回的是引用還是拷貝是不確定的。它們的相同之處是都接收要輸出的維度作為參數,且輸出的矩陣元素個數不能改變,若在維度中輸入-1,PyTorch會自動推斷它的數值。

torch.squeeze和torch.unsqueeze用于給Tensor去掉和添加軸。torch.squeeze可以去掉維度為1的軸,而torch.unsqueeze用于給Tensor的指定位置添加一個維度為1的軸。

torch.t和torch.transpose用于轉置二維矩陣,同時只接收二維Tensor。值得注意的是,torch.t是torch.transpose的簡化版。

對于高維度Tensor,可以使用permute方法來變換維度。

PyTorch提供了torch.cat和torch.stack用于拼接矩陣,區別在于:torch.cat在已有的軸dim上拼接矩陣,給定軸的維度可以不同,而其他軸的維度必須相同。torch.stack在新的軸上拼接,同時它要求被拼接矩陣的所有維度都相同。下面的例子中可以很清楚地表明它們的使用方式和區別。

除了拼接矩陣外,PyTorch還提供了torch.split和torch.chunk用于拆分矩陣。它們的不同之處在于:torch.split傳入的是拆分后每個矩陣的大小,既可以傳入list,也可以傳入整數,而torch.chunk傳入的是拆分的矩陣個數。

主站蜘蛛池模板: 策勒县| 平安县| 阳西县| 北辰区| 大连市| 尚义县| 怀宁县| 德州市| 米林县| 历史| 唐山市| 阳原县| 乌审旗| 稷山县| 彩票| 洛扎县| 杂多县| 彭泽县| 福安市| 铜陵市| 敦煌市| 秭归县| 清苑县| 澄迈县| 郓城县| 广宗县| 临海市| 麦盖提县| 治多县| 项城市| 大港区| 武乡县| 延寿县| 剑川县| 昌宁县| 苍南县| 西丰县| 新邵县| 威信县| 县级市| 禄劝|