簡體   English   中英

Huggingface中DataCollator和DataLoader如何處理?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM