最近使用Hugging Face的BERT模型,遇到了数据加载上的一个问题。
“Unable to create tensor, you should probably activate truncation and/or padding with ‘padding=True’ ‘truncation=True’ to have batched tensors with the same length.”
是在DataLoader中声明的DataSet参数
train_data_loader = DataLoader(dataset=train_data, batch_size=16, shuffle=True)
这是DataSet的定义
class MyDataSet(Dataset):
def __init__(self, path):
self.text_list = []
self.label_list = []
self.tokenizer = BertTokenizer.from_pretrained(path)
with open(path, 'r',encoding='utf-8') as f:
text, label = f.readline().split('\t')
label=torch.tensor([ int(label.strip())])
tokenizer =self.tokenizer(text, padding='max_length',return_token_type_ids=True, return_attention_mask=True,max_length=128, truncation=True, return_tensors='pt')
self.text_list.append(tokenizer)
self.label_list.append(label)
def __getitem__(self, item):
return self.text_list[item], self.label_list[item]
def __len__(self):
return len(self.text_list)
很诧异,到底哪里错了。网上的资料也都语焉不详。
直到我发现把BERT的路径搞错了。
将
self.tokenizer = BertTokenizer.from_pretrained(path)
改为
self.tokenizer = BertTokenizer.from_pretrained(bert_path)
#这里的bert_path是我电脑上定义的路径,path是要加载的数据的路径。
希望这个报错信息能带给你一些启发。