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