io_cn.rst 15.4 KB
Newer Older
C
Cheerego 已提交
1 2 3 4 5 6 7 8 9
#################
 fluid.io
#################



.. _cn_api_fluid_io_load_inference_model:

load_inference_model
T
Tink_Y 已提交
10
-------------------------------
C
Cheerego 已提交
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

.. py:class:: paddle.fluid.io.load_inference_model(dirname, executor, model_filename=None, params_filename=None, pserver_endpoints=None)

从指定目录中加载 推理model(inference model)

参数:
  - **dirname** (str) – model的路径
  - **executor** (Executor) – 运行 inference model的 ``executor``
  - **model_filename** (str|None) –  推理 Program 的文件名称。如果设置为None,将使用默认的文件名为: ``__model__``
  - **params_filename** (str|None) –  加载所有相关参数的文件名称。如果设置为None,则参数将保存在单独的文件中。
  - **pserver_endpoints** (list|None) – 只有在分布式推理时需要用到。 当在训练时使用分布式 look up table , 需要这个参数. 该参数是 pserver endpoints 的列表 

返回: 这个函数的返回有三个元素的元组(Program,feed_target_names, fetch_targets)。Program 是一个 ``Program`` ,它是推理 ``Program``。  ``feed_target_names`` 是一个str列表,它包含需要在推理 ``Program`` 中提供数据的变量的名称。` `fetch_targets`` 是一个 ``Variable`` 列表,从中我们可以得到推断结果。

返回类型:元组(tuple)

抛出异常:
   - ``ValueError`` – 如果 ``dirname`` 非法 

..  code-block:: python

    exe = fluid.Executor(fluid.CPUPlace())
    path = "./infer_model"
    endpoints = ["127.0.0.1:2023","127.0.0.1:2024"]
    [inference_program, feed_target_names, fetch_targets] =
        fluid.io.load_inference_model(dirname=path, executor=exe)
    results = exe.run(inference_program,
                  feed={feed_target_names[0]: tensor_img},
                  fetch_list=fetch_targets)
    # 在这个示例中,inference program 保存在 ./infer_model/__model__”中
    # 参数保存在./infer_mode 单独的若干文件中
    # 加载 inference program 后, executor 使用 fetch_targets 和 feed_target_names 执行Program, 得到推理结果



T
Tink_Y 已提交
46 47 48



C
Cheerego 已提交
49 50 51 52

.. _cn_api_fluid_io_load_params:

load_params
T
Tink_Y 已提交
53
-------------------------------
C
Cheerego 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82

.. py:class:: paddle.fluid.io.load_params(executor, dirname, main_program=None, filename=None)

该函数过滤掉 给定 ``main_program`` 中所有参数,然后将它们加载保存在到目录 ``dirname`` 中或文件中的参数。

``dirname`` 用于指定保存变量的目录。如果变量保存在指定目录的若干文件中,设置文件名 None; 如果所有变量保存在一个文件中,请使用filename来指定它

注意:有些变量不是参数,但它们对于训练是必要的。因此,您不能仅通过 ``save_params()`` 和 ``load_params()`` 保存并之后继续训练。可以使用 ``save_persistables()`` 和 ``load_persistables()`` 代替这两个函数

参数:
 - **executor**  (Executor) – 加载变量的 executor
 - **dirname**  (str) – 目录路径
 - **main_program**  (Program|None) – 需要加载变量的 Program。如果为 None,则使用 default_main_Program 。默认值: None
 - **filename**  (str|None) – 保存变量的文件。如果想分开保存变量,设置 filename=None. 默认值: None

返回: None
  
**代码示例**

..  code-block:: python
    
    exe = fluid.Executor(fluid.CPUPlace())
    param_path = "./my_paddle_model"
    prog = fluid.default_main_program()
    fluid.io.load_params(executor=exe, dirname=param_path,
                        main_program=None)
                        


T
Tink_Y 已提交
83 84 85



C
Cheerego 已提交
86 87 88 89

.. _cn_api_fluid_io_load_persistables:

load_persistables
T
Tink_Y 已提交
90
-------------------------------
C
Cheerego 已提交
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

.. py:class:: paddle.fluid.io.load_persistables(executor, dirname, main_program=None, filename=None)

