【问题标题】:Saving and reload huggingface fine-tuned transformer保存和重新加载拥抱脸微调变压器
【发布时间】:2021-02-16 03:54:31
【问题描述】:

我正在尝试重新加载经过微调的 DistilBertForTokenClassification 模型。我正在使用变压器 3.4.0 和 pytorch 版本 1.6.0+cu101。使用 Trainer 训练下载的模型后,我使用 trainer.save_model() 保存模型,并在故障排除中通过 model.save_pretrained() 保存在不同的目录中。我正在使用 Google Colab 并将模型保存到我的 Google 驱动器中。在测试模型之后,我还在测试中评估了模型,得到了很好的结果,但是,当我返回笔记本(或工厂重启 colab 笔记本)并尝试重新加载模型时,预测结果很糟糕。检查目录后,config.json 文件和 pytorch_mode.bin 都在那里。以下是完整代码。

from transformers import DistilBertForTokenClassification

# load the pretrained model from huggingface
#model = DistilBertForTokenClassification.from_pretrained('distilbert-base-cased', num_labels=len(uniq_labels))
model = DistilBertForTokenClassification.from_pretrained('distilbert-base-uncased', num_labels=len(uniq_labels)) 

model.to('cuda');

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
    output_dir = model_dir +  'mitmovie_pt_distilbert_uncased/results',          # output directory
    #overwrite_output_dir = True,
    evaluation_strategy='epoch',
    num_train_epochs=3,              # total number of training epochs
    per_device_train_batch_size=16,  # batch size per device during training
    per_device_eval_batch_size=64,   # batch size for evaluation
    warmup_steps=500,                # number of warmup steps for learning rate scheduler
    weight_decay=0.01,               # strength of weight decay
    logging_dir = model_dir +  'mitmovie_pt_distilbert_uncased/logs',            # directory for storing logs
    logging_steps=10,
    load_best_model_at_end = True
)

trainer = Trainer(
    model = model,                         # the instantiated ???? Transformers model to be trained
    args = training_args,                  # training arguments, defined above
    train_dataset = train_dataset,         # training dataset
    eval_dataset = test_dataset             # evaluation dataset
)

trainer.train()

trainer.evaluate()

model_dir = '/content/drive/My Drive/Colab Notebooks/models/'
trainer.save_model(model_dir + 'mitmovie_pt_distilbert_uncased/model')

# alternative saving method and folder
model.save_pretrained(model_dir + 'distilbert_testing')

重启后回到笔记本...

from transformers import DistilBertForTokenClassification, DistilBertConfig, AutoModelForTokenClassification

# retreive the saved model 
model = DistilBertForTokenClassification.from_pretrained(model_dir + 'mitmovie_pt_distilbert_uncased/model', 
                                                        local_files_only=True)

model.to('cuda')

现在从任一目录中的模型预测都很糟糕,但是,该模型确实有效并输出了我期望的类数,但实际训练的权重似乎尚未保存或不知何故未加载。

【问题讨论】:

  • 关于保存和加载变压器模型的其他两个问题会导致精度降低(herehere)。我认为你应该打开一个错误报告。
  • 您找到解决此问题的方法了吗?
  • 尝试检查层,保存前,重新加载Colab和模型后,尝试最后一层,权重应该相同
  • 您能否分享一下您是如何运行测试的?请注意,model.generate 和 trainer.predict 并不总是生成相同的输出。

标签: python pytorch huggingface-transformers


【解决方案1】:

您是否尝试过在文件夹中加载培训师保存的模型:

mitmovie_pt_distilbert_uncased/results

Huggingface 训练器将模型直接保存到定义的 output_dir。

【讨论】:

    猜你喜欢
    • 2022-06-28
    • 2020-06-17
    • 2022-01-04
    • 2020-12-18
    • 2020-10-12
    • 2021-09-15
    • 2022-08-20
    • 2021-11-24
    • 2020-07-22
    相关资源
    最近更新 更多