pytorch 踩坑,TypeError: expected seqence object with len>_0 or a single integer_typeerror: expected sequence object with len __ 0

钢之炼丹术师發表於2024-05-19

CSDN搬家失敗,手動匯出markdown後再匯入部落格園

在看 Faster-R-CNN 復現程式碼(https://blog.csdn.net/weixin_44791964/article/details/105739918)的時候,發現推理階段報錯,Dataparallel 無法 gather

參考 https://discuss.pytorch.org/t/nn-dataparallel-typeerror-expected-sequence-object-with-len-0-or-a-single-integer/97082/23 後發現,問題出在網路輸出的 Tensor 其實被某個函式提前放到 CPU 上了,變成了 ndarray,所以 Dataparallel 無法處理

Yes. Sorry, in this line I put tensor to cpu before gather.

return torch.unsqueeze(loss, 0), predicted_interaction.cpu().detach().view(-1, 1), correct_interaction.cpu().detach().view(-1, 1)

看他的回答,意思是在 model(input) 的返回值應該全是 Tensor,但是他的返回值先轉回 CPU 上了,而 Dataparallel 只能處理 cuda 資料,所以報錯

解決辦法:

要麼去掉 Dataparallel,要麼在輸出結果後再轉 CPU。

相關文章