该函数过滤掉 给定 ``main_program`` 中所有参数,然后将它们加载保存在到目录 ``dirname`` 中或文件中的参数。

``dirname`` 用于指定保存变量的目录。如果变量保存在指定目录的若干文件中,设置文件名 None; 如果所有变量保存在一个文件中,请使用filename来指定它

参数:
    - **executor**  (Executor) – 加载变量的 executor
    - **dirname**  (str) – 目录路径
    - **main_program**  (Program|None) – 需要加载变量的 Program。如果为 None,则使用 default_main_Program 。默认值: None
    - **filename**  (str|None) – 保存变量的文件。如果想分开保存变量,设置 filename=None. 默认值: None

返回: None
  
**代码示例**

..  code-block:: python

    exe = fluid.Executor(fluid.CPUPlace())
    param_path = "./my_paddle_model"
    prog = fluid.default_main_program()
    fluid.io.load_persistables(executor=exe, dirname=param_path,
                               main_program=None)
 


T
Tink_Y 已提交
118 119 120



C
Cheerego 已提交
121 122 123 124

.. _cn_api_fluid_io_load_vars:

load_vars
T
Tink_Y 已提交
125
-------------------------------
C
Cheerego 已提交
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161

.. py:class:: paddle.fluid.io.load_vars(executor, dirname, main_program=None, vars=None, predicate=None, filename=None)

``executor`` 从指定目录加载变量。

有两种方法来加载变量:方法一,``vars`` 为变量的列表。方法二,将已存在的 ``Program`` 赋值给 ``main_program`` ,然后将加载 ``Program`` 中的所有变量。第一种方法优先级更高。如果指定了 vars,那么忽略 ``main_program`` 和 ``predicate`` 。

``dirname`` 用于指定加载变量的目录。如果变量保存在指定目录的若干文件中,设置文件名 None; 如果所有变量保存在一个文件中,请使用 ``filename`` 来指定它

参数:
 - **executor**  (Executor) – 加载变量的 executor
 - **dirname**  (str) – 目录路径
 - **main_program**  (Program|None) – 需要加载变量的 Program。如果为 None,则使用 default_main_Program 。默认值: None
 - **vars**  (list[Variable]|None) –  要加载的变量的列表。 优先级高于main_program。默认值: None
 - **predicate**  (function|None) – 如果不等于None,当指定main_program, 那么只有 predicate(variable)==True 时,main_program中的变量会被加载。
 - **filename**  (str|None) – 保存变量的文件。如果想分开保存变量,设置 filename=None. 默认值: None

抛出异常:
  - ``TypeError`` - 如果参数 ``main_program`` 为 None 或为一个非 ``Program`` 的实例
   
返回: None
  
**代码示例**

..  code-block:: python
    
    exe = fluid.Executor(fluid.CPUPlace())
    param_path = "./my_paddle_model"

    # 第一种使用方式 使用 main_program 指定变量
    def name_has_fc(var):
        res = "fc" in var.name
        return res

    prog = fluid.default_main_program()
    fluid.io.load_vars(executor=exe, dirname=path, main_program=prog,
T
Tink_Y 已提交
162 163 164
                       vars=None, predicate=name_has_fc)
    #加载所有`main_program`中变量名包含 ‘fc’ 的变量
    #并且此前所有变量应该保存在不同文件中
C
Cheerego 已提交
165 166


T
Tink_Y 已提交
167
    #用法2:使用 `vars` 列表来指明变量
C
Cheerego 已提交
168 169 170
    var_list = [var_a, var_b, var_c]
    fluid.io.load_vars(executor=exe, dirname=path, vars=var_list,
                       filename="vars_file")
T
Tink_Y 已提交
171 172
    # 加载 var_a , var_b , var_c .它们此前应被保存在同一文件中
    # 文件名为 'var_file' ,路径为 "./my_paddle_model".
C
Cheerego 已提交
173 174 175
 


T
Tink_Y 已提交
176 177 178



C
Cheerego 已提交
179 180 181 182

.. _cn_api_fluid_io_save_inference_model:

save_inference_model
T
Tink_Y 已提交
183
-------------------------------
C
Cheerego 已提交
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222

