如何从检查点加载图层
How to load a layer from checkpoint
我有这个配置:
network = {"source_embed_raw": {"class": "linear", ...}}
我想从一些现有检查点加载层 source_embed_raw
的参数。
在该检查点中,param 的调用方式不同 (output/rec/target_embed_raw/W
).
我明白,我可以用 preload_from_files
加载参数,但我不确定在我的情况下具体的方法,因为层的名称不同,因此只需添加一个前缀就可以了不做作业。
目前preload_from_files
无法以这种方式实现。
所以我目前看到这些可能的选项:
我们可以扩展 preload_from_files
(和 CustomCheckpointLoader
)的逻辑以允许这样的事情(一些通用的 variable/layer 名称映射)。
或者您可以将图层从 source_embed_raw
重命名为例如old_model__target_embed_raw
然后使用 preload_from_files
和 prefix
选项。如果你不想重命名它,你仍然可以添加一个像old_model__target_embed_raw
这样的层,然后在source_embed_raw
.
中使用参数共享
如果检查点中的参数实际上被称为 output/rec/target_embed_raw/...
,您可以创建一个名为 old_model__output
的 SubnetworkLayer
,因为另一个 SubnetworkLayer
名称为 rec
,并在该层中命名为 target_embed_raw
.
您可以编写一个脚本来简单地加载现有的检查点,并将存储作为一个新的检查点,但具有重命名的变量名(这也完全独立于 RETURNN)。
LinearLayer
(以及大多数其他层)允许准确指定参数的初始化方式(forward_weights_init
和 bias_init
)。参数初始化非常灵活。例如。有像load_txt_file_initializer
这样的东西可以用。目前没有这样的功能可以直接从现有检查点加载它,但我们可以添加它。或者你可以简单地在你的配置中实现逻辑(它只会是 5 行左右的代码)。
除了使用 preload_from_files
,您还可以使用 SubnetworkLayer
和 load_on_init
选项。然后是与选项 2 类似的逻辑。
我有这个配置:
network = {"source_embed_raw": {"class": "linear", ...}}
我想从一些现有检查点加载层 source_embed_raw
的参数。
在该检查点中,param 的调用方式不同 (output/rec/target_embed_raw/W
).
我明白,我可以用 preload_from_files
加载参数,但我不确定在我的情况下具体的方法,因为层的名称不同,因此只需添加一个前缀就可以了不做作业。
目前preload_from_files
无法以这种方式实现。
所以我目前看到这些可能的选项:
我们可以扩展
preload_from_files
(和CustomCheckpointLoader
)的逻辑以允许这样的事情(一些通用的 variable/layer 名称映射)。或者您可以将图层从
中使用参数共享source_embed_raw
重命名为例如old_model__target_embed_raw
然后使用preload_from_files
和prefix
选项。如果你不想重命名它,你仍然可以添加一个像old_model__target_embed_raw
这样的层,然后在source_embed_raw
.如果检查点中的参数实际上被称为
output/rec/target_embed_raw/...
,您可以创建一个名为old_model__output
的SubnetworkLayer
,因为另一个SubnetworkLayer
名称为rec
,并在该层中命名为target_embed_raw
.您可以编写一个脚本来简单地加载现有的检查点,并将存储作为一个新的检查点,但具有重命名的变量名(这也完全独立于 RETURNN)。
LinearLayer
(以及大多数其他层)允许准确指定参数的初始化方式(forward_weights_init
和bias_init
)。参数初始化非常灵活。例如。有像load_txt_file_initializer
这样的东西可以用。目前没有这样的功能可以直接从现有检查点加载它,但我们可以添加它。或者你可以简单地在你的配置中实现逻辑(它只会是 5 行左右的代码)。除了使用
preload_from_files
,您还可以使用SubnetworkLayer
和load_on_init
选项。然后是与选项 2 类似的逻辑。