如何从检查点加载层

2024-04-27 00:52:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个配置:

network = {"source_embed_raw": {"class": "linear", ...}}

我想从一些现有的检查点加载层source_embed_raw的参数。 在该检查点中,param的调用方式不同(output/rec/target_embed_raw/W

我知道,我可以用preload_from_files加载参数,但我不确定在我的例子中加载参数的确切方式,因为层的名称不同,因此简单地添加前缀不起作用


Tags: fromsourcetargetoutput参数rawparam方式
1条回答
网友
1楼 · 发布于 2024-04-27 00:52:30

以这种方式使用preload_from_files目前不可能做到这一点。 所以我现在看到了这些可能的选择:

  1. 我们可以扩展preload_from_files(和CustomCheckpointLoader)的逻辑以允许类似的东西(一些通用变量/层名称映射)

  2. 或者您可以将层从source_embed_raw重命名为old_model__target_embed_raw,然后使用preload_from_filesprefix选项。如果您不想重命名它,您仍然可以添加一个类似old_model__target_embed_raw的层,然后在source_embed_raw中使用参数共享

    如果检查点中的参数实际上被称为类似于output/rec/target_embed_raw/...的参数,那么可以创建一个名为old_model__outputSubnetworkLayer,在另一个名为recSubnetworkLayer中创建一个名为target_embed_raw的层

  3. 您可以编写一个脚本来加载现有的检查点,并将其存储为一个新的检查点,但使用重命名的变量名(这也完全独立于RETURNN)

  4. LinearLayer(和大多数其他层)允许精确指定参数的初始化方式(forward_weights_initbias_init)。参数初始化非常灵活。有像load_txt_file_initializer这样的东西可以使用。目前还没有这样的函数直接从现有的检查点加载它,但我们可以添加它。或者你可以简单地在你的配置中实现逻辑(只需要5行左右的代码)

  5. 除了使用preload_from_files,还可以使用SubnetworkLayerload_on_init选项。然后是与选项2中类似的逻辑

相关问题 更多 >