問題:
本人在使用BERT進行微調的時候,在讀取數據的時候出現了一個錯誤:ValueError: too many dimensions 'str'
於是我Debug了以后,發現問題出現在這個部分:tensor_labels = torch.tensor(labels, dtype=label_type),torch.tensor()是一個Python中用於創建tensor的一種方法(一個函數),具體來說語法如下:
torch.tensor(data, dtype=None, device=None, requires_grad=False),其中data的類型可以是:list, tuple, array, scalar等類型。
torch.tensor()可以從data中的數據部分做拷貝(而不是直接引用),根據原始數據類型生成相應的torch.LongTensor,torch.FloatTensor,torch.DoubleTensor:
a = torch.tensor([1, 2])
a.type()
'torch.LongTensor'
然后我查看了一下自己的這個data:labels,發現沒什么問題,labels本身就是一個list,符合語法規則的,那到底為什么會出現錯誤說的'str'呢?於是我點開labels里面一看,發現里面雖然是一些代表分類標簽的數字:0、1,但是這些數字的類型時‘str’也就是字符串,於是我找到了從數據獲得標簽的地方:
examples.append(readers.InputExample(guid=guid, texts=[sentence_a, sentence_b], label=int(label)))
在這個地方,我將每一條數據獲得的標簽label強制轉換成了int類型,運行后發現work!!
總結:
遇到此問題,首先要去找到torch.tensor()這個函數中,data部分的數據中是str的數據,然后找到獲得該str數據的地方做一下轉換。
