【解决办法】torch交叉熵使用时遇到 Dimension out of range
生活随笔
收集整理的這篇文章主要介紹了
【解决办法】torch交叉熵使用时遇到 Dimension out of range
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡述
其實這個問題我很久以前用pytorch寫程序的時候就遇到過這個問題,當時糾結了很久之后最后解決了。當時本來就想來寫個東西來記錄下避免其他人也遇到這樣的問題。但后面我個菜雞就完全忘記了emmmm
展示說明
不同于我以往直接給出結論。這次我會通過展示的方式較為詳細的講解下。
- 導入包
- 創造這個損失函數類
- 隨機生成下這個數據A
內容如下:
A tensor([[ 1.0483, -1.4251, 1.0502, 0.2437, 0.1477],[-0.1300, -1.0798, -1.0835, -1.0473, 1.2076],[-0.1647, -1.1366, 0.7088, 1.3719, 1.9135]], requires_grad=True)- 隨機生成3個label
內容如下:
target tensor([2, 2, 3])沒有問題
output = loss(A, target)- 這時候就是沒有問題的
有問題的情況演示
- 將前面創建的A在一維上取argmax。得到對應的label
內容如下:
A_arg tensor([2, 4, 4])- 調用,出現題目所示的bug
報錯非常一大串emmm。關鍵就是下面這句。
RuntimeError: Dimension out of range (expected to be in range of [-1, 0], but got 1)解釋
其實就是因為torch的交叉熵的輸入第一個位置的輸入應該是在每個label下的概率, 而不是對應的label。
所以直接寫成label的你,就出現上面所說的錯誤了。
NLLoss還是CE兩者都是類似的。第一個輸入為每個樣本在不同label下的概率值(矩陣),第二個輸入為label。注意,這里的label本質上都是概率矩陣在列方向上的index(也就是對應于某個樣本的index類別)
總結
以上是生活随笔為你收集整理的【解决办法】torch交叉熵使用时遇到 Dimension out of range的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超松弛迭代法求方法组的解(Python实
- 下一篇: 【解决方案】VS2017读取文件中文乱码