首页 PaddleHub 帖子详情
关于加载预训练模型的问题
收藏
快速回复
PaddleHub 问答预训练模型 1452 2
关于加载预训练模型的问题
收藏
快速回复
PaddleHub 问答预训练模型 1452 2

1.我想实现这种操作:只得到预训练的模型的某一层的输出,或者只截取部分预训练模型的层数进行finetune,用于自己的模型,比如:提取VGG16的前3层,不要后两层。

2.是否可以用预训练的模型的参数去初始化一个同样结构的模型的参数,这样可以我自己来操作。对了,如何自定义初始化模型参数,我也没找到。(类似动手深度学习中风格迁移一样)

我找了官方文档里面根本就没有类似的教程,我在paddlehub和模型库里面了解到用load_var,预训练模型都只能加载到静态模型中去,并不能实现我上面的操作。 

我翻了官方文档,也翻了github的说明,是我没找到吗?还是没有啊?mxnet和pytorch都支持这样的操作,我晕了。

0
收藏
回复
全部评论(2)
时间顺序
Chenwh
#2 回复于2020-04

关于问题1:有几个问题确认下

1)这个预训练的模型是用save存的还是save_inference_model存的?如果用的是save_inference_model,参数是分别存的文件还是合并到一个文件里存的?

2)想载入部分参数的模型code和预训练模型是一致的吗?还是模型也只写了一部分?如果模型code只写了想载入参数的部分,那之前存储的参数必须是分开存的,也就是用save_inference_model,不指定params_filename参数;如果模型code和预训练模型一致,那可以都载入进来,后两层的参数设置下trainable=false

问题2:

1)既然结构相同,直接载入可以吗?用load_params试试?

2)自定义参数,是指开始就指定固定的参数值吗?用一个numpy值去指定参数值?如果是的话,我举个例子

weight_attr = fluid.ParamAttr(
            name="weight",
            learning_rate=0.5,
            initializer=fluid.initializer.NumpyArrayInitializer(weight_array),
            trainable=True)
bias_attr = fluid.ParamAttr(
            name="bias",
            learning_rate=0.5,
            initializer=fluid.initializer.NumpyArrayInitializer(bias_array),
            trainable=True)
pred = fluid.layers.fc(input=img,
                               size=10,
                               param_attr=weight_attr,
                               bias_attr=bias_attr,
                               act='relu')

参数名一致,参数意义也一致,如果您使用的是save_inference_model(params_filename=None)或者新的save接口,是可以将原来的参数载入到您需要的模型中的,细节您可以展开说一下

0
回复
M
Mxboy崛起
#3 回复于2020-04

好的,感谢您的回复。(之前没看到回复以为沉了,所以就没管了)

之前参考了一些别人项目里的代码,然后看了您的回答我基本懂了。

还有一个问题是,如果我是从模型库或者paddlehub下下来的预训练模型,这种加载方式应该是一样的吧,应该使用什么加载方法呢?

ps:刚刚接触paddle不久,现在处于学习阶段,很多不懂,所以想对我学习中一些不清楚的地方详细了解一下。

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户