-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
paddle 预训练模型转tensorflow,pytorch #37
Comments
同问怎么把paddle存的二进制参数文件还原成numpy矩阵 |
paddlepaddle provides the script to convert the tf model to paddlepadlle |
链接:https://pan.baidu.com/s/1AGTOEKmPTogjzUiUpcP0nw 密码:z51a
import paddle.fluid as fluid
import joblib
from model.ernie import ErnieConfig
from finetune.classifier import create_model
import numpy as np
import os
import argparse
# import joblib
# params = joblib.load('model.dct')
parser = argparse.ArgumentParser()
parser.add_argument("--init_pretraining_params", default='/Users/qiwang/github-star/paddle/params', type=str, help=".")
parser.add_argument("--ernie_config_path", default='./config/ernie_config.json', type=str, help=".")
parser.add_argument("--max_seq_len", default=10, type=int, help=".")
parser.add_argument("--num_labels", default=2, type=int, help=".")
parser.add_argument("--use_fp16", type=bool, default=False, help="Whether to use fp16 mixed precision training.")
parser.add_argument("--loss_scaling", type=float, default=1.0, help="only valid when use_fp16 is enabled.")
startup_prog = fluid.Program()
test_prog = fluid.Program()
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(startup_prog)
args = parser.parse_args()
ernie_config = ErnieConfig(args.ernie_config_path)
ernie_config.print_config()
with fluid.program_guard(test_prog, startup_prog):
with fluid.unique_name.guard():
train_pyreader, graph_vars = create_model(
args,
pyreader_name='train_reader',
ernie_config=ernie_config)
def if_exist(var):
#print(var.name)
return os.path.exists(os.path.join(args.init_pretraining_params,var.name))
fluid.io.load_vars(exe, args.init_pretraining_params, main_program=test_prog, predicate=if_exist)
var_dict = {}
for var in startup_prog.list_vars():
if os.path.exists(os.path.join(args.init_pretraining_params,var.name)):
#if ( 'encoder' in var.name or 'embedding' in var.name ) and 'tmp' not in var.name:
#if 'tmp' not in var.name:
fluid_tensor = fluid.global_scope().find_var(var.name).get_tensor()
print(var.name, np.array(fluid_tensor).shape)
var_dict[var.name] = np.array(fluid_tensor)
joblib.dump(var_dict,'model.dct') |
@wq343580510 谢谢 我们暂时没有支持 PaddlePaddle 模型转其它框架模型的计划,PaddlePaddle 定位于简单易用,推荐你直接使用 Paddle Fluid 来运行 ERNIE/BERT。 TO ALL: 对于用 TensorFlow 训练的 BERT模型,我们已提供了脚本转换成 Paddle Fluid 模型,请参考这里。 关于 Paddle Fluid 加载模型参数,目前已有相关文档可供参考。load_params()等接口本身的返回是None,加载模型后,参数存储在模型运行的 scope 里面,传入的参数main_program 描述了模型结构, 关于如何根据 main_program 获取参数列表,在PaddlePaddle/models下也有不少示例可供参考,同样也可以根据参数名从 scope 中获取参数对应的numpy对象,我们会尽快加强相关的文档建设。 |
多谢大兄弟! |
Close this issue due to being resolved |
请问怎么在tf/torch中使用这些参数呢? |
我在pytorch上加载之后,实验结果有很大的差别。 |
我自己实现了一个,欢迎使用 |
nice job, 有做inference的diff吗?结果是否一致 |
暂时还没有做,我会补充实验, |
请问您处理了么?我最近也在处理此类问题,但是出现如此错误? |
已经做了系统的试验,两个版本的推理不存在diff,欢迎使用~ |
请问应该怎么把预训练的模型参数转换成其他框架,这样是不是让人能更快上手。试了一下load_param,然后gloab_block()里面也没有参数,load居然返回None,加载的参数保存在哪,文档写的也不清楚,这种设计模式是真的没谁了,load模型参数的过程中,如果出错都不会报错的。
The text was updated successfully, but these errors were encountered: