1

我正在尝试在维基百科文本上使用一个小型预训练 GPT2 模型。我尝试使用尽可能多的文本作为 gpt2 模型的输入。该模型为我总结了文本。如何使用整个 wiki 文章进行输入。就像现在一样,我仅限于 768 个令牌之类的东西。典型的 wiki 文章比这更长。使用超过 768 个标记的文本段落有什么技巧吗?

4

1 回答 1

0

是的,你可以这么做。

但是您需要记住的一件事input_shape是模型的 保持不变,因此您必须指定maximum要为模型提供输入的序列长度。

现在回到你能做的事情——

如果改变模型的输入,后续层的输入形状也会改变。

您可以做的是复制模型架构及其预训练的权重,并使用所需的输入形状对其进行微调。无论您使用的是 PyTorch 还是任何其他框架都没有关系。仅input_shape根据您的要求进行更改。PyTorch 将模型权重保存在 中OrderedDict,您可以加载预训练模型并从那里复制权重。

样本:

model1 = TheModelClass(*args, **kwargs)
model1.load_state_dict(torch.load(PATH_TO_PRETRAINED_MODEL))
model1.eval()

model2 = TheNewModelClass(*args, **kwargs)

params1 = model1.named_parameters()
params2 = model2.named_parameters()

dict_params2 = dict(params2)

for name1, param1 in params1:
    if name1 in dict_params2:
        dict_params2[name1].data.copy_(param1.data)

您可以在 PyTorch 论坛中找到一些很好的参考链接:

https://discuss.pytorch.org/t/copying-weights-from-one-net-to-another/1492

https://discuss.pytorch.org/t/copy-weights-only-from-a-networks-parameters/5841

于 2020-03-31T16:39:24.627 回答