【发布时间】:2022-10-18 18:50:03
【问题描述】:
给定 Pytorch 中的一个简单的神经网络,例如:
import torch.nn as nn
net = nn.Sequential(
nn.Linear(3, 4),
nn.Sigmoid(),
nn.Linear(4, 1),
nn.Sigmoid()
).to(device)
如何将其转换为 Huggingface PreTrainedModel 对象?
目标是将 Pytorch nn.Module 对象从 nn.Sequential 转换为 Huggingface PreTrainedModel 对象,然后运行类似:
import torch.nn as nn
from transformers.modeling_utils import PreTrainedModel
net = nn.Sequential(
nn.Linear(3, 4),
nn.Sigmoid(),
nn.Linear(4, 1),
nn.Sigmoid()
).to(device)
# Do something to convert the Pytorch nn.Module to the PreTrainedModel object.
shiny_model = do_some_magic(net, some_args, some_kwargs)
# Save the shiny model that is a `PreTrainedModel` object.
shiny_model.save_pretrained("shiny-model")
PreTrainedModel.from_pretrained("shiny-model")
似乎将任何原生 Pytorch 模型构建/转换为 Huggingface 模型,需要一些配置https://huggingface.co/docs/transformers/main_classes/configuration
有很多方法可以“从头开始”训练模型,例如
-
[使用 BertLMHeadModel,而不是从头开始]https://www.kaggle.com/code/mojammel/train-model-from-scratch-with-huggingface/notebook(这也是对bert的微调,不是scratch)
-
[不是真的从头开始,使用 roberta 作为模板]https://huggingface.co/blog/how-to-train(这是来自 roberta 的微调,并不是真正从头开始训练)
-
[排序使用一些配置模板]https://www.thepythoncode.com/article/pretraining-bert-huggingface-transformers-in-python(这有点从头开始,但是使用 BERT 的模板来生成配置,如果我们想改变模型的工作方式,配置应该是什么样子?)
-
[Kinda 定义了一个模板,但使用的是 RobertaForMaskedLM]https://skimai.com/roberta-language-model-for-spanish/(这看起来有点像定义了一个模板,但将其限制为 RobertaForMaskedLM 模板)
部分问题:
-
如果我们有一个更简单的 Pytorch 模型,比如上面的代码 sn-p,如何在 Huggingface 中从头开始创建预训练模型?
-
如何创建 Huggingface 所需的预训练模型配置,以使从原生 Pytorch nn.Module 的转换工作?
【问题讨论】:
标签: python machine-learning pytorch huggingface-transformers pre-trained-model