.. py:class:: paddle.fluid.io.save_inference_model(dirname, feeded_var_names, target_vars, executor, main_program=None, model_filename=None, params_filename=None, export_for_deployment=True)

修改指定的 ``main_program`` ,构建一个专门用于推理的 ``Program``,然后  ``executor`` 把它和所有相关参数保存到 ``dirname`` 中

``dirname`` 用于指定保存变量的目录。如果变量保存在指定目录的若干文件中,设置文件名 None; 如果所有变量保存在一个文件中,请使用filename来指定它

参数:
  - **dirname** (str) – 保存推理model的路径
  - **feeded_var_names** (list[str]) – 推理(inference)需要 feed 的数据
  - **target_vars** (list[Variable]) – 保存推理(inference)结果的 Variables
  - **executor** (Executor) –  executor 保存  inference model
  - **main_program** (Program|None) – 使用 ``main_program`` ,构建一个专门用于推理的 ``Program`` (inference model). 如果为None, 使用   ``default main program``   默认: None.
  - **model_filename** (str|None) – 保存 推理P rogram 的文件名称。如果设置为None,将使用默认的文件名为: ``__model__``
  - **params_filename** (str|None) – 保存所有相关参数的文件名称。如果设置为None,则参数将保存在单独的文件中。
  - **export_for_deployment** (bool) – 如果为真,Program将被修改为只支持直接推理部署的Program。否则,将存储更多的信息,方便优化和再训练。目前只支持True。

返回: None

抛出异常:
 - ``ValueError`` – 如果 ``feed_var_names`` 不是字符串列表
 - ``ValueError`` – 如果 ``target_vars`` 不是 ``Variable`` 列表

**代码示例**

..  code-block:: python

    exe = fluid.Executor(fluid.CPUPlace())
    path = "./infer_model"
    fluid.io.save_inference_model(dirname=path, feeded_var_names=['img'],
                 target_vars=[predict_var], executor=exe)

    # 在这个示例中,函数将修改默认的主程序让它适合于推断‘predict_var’。修改的
    # 推理Program 将被保存在 ./infer_model/__model__”中。
    # 和参数将保存在文件夹下的单独文件中 ./infer_mode




T
Tink_Y 已提交
223 224 225



C
Cheerego 已提交
226 227 228 229

.. _cn_api_fluid_io_save_params:

save_params
T
Tink_Y 已提交
230
-------------------------------
C
Cheerego 已提交
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261

.. py:class:: paddle.fluid.io.save_params(executor, dirname, main_program=None, filename=None)

该函数过滤掉 给定 ``main_program`` 中所有参数,然后将它们保存到目录 ``dirname`` 中或文件中。

``dirname`` 用于指定保存变量的目录。如果想将变量保存到指定目录的若干文件中,设置文件名 None; 如果想将所有变量保存在一个文件中,请使用filename来指定它

注意:有些变量不是参数,但它们对于训练是必要的。因此,您不能仅通过 ``save_params()`` 和 ``load_params()`` 保存并之后继续训练。可以使用 ``save_persistables()`` 和 ``load_persistables()`` 代替这两个函数


参数:
 - **executor**  (Executor) – 保存变量的 executor
 - **dirname**  (str) – 目录路径
 - **main_program**  (Program|None) – 需要保存变量的 Program。如果为 None,则使用 default_main_Program 。默认值: None
 - **vars**  (list[Variable]|None) –  要保存的所有变量的列表。 优先级高于main_program。默认值: None
 - **filename**  (str|None) – 保存变量的文件。如果想分开保存变量,设置 filename=None. 默认值: None
 
返回: None
  
**代码示例**

..  code-block:: python
    
    exe = fluid.Executor(fluid.CPUPlace())
    param_path = "./my_paddle_model"
    prog = fluid.default_main_program()
    fluid.io.save_params(executor=exe, dirname=param_path,
                         main_program=None)
                         


T
Tink_Y 已提交
262 263 264



C
Cheerego 已提交
265 266 267 268

.. _cn_api_fluid_io_save_persistables:

save_persistables
T
Tink_Y 已提交
269
-------------------------------
C
Cheerego 已提交
270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299

.. py:class:: paddle.fluid.io.save_persistables(executor, dirname, main_program=None, filename=None)

该函数过滤掉 给定 ``main_program`` 中所有参数,然后将它们保存到目录 ``dirname`` 中或文件中。

``dirname`` 用于指定保存变量的目录。如果想将变量保存到指定目录的若干文件中,设置 ``filename=None`` ; 如果想将所有变量保存在一个文件中,请使用 ``filename`` 来指定它

参数:
 - **executor**  (Executor) – 保存变量的 executor
 - **dirname**  (str) – 目录路径
 - **main_program**  (Program|None) – 需要保存变量的 Program。如果为 None,则使用 default_main_Program 。默认值: None
 - **predicate**  (function|None) – 如果不等于None,当指定main_program, 那么只有 predicate(variable)==True 时,main_program中的变量
 - **vars**  (list[Variable]|None) –  要保存的所有变量的列表。 优先级高于main_program。默认值: None
 - **filename**  (str|None) – 保存变量的文件。如果想分开保存变量,设置 filename=None. 默认值: None
 
返回: None
  
**代码示例**

..  code-block:: python
    
    exe = fluid.Executor(fluid.CPUPlace())
    param_path = "./my_paddle_model"
    prog = fluid.default_main_program()
    fluid.io.save_persistables(executor=exe, dirname=param_path,
                               main_program=None)
    
    


T
Tink_Y 已提交
300

C
Cheerego 已提交
301 302 303 304 305 306



.. _cn_api_fluid_io_save_vars:

save_vars
T
Tink_Y 已提交
307
-------------------------------
C
Cheerego 已提交
308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343

.. py:class:: paddle.fluid.io.save_vars(executor, dirname, main_program=None, vars=None, predicate=None, filename=None)

通过 ``Executor`` ,此函数将变量保存到指定目录下。

有两种方法可以指定要保存的变量:第一种方法,在列表中列出变量并将其传给 ``vars`` 参数。第二种方法是,将现有程序分配给 ``main_program`` ,它会保存program中的所有变量。第一种方式具有更高的优先级。换句话说,如果分配了变量,则将忽略 ``main_program`` 和 ``predicate`` 。

``dirname`` 用于指定保存变量的文件夹。如果您希望将变量分别保存在文件夹目录的多个单独文件中,请设置 ``filename`` 为无;如果您希望将所有变量保存在单个文件中,请使用 ``filename`` 指定它。

参数:
      - **executor** (Executor)- 为保存变量而运行的执行器。
      - **dirname** (str)- 目录路径。
      - **main_program** (Program | None)- 保存变量的程序。如果为None,将自动使用默认主程序。默认值:None。
      - **vars** (list [Variable] | None)- 包含要保存的所有变量的列表。它的优先级高于 ``main_program`` 。默认值:None。
      - **predicate** (function | None)- 如果它不是None,则只保存 ``main_program`` 中使 :math:`predicate(variable)== True` 的变量。它仅在我们使用 ``main_program`` 指定变量时才起作用(换句话说,vars为None)。默认值:None。
      - **filename** (str | None)- 保存所有变量的文件。如果您希望单独保存变量,请将其设置为None。默认值:None。

返回:     None

抛出异常:    
    - ``TypeError`` - 如果main_program不是Program的实例,也不是None。

**代码示例**

..  code-block:: python

      exe = fluid.Executor(fluid.CPUPlace())
      param_path = "./my_paddle_model"

      # 第一种用法:用main_program来指定变量。
      def name_has_fc(var):
          res = "fc" in var.name
          return res

      prog = fluid.default_main_program()
      fluid.io.save_vars(executor=exe, dirname=path, main_program=prog,
T
Tink_Y 已提交
344
                         vars=None, predicate = name_has_fc)
C
Cheerego 已提交
345 346 347 348 349 350 351 352 353 354 355 356
      # 将main_program中名中包含“fc”的的所有变量保存。
      # 变量将分开保存。


      # 第二种用法: 用vars来指定变量。
      var_list = [var_a, var_b, var_c]
      fluid.io.save_vars(executor=exe, dirname=path, vars=var_list,
                         filename="vars_file")
      # var_a,var_b和var_c将被保存。 他们将使用同一文件,名为“var_file”,保存在路径“./my_paddle_model”下。



T
Tink_Y 已提交
357 358 359



C
Cheerego 已提交
360