pytorch 更改用于条件生成的预训练Huggingface Pegasus模型的层数

gmol1639  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(212)

我试图改变预训练Huggingface Pegasus模型中的层数,以查看性能是否有所改善。我尝试更新配置函数。但它会生成索引超出范围错误。
以下是我尝试的代码。

from transformers import PegasusConfig

config = PegasusConfig(
    encoder_layers = 14,
    encoder_attention_heads = 16,
    decoder_layers = 14,
    decoder_attention_heads = 16,
    max_position_embeddings= 2048,
)

from transformers import pipeline, PegasusTokenizer, PegasusForConditionalGeneration

model = PegasusForConditionalGeneration.from_pretrained('google/pegasus-pubmed',config = config, ignore_mismatched_sizes=True)
a8jjtwal

a8jjtwal1#

据我所知,你正在尝试使用HuggingFace的预训练模型进行推理。这个模型包含不同的层(16个编码器层,默认情况下16个解码器层用于你使用的预训练模型)。
如果你想使用模型的内部状态(这相当于忽略一些最后的层),你可以用model = PegasusForConditionalGeneration.from_pretrained('google/pegasus-pubmed')创建模型,然后使用模型推理调用的参数output_hidden_states=True,并使用任何内部层的嵌入。但是你不能只绕过中间层,因为下面的层依赖于它。
如果你想通过添加层来改变网络的结构,你不能使用预训练的模型,因为你试图添加的层会有随机的权重。所以你必须从配置中创建新模型,并在你可以访问的数据上训练它。你可以尝试用预训练的权重初始化模型的一些层,但是在训练之前你不会有好的结果,因为模型仍然有一些完全随机的权重。

相关问题