Created by: phlrain
load_program_state和 set_program_state 主要的目的是为了解决finetune时,需要加载的模型参数只是参数集合的子集。如果是全集,建议直接 fluid.load 接口
此pr主要是增强load program state功能,使 能够加载旧的save (包含save_params, save_persistables, save_vars)保存的模型。
在之前的实现中,加载部分参数的使用方式如下, fluid.io.load_vars( exe, pretraining_params_path, main_program=main_program, predicate=existed_params)
这里 existed_params 是一个过滤的函数。
新的建议使用方式如下
load_var_list = list(filter(existed_params, main_program.list_vars()) )
para_state = fluid.load_program_state( pretraining_params_path, var_list = load_var_list)
fluid.set_program_state( main_program, para_state)
分3个步骤
-
根据 existed_params 过滤函数 从program中选出 需要加载的 load_var_list, 如果旧接口保存的模型是一个单独的文件,这个列表必须提供,但是如果提供的是多个小小文件的格式,可以不提供
-
从本地加载 parameter state
-
将加载 parameter state 设置到 program中
注:在加载新接口保存的模型的时候,步骤1可以省略,步骤2中调用load_program_state 的时候,var_list也不需要提供