当前位置: 首页>Python>正文

Pytorch中的contiguous理解

Pytorch中的contiguous理解

最近遇到這個函數,但查的中文博客里的解釋貌似不是很到位,這里翻譯一下stackoverflow上的回答并加上自己的理解。

在pytorch中,只有很少幾個操作是不改變tensor的內容本身,而只是重新定義下標與元素的對應關系的。換句話說,這種操作不進行數據拷貝和數據的改變,變的是元數據

這些操作是:

narrow(),view(),expand()和transpose()

舉個栗子,在使用transpose()進行轉置操作時,pytorch并不會創建新的、轉置后的tensor,而是修改了tensor中的一些屬性(也就是元數據),使得此時的offset和stride是與轉置tensor相對應的。轉置的tensor和原tensor的內存是共享的!

為了證明這一點,我們來看下面的代碼:

x = torch.randn(3, 2)
y = x.transpose(x, 0, 1)
x[0, 0] = 233
print(y[0, 0])
# print 233

可以看到,改變了y的元素的值的同時,x的元素的值也發生了變化。

也就是說,經過上述操作后得到的tensor,它內部數據的布局方式和從頭開始創建一個這樣的常規的tensor的布局方式是不一樣的!于是…這就有contiguous()的用武之地了。

在上面的例子中,x是contiguous的,但y不是(因為內部數據不是通常的布局方式)。注意不要被contiguous的字面意思“連續的”誤解,tensor中數據還是在內存中一塊區域里,只是布局的問題!

當調用contiguous()時,會強制拷貝一份tensor,讓它的布局和從頭創建的一毛一樣。

一般來說這一點不用太擔心,如果你沒在需要調用contiguous()的地方調用contiguous(),運行時會提示你:

RuntimeError: input is not contiguous

只要看到這個錯誤提示,加上contiguous()就好啦~

https://www.zydui.com/af501VG8CDQ9VAF8J.html
>

相关文章:

  • Pytorch中的contiguous理解
  • 英雄聯盟陣營
  • python英雄對戰代碼_用 Python 分析了 1982 場英雄聯盟數據,開局前預測游戲對局勝負!...
  • 兩個嵌套for循環的執行順序
  • C# for循環的執行順序
  • C語言for循環語句的執行順序
  • Python編程PTA題解——字符轉換,提取
  • C練習記錄8——數字字符轉換成相對應的數值
  • 上古卷軸5python_如何評價游戲《上古卷軸5:天際》大型擴展MOD「突破天際」?...
  • 后羿 12 ‖ 對箭
  • 街霸對決最新服務器機柜銷售,街霸對決終于定檔,下個月就可以玩到,這次希望能抽到春麗!...
  • 暴雪風云錄·淺談暴雪的創業歷程
  • python獲取命令行參數 flags_命令行參數--tf.app.flags和python argparse
  • 機器中的幽靈:人工智能在金融市場的影響、風險及監管
  • 什么已配置?為什么在Mac上運行?
  • mdnsresponder_什么是mDNSResponder,為什么它可以在Mac上運行?
  • 趕集網入車行,縱向垂直看好市場
  • visual studio2019團隊資源管理器的使用
  • 被塵封的故事技能點bug_魔獸世界:獵人(射擊)新天賦與技能實測
  • 蘋果黑解升級后顯示無服務器,果粉怒了!升級iOS 12.1.3后,這款iPhone徹底無服務了...
  • 安裝C4D報錯 找不到libmmd.dll文件
  • c4d python_【C4D開發】C4D中的python生成器
  • C4DR19安裝的時候進度條卡到一半就不動了|折騰了4小時-【已解決】
  • lol8月21號服務器維護,《LOL》8月21日測試服 更新維護內容
  • caxa齒輪零件圖_齒輪油泵-各零件圖
  • 各職業藍色套裝屬性和掉落地點
  • 焦慮和迷茫的2020年!
  • 經典的網絡爆笑語錄
  • 關于程序員的59條搞笑但卻真實無比的編程語錄
  • 2019年5月22日 AY 程序員調侃語錄