DARWIN_CJQ 2024-11-16 14:48 采纳率: 0%
浏览 5

Whisper模型改造,断点续训出现问题。

https://github.com/yeyupiaoling/Whisper-Finetune
我是使用上面这个代码仓的代码,对基座模型Whisper进行修改,主要是添加了其他预训练音频模型与decoder的输入进行融合。

img

img


截图是我修改模型结构的代码,是在代码仓的finetune.py里修改的。
现在遇到的问题是:我在断点续训的时候发现loss比之前的检查点(checkpoint)大很多,我觉得是前面的训练是白费的。感觉添加的模块的参数没有被保存或者加载。

下面是我加载训练好模型的代码,我觉得是这部分出现问题的,但我不晓得如何修改。

img


同时也会报错:

img

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你提供的代码和错误信息来看,你遇到的问题是尝试加载预训练模型权重时,优化器的状态字典与模型的参数组大小不匹配。这可能是由于以下几个原因导致的:

    1. 模型结构更改:你在修改模型结构时可能添加或删除了某些层或参数,导致原始预训练模型的权重无法正确加载到你的自定义模型中。确保你的自定义模型结构与预训练模型完全一致。
    2. 加载方式不正确:当你使用model.load_state_dict(base_model.state_dict(), strict=False)时,你使用了strict=False参数,这意味着即使存在不匹配的参数也会尝试加载权重。但可能某些参数在你的自定义模型中存在但在预训练模型中不存在,这可能导致问题。

    解决方案:

    1. 确保模型结构一致:仔细检查你的自定义模型与预训练模型的结构是否完全一致。特别是你添加的自定义层,确保它们的数量和参数与预训练模型相匹配。
    2. 正确加载权重:尝试不使用strict=False,而是直接使用model.load_state_dict(base_model.state_dict())来加载权重。如果这导致错误,那么确实可能存在结构不一致的问题。在这种情况下,你可能需要手动调整你的模型结构以匹配预训练模型。
    3. 检查优化器:错误信息中提到优化器的状态字典与模型的参数组不匹配。确保你在创建优化器时使用的模型参数与加载权重的模型参数是一致的。如果你在创建优化器后修改了模型结构,那么需要重新创建优化器以匹配新的模型结构。
    4. 断点续训问题:如果你在断点续训时遇到问题,确保你使用的检查点与你当前的模型结构是一致的。如果不一致,你可能需要重新训练或使用与检查点匹配的模型结构。

    针对你的代码问题,建议在修改模型结构后重新创建优化器并保存其状态。这样可以确保在断点续训时能够正确加载优化器的状态。此外,仔细检查你的自定义模型与预训练模型的差异,确保它们完全一致以避免加载权重时出现问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月16日