为什么我的tensorflow Roberta模型无法训练/微调?

2024-04-19 09:57:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正试图根据我们自己的列车数据微调/训练我们的RoBERTa模型。该项目与SemEval-2020任务B完全相同,任务B是从3个句子中选择正确的理由,说明为什么一个句子违反常识。在过去的两天里,我们一直在与错误作斗争,主要是在尝试训练/微调我们的模型时。我们使用的代码来自https://huggingface.co/transformers/model_doc/roberta.html#robertamodel。尽管我们试图以多种方式修改此代码,但我们似乎无法真正开始训练我们的模型。我们的主要问题是我们试图训练模型的数据。我们试图立即插入numpy数组或pandas数据帧,但没有成功。最后,我们尝试使用tfds。我们使用了下面的代码,这导致了下面的错误代码

我安装了以下软件包:

# Modules
pip install transformers
from transformers import RobertaConfig, RobertaModel
from transformers import RobertaTokenizer, RobertaForMultipleChoice
from transformers import AutoModel, AutoTokenizer
import tensorflow as tf
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import os

我将我的训练集和测试集作为csv文件导入,在数据被清理和连接之后

# Read csv files
sample_data = pd.read_csv("sample.csv")
train_data = pd.read_csv("train_data.csv")
train_answers = pd.read_csv("train_answers.csv")
test_data = pd.read_csv("test_data.csv")
train_data['A_concat'] = train_data['FalseSent'] + '. ' + train_data['OptionA']
train_data['B_concat'] = train_data['FalseSent'] + '. ' + train_data['OptionB']
train_data['C_concat'] = train_data['FalseSent'] + '. ' + train_data['OptionC']
train_data.drop(['OptionA','OptionB','OptionC'],axis=1,inplace=True)
train_data.columns = ['id', 'FalseSent', 'OptionA', 'OptionB', 'OptionC']

我对列车和测试数据进行tfds:

tf_train_data = tf.data.experimental.CsvDataset("train_data.csv", record_defaults='Tensor', header=True)
tf_test_data = tf.data.experimental.CsvDataset("test_data.csv", record_defaults='Tensor', header=True)

然后使用这些数据集通过以下代码对模型进行训练:

from transformers import TFRobertaForMultipleChoice, TFTrainer, TFTrainingArguments

model = TFRobertaForMultipleChoice.from_pretrained("roberta-base")

training_args = TFTrainingArguments(
    output_dir='./results',          
    num_train_epochs=3,              
    per_device_train_batch_size=16,  
    per_device_eval_batch_size=64,   
    warmup_steps=500,                
    weight_decay=0.01,               
    logging_dir='./logs',            
)

trainer = TFTrainer(
    model=model,                        
    args=training_args,                 
    train_dataset=tf_train_data,    
    eval_dataset=tf_test_data       
)

trainer.train()

这将导致以下错误:

ValueError:训练数据集必须具有断言的基数

如果任何人对如何训练/优化我们的模型有任何建议或能为我们指出正确的方向,我们将非常感激


Tags: csv数据代码from模型testimportread