在使用pytorch交叉熵損失函數(shù)loss = nn.CrossEntropyLos(v, targets)時發(fā)現(xiàn)報錯
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)。
排查后發(fā)現(xiàn)模型預(yù)測值V在訓(xùn)練階段最后一個step時,tensor維度從二維變成一維,導(dǎo)致出錯。
例:訓(xùn)練集個數(shù)81,bs設(shè)置為4時,最后一個step 只剩1張圖片。最后step時tensor維度從二維變成一維。
于是添加以下判斷語句解決問題。如果有其他方法,可以交流一下。
1.文章來源:http://www.zghlxwxcb.cn/news/detail-690734.html
v = net(inputs)
if len(v.shape)==1: #方式出現(xiàn)訓(xùn)練最后一個step時,出現(xiàn)v是一維的情況
v=torch.unsqueeze(v,0)
loss = loss_func(v, targets)
2.可以在DataLoader中drop_last參數(shù)設(shè)置False文章來源地址http://www.zghlxwxcb.cn/news/detail-690734.html
到了這里,關(guān)于IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)錯誤解決辦法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!