[英]How to deal with DataCollator and DataLoaders in Huggingface?
我在組合 DataLoader 和 DataCollator 時遇到問題。 以下帶有 DataCollatorWithPadding 的代碼會導致ValueError: 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.
當我想遍歷批次時。
from torch.utils.data.dataloader import DataLoader
from transformers import DataCollatorWithPadding
data_collator = DataCollatorWithPadding(tokenizer)
train_dataloader = DataLoader(train_dataset, shuffle=True, batch_size=16,
collate_fn=data_collator)
eval_dataloader = DataLoader(eval_dataset, batch_size=16, collate_fn=data_collator)
for epoch in range(2):
model.train()
for step, batch in enumerate(train_dataloader):
outputs = model(**batch)
loss = outputs.loss
但是,我發現了另一種方法,我將 DataCollator 更改為lambda x: x
然后它給了我一個TypeError: DistilBertForSequenceClassification object argument after ** must be a mapping, not list
from torch.utils.data.dataloader import DataLoader
train_dataloader = DataLoader(train_dataset, shuffle=True, batch_size=16, collate_fn=lambda x: x )
eval_dataloader = DataLoader(eval_dataset, batch_size=16, collate_fn=lambda x: x)
for epoch in range(2):
model.train()
for step, batch in enumerate(train_dataloader):
outputs = model(**batch)
loss = outputs.loss
為了可重復性和代碼的 rest,我在 Google Colab 上為您提供了一個 Jupyter Notebook。 您會在筆記本底部找到錯誤。 鏈接到 Colab 筆記本
如果您從筆記本中查看train_dataset
object:
print(train_dataset)
Output:
Dataset({
features: ['text', 'label', 'input_ids', 'attention_mask'],
num_rows: 25000
})
DataCollatorWithPadding
不知道如何填充text
列,因為它只是一個字符串。
由於您已經對數據集進行了標記化,因此您可以像這樣簡單地刪除text
列:
train_dataset = train_dataset.remove_columns("text")
其他三列都是張量,因此可以由數據整理器填充。 然后,您的第一個訓練循環將按預期運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.