pytorch 将Pandas Dataframe 转换为 Torch 数据集

kse8i1jr  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(341)

我有一个Pandas数据框架,结构如下:
| 路径|判决书|言语|输入值|标示|
| - -|- -|- -|- -|- -|
| audio1.mp3 |这是第一个音频|0.0,0.0,0.0,...,0.0,0.0|【【0.00005,...,0.0003】】|[第二十三、四、六、十一、......、十二|
| audio2.mp3 |这是第二个音频|0.0,0.0,0.0,...,0.0,0.0|【【0.000044,......,0.00033】】|[第二十三、四、六、十一、......、十二|
句子是音频的转录,语音列是音频的数组表示,而标签是基于定义的词汇表的句子的每个字母的数字表示。
我正在微调一个预先训练好的ASR模型,但是当我尝试将pands df传递给Trainer类并在其上调用.train()时,它会出错(KeyError:0)。根据文档,它只接受torch.utils.data.Datasettorch.utils.data.IterableDataset作为train_/eval_dataset参数。我的Trainer定义如下所示:

trainer = Trainer(
    model=model,
    data_collator=data_collator,
    args=training_args,
    compute_metrics=compute_metrics,
    train_dataset=ds_train, 
    eval_dataset=ds_test,
    tokenizer=processor.feature_extractor
)

ds_train和ds_test分别是我的训练和验证 Dataframe 。(80/20).我怎样才能把我的Pandas Dataframe 转换成所需的Dataset类型呢?我试着把data_collator类定义修改成Pandasdf,但是可以预见的是也不起作用.我'我假设在训练器上调用.train()时,train和eval数据集都调用data_collator类?

EDIT:我尝试使用Dataset.from_pandas(ds_train),但它无法转换它,因为我有包含二维数组的列,而它显然只能转换一维数组值。

31moq8wy

31moq8wy1#

这取决于你如何使用你的labels列。我不知道你的教练如何使用这些数据,但我建议定义你自己的数据集类(https://pytorch.org/tutorials/beginner/basics/data_tutorial.html#creating-a-custom-dataset-for-your-files)

class CustomDataset(Dataset):
    def __init__(self, dataframe):
        self.path = dataframe["path"]
        self.sentence = dataframe["sentence"]
        self.speech = dataframe["speech"]
        self.input_values = dataframe["input_values"]
        self.labels = dataframe["labels"]

    def __len__(self):
        return len(self.text)

    def __getitem__(self, idx):
        path = self.path.iloc[idx]
        sentence = self.sentence.iloc[idx]
        speech = self.speech.iloc[idx]
        input_values = self.input_values .iloc[idx]
        labels = self.labels.iloc[idx]
        return path, sentence, speech, input_values, labels

相关问题