From e635e3fd2be4313b2e2e1491f54f95468899ebe7 Mon Sep 17 00:00:00 2001 From: ranqiu Date: Wed, 20 Sep 2017 14:55:49 +0800 Subject: [PATCH] Update faq of the doc --- doc/faq/index_cn.rst | 49 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/doc/faq/index_cn.rst b/doc/faq/index_cn.rst index 119e037aa25..3a7dc4a93c2 100644 --- a/doc/faq/index_cn.rst +++ b/doc/faq/index_cn.rst @@ -322,33 +322,12 @@ pip uninstall py_paddle paddle pip install python/dist/paddle*.whl && pip install ../paddle/dist/py_paddle*.whl -16. 如何加载预训练embedding参数 ------------------------------- - -设置embedding的参数属性 :code:`is_static=True`,使embedding参数在训练过程中保持不变,在创建parameters后,使用 :code:`parameters.set()` 加载预训练参数。 - -.. code-block:: python - - def load_parameter(file_name, h, w): - with open(file_name, 'rb') as f: - f.read(16) # skip header. - return np.fromfile(f, dtype=np.float32).reshape(h, w) - - - emb_para = paddle.attr.Param(name='emb', initial_std=0., is_static=True) - paddle.layer.embedding(size=word_dim, input=x, param_attr=emb_para) - - - parameters = paddle.parameters.create(my_cost) - parameters.set('emb', load_parameter(emb_param_file, 30000, 256)) - - -17. PaddlePaddle存储的参数格式是什么,如何和明文进行相互转化 +16. PaddlePaddle存储的参数格式是什么,如何和明文进行相互转化 --------------------------------------------------------- -PaddlePaddle保存的二进制参数文件内容由16位头信息和网络参数两部分组成。头信息中,第一位固定为0,第二位为4,在使用double精度时,第二位为8,第三位记录共有多少个数值。 +PaddlePaddle保存的模型参数文件内容由16字节头信息和网络参数两部分组成。头信息中,1~4字节表示PaddlePaddle版本信息;5~8字节表示每个参数占用的字节数,当保存的网络参数为float类型时为4,double类型时为8;9~16字节表示保存的参数总个数。 -将PaddlePaddle保存的二进制参数还原回明文时,先跳过PaddlePaddle模型参数文件的头信息,再提取网络参数,示例如下: +将PaddlePaddle保存的模型参数还原回明文时,可以使用相应数据类型的 :code:`numpy.array` 加载具体网络参数,此时需要跳过PaddlePaddle模型参数文件的头信息。一般情况下,PaddlePaddle保存的模型参数数据类型为float,所以在使用 :code:`numpy.array` 时一般设置 :code:`dtype=float32` 。示例如下: .. code-block:: python @@ -361,7 +340,7 @@ PaddlePaddle保存的二进制参数文件内容由16位头信息和网络参数 fmt="%.6f", delimiter=",") -将明文参数转化为PaddlePaddle可加载的模型参数时,先根据参数规模写入头信息,再写入具体网络参数。以下为将随机生成的矩阵转化为PaddlePaddle可加载的模型参数示例: +将明文参数转化为PaddlePaddle可加载的模型参数时,先根据数据类型和参数规模写入头信息,再写入具体网络参数。以下为将随机生成的矩阵转化为PaddlePaddle可加载的模型参数示例: .. code-block:: python @@ -371,3 +350,23 @@ PaddlePaddle保存的二进制参数文件内容由16位头信息和网络参数 param = np.float32(np.random.rand(height, width)) with open(param_file, "w") as fparam: fparam.write(header + param.tostring()) + +17. 如何加载预训练embedding参数 +------------------------------ + +设置embedding的参数属性 :code:`is_static=True`,使embedding参数在训练过程中保持不变,从模型文件将预训练参数载入 :code:`numpy.array`,在创建parameters后,使用 :code:`parameters.set()` 加载预训练参数。PaddlePaddle保存的模型参数文件前16字节为头信息,用户将参数载入 :code:`numpy.array` 时须从第17字节开始。 + +.. code-block:: python + + def load_parameter(file_name, h, w): + with open(file_name, 'rb') as f: + f.read(16) # skip header. + return np.fromfile(f, dtype=np.float32).reshape(h, w) + + + emb_para = paddle.attr.Param(name='emb', initial_std=0., is_static=True) + paddle.layer.embedding(size=word_dim, input=x, param_attr=emb_para) + + + parameters = paddle.parameters.create(my_cost) + parameters.set('emb', load_parameter(emb_param_file, 30000, 256)) -- GitLab