提交 91d67623 编写于 作者: A adaxi123 提交者: Cheerego

Update FAQ (#855)

* update_faq

* revise the style

* modify the FAQ format
上级 76d8f574
# 预测引擎 # 预测引擎
## Q:VGG模型,训练时候使用`fluid.io.save_inference_model`保存模型,预测的时候使用`fluid.io.load_inference_model`加载模型文件。保存的是我自己训练的 VGG 模型。保存没问题,加载的时候报错`paddle.fluid.core.EnforceNotMet: Cannot read more from file` ? ### Q:VGG模型,训练时候使用`fluid.io.save_inference_model`保存模型,预测的时候使用`fluid.io.load_inference_model`加载模型文件。保存的是我自己训练的 VGG 模型。保存没问题,加载的时候报错`paddle.fluid.core.EnforceNotMet: Cannot read more from file` ?
+ 版本、环境信息 + 版本、环境信息
1)PaddlePaddle版本:Paddle Fluid 1.2.0。 1)PaddlePaddle版本:Paddle Fluid 1.2.0。
2)系统环境:Linux,Python2.7。 2)系统环境:Linux,Python2.7。
...@@ -52,16 +52,16 @@ PaddlePaddle Call Stacks: ...@@ -52,16 +52,16 @@ PaddlePaddle Call Stacks:
1、 模型文件有损坏或缺失。 1、 模型文件有损坏或缺失。
2、 模型参数和模型结构不匹配。 2、 模型参数和模型结构不匹配。
## Q:infer时,当先后加载检测和分类两个网络时,分类网络的参数为什么未被load进去? ### Q:infer时,当先后加载检测和分类两个网络时,分类网络的参数为什么未被load进去?
+ 问题解答 + 问题解答
尝试两个模型在不同的scope里面infer,使用`with fluid.scope_guard(new_scope)`,另外定义模型前加上`with fluid.unique_name.guard()`解决。 尝试两个模型在不同的scope里面infer,使用`with fluid.scope_guard(new_scope)`,另外定义模型前加上`with fluid.unique_name.guard()`解决。
## Q:c++调用paddlepaddle多线程预测出core? ### Q:c++调用paddlepaddle多线程预测出core?
+ 问题解答 + 问题解答
Paddle predict 库里没有多线程的实现,当上游服务并发时,需要用户起多个预测服务,[参考示例](http://paddlepaddle.org/documentation/docs/zh/1.3/advanced_usage/deploy/inference/native_infer.html) Paddle predict 库里没有多线程的实现,当上游服务并发时,需要用户起多个预测服务,[参考示例](http://paddlepaddle.org/documentation/docs/zh/1.3/advanced_usage/deploy/inference/native_infer.html)
## Q:两个模型都load之后,用第一个模型的时候会报错? ### Q:两个模型都load之后,用第一个模型的时候会报错?
+ 问题解答 + 问题解答
由于用`load_inference_model`的时候会修改一些用户不可见的环境变量,所以执行后一个`load_inference_model`的时候会把前一个模型的环境变量覆盖,导致前一个模型不能用,或者说再用的时候就需要再加载一次。此时需要用如下代码保护一下,[参考详情](https://github.com/PaddlePaddle/Paddle/issues/16661) 由于用`load_inference_model`的时候会修改一些用户不可见的环境变量,所以执行后一个`load_inference_model`的时候会把前一个模型的环境变量覆盖,导致前一个模型不能用,或者说再用的时候就需要再加载一次。此时需要用如下代码保护一下,[参考详情](https://github.com/PaddlePaddle/Paddle/issues/16661)
``` ```
......
# 安装与编译 # 安装与编译
## Linux安装PaddlePaddle ## Linux安装PaddlePaddle
### Q:Ubuntu18.10、CPU版本、Python3.6编译错误如何解决? ### Q:Ubuntu18.10、CPU版本、Python3.6编译错误如何解决?
...@@ -60,11 +60,12 @@ make: *** [Makefile:152: all] Error 2 ...@@ -60,11 +60,12 @@ make: *** [Makefile:152: all] Error 2
``` ```
CUDNN_STATUS_NOT_INITIALIZED at [/paddle/paddle/fluid/platform/device_context.cc:216] CUDNN_STATUS_NOT_INITIALIZED at [/paddle/paddle/fluid/platform/device_context.cc:216]
``` ```
+ 问题解答 + 问题解答
cuDNN与CUDA版本不一致导致。PIP安装的GPU版本默认使用CUDA 9.0和cuDNN 7编译,请根据您的环境配置选择在官网首页选择对应的安装包进行安装,例如paddlepaddle-gpu==1.2.0.post87 代表使用CUDA 8.0和cuDNN 7编译的1.2.0版本。 cuDNN与CUDA版本不一致导致。PIP安装的GPU版本默认使用CUDA 9.0和cuDNN 7编译,请根据您的环境配置选择在官网首页选择对应的安装包进行安装,例如paddlepaddle-gpu==1.2.0.post87 代表使用CUDA 8.0和cuDNN 7编译的1.2.0版本。
### Q:cuda9.0需要安装哪一个版本的paddle,安装包在哪? ### Q:cuda9.0需要安装哪一个版本的paddle,安装包在哪?
+ 问题解答 - 问题解答
pip install paddlepaddle-gpu 命令将安装支持CUDA 9.0 cuDNN v7的PaddlePaddle,可以参考[安装说明文档](http://paddlepaddle.org/documentation/docs/zh/1.4/beginners_guide/install/index_cn.html) pip install paddlepaddle-gpu 命令将安装支持CUDA 9.0 cuDNN v7的PaddlePaddle,可以参考[安装说明文档](http://paddlepaddle.org/documentation/docs/zh/1.4/beginners_guide/install/index_cn.html)
...@@ -88,7 +89,7 @@ pip install paddlepaddle-gpu 命令将安装支持CUDA 9.0 cuDNN v7的PaddlePadd ...@@ -88,7 +89,7 @@ pip install paddlepaddle-gpu 命令将安装支持CUDA 9.0 cuDNN v7的PaddlePadd
更多请参考[nvidia-docker](https://github.com/NVIDIA/nvidia-docker) 更多请参考[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)
### Q问题:安成功安装了PaddlePaddle CPU版本后,使用Paddle训练模型,训练过程中,Paddle会自动退出,gdb显示Illegal instruction? ### Q:安成功安装了PaddlePaddle CPU版本后,使用Paddle训练模型,训练过程中,Paddle会自动退出,gdb显示Illegal instruction?
+ 报错信息 + 报错信息
```bash ```bash
*** Aborted at 1539697466 (unix time) try "date -d @1539697466" if you are using GNU date *** *** Aborted at 1539697466 (unix time) try "date -d @1539697466" if you are using GNU date ***
...@@ -162,6 +163,7 @@ import paddle.fluid ...@@ -162,6 +163,7 @@ import paddle.fluid
PC: @ 0x0 (unknown) PC: @ 0x0 (unknown)
*** SIGILL (@0x7f6ac6ea9436) received by PID 16 (TID 0x7f6b07bc7700) from PID 18446744072751846454; stack trace: *** *** SIGILL (@0x7f6ac6ea9436) received by PID 16 (TID 0x7f6b07bc7700) from PID 18446744072751846454; stack trace: ***
``` ```
+ 问题解答 + 问题解答
请先确定一下机器是否支持AVX2指令集,如果不支持,请按照相应的不支持AVX2指令集的PaddlePaddle,可以解决该问题。 请先确定一下机器是否支持AVX2指令集,如果不支持,请按照相应的不支持AVX2指令集的PaddlePaddle,可以解决该问题。
...@@ -334,6 +336,7 @@ def testpaddle014(): ...@@ -334,6 +336,7 @@ def testpaddle014():
paddle package is already in your PYTHONPATH. But unittest need a clean environment. paddle package is already in your PYTHONPATH. But unittest need a clean environment.
Please uninstall paddle package before start unittest. Try to 'pip uninstall paddle'. Please uninstall paddle package before start unittest. Try to 'pip uninstall paddle'.
``` ```
+ 问题解答 + 问题解答
卸载PaddlePaddle包 `pip uninstall paddle`, 清理掉老旧的PaddlePaddle安装包,使得单元测试有一个干净的环境。如果PaddlePaddle包已经在python的site-packages里面,单元测试会引用site-packages里面的python包,而不是源码目录里 `/python` 目录下的python包。同时,即便设置 `PYTHONPATH``/python` 也没用,因为python的搜索路径是优先已经安装的python包。 卸载PaddlePaddle包 `pip uninstall paddle`, 清理掉老旧的PaddlePaddle安装包,使得单元测试有一个干净的环境。如果PaddlePaddle包已经在python的site-packages里面,单元测试会引用site-packages里面的python包,而不是源码目录里 `/python` 目录下的python包。同时,即便设置 `PYTHONPATH``/python` 也没用,因为python的搜索路径是优先已经安装的python包。
...@@ -372,6 +375,7 @@ python python/paddle/fluid/tests/book/test_fit_a_line.py ...@@ -372,6 +375,7 @@ python python/paddle/fluid/tests/book/test_fit_a_line.py
### Q:在Docker镜像上,GPU版本的PaddlePaddle运行结果报错 ### Q:在Docker镜像上,GPU版本的PaddlePaddle运行结果报错
![](https://user-images.githubusercontent.com/17102274/42516300-50f04f8e-8490-11e8-95f1-613d3d3f6ca6.png) ![](https://user-images.githubusercontent.com/17102274/42516300-50f04f8e-8490-11e8-95f1-613d3d3f6ca6.png)
![](https://user-images.githubusercontent.com/17102274/42516303-5594bd22-8490-11e8-8c01-55741484f126.png) ![](https://user-images.githubusercontent.com/17102274/42516303-5594bd22-8490-11e8-8c01-55741484f126.png)
+ 问题解答 + 问题解答
使用`sudo docker run --name paddle-test -v $PWD:/paddle --network=host -it docker.paddlepaddlehub.com/paddle:latest-dev /bin/bash`命令创建的docker容器仅能支持运行CPU版本的PaddlePaddle。 使用`sudo docker run --name paddle-test -v $PWD:/paddle --network=host -it docker.paddlepaddlehub.com/paddle:latest-dev /bin/bash`命令创建的docker容器仅能支持运行CPU版本的PaddlePaddle。
使用如下命令重新开启支持GPU运行的docker容器: 使用如下命令重新开启支持GPU运行的docker容器:
......
# 网络搭建及训练 # 网络搭建及训练
## Q:在RNN模型中如何遍历序列数据里每一个时间步? ### Q:在RNN模型中如何遍历序列数据里每一个时间步?
+ 问题解答 + 问题解答
对于LodTensor数据,分步处理每一个时间步数据的需求,大部分情况可以使用`DynamicRNN`[参考示例](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_machine_translation.py#L69) ,其中`rnn.step_input`即是每一个时间步的数据,`rnn.memory`是需要更新的rnn的hidden state,另外还有个`rnn.static_input`是rnn外部的数据在DynamicRNN内的表示(如encoder的output),可以利用这三种数据完成所需操作。 对于LodTensor数据,分步处理每一个时间步数据的需求,大部分情况可以使用`DynamicRNN`[参考示例](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_machine_translation.py#L69) ,其中`rnn.step_input`即是每一个时间步的数据,`rnn.memory`是需要更新的rnn的hidden state,另外还有个`rnn.static_input`是rnn外部的数据在DynamicRNN内的表示(如encoder的output),可以利用这三种数据完成所需操作。
rank_table记录了每个sequence的长度,DynamicRNN中调用了lod_tensor_to_array在产生array时按照rank_table做了特殊处理(sequence从长到短排序后从前到后进行slice),每个时间步数据的batch size可能会缩小(短的sequence结束时),这是Fluid DynamicRNN的一些特殊之处。 rank_table记录了每个sequence的长度,DynamicRNN中调用了lod_tensor_to_array在产生array时按照rank_table做了特殊处理(sequence从长到短排序后从前到后进行slice),每个时间步数据的batch size可能会缩小(短的sequence结束时),这是Fluid DynamicRNN的一些特殊之处。
对于非LoDTensor数据,可以使用StaticRNN,用法与上面类似,参考[语言模型示例]( https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleNLP/language_model/lstm/lm_model.py#L261) 对于非LoDTensor数据,可以使用StaticRNN,用法与上面类似,参考[语言模型示例]( https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleNLP/language_model/lstm/lm_model.py#L261)
## Q:batch norm 里面的两个参数:moving_mean_name、moving_variance_name应该是两个var,但是他们却没有受到 `with fluid.unique_name.guard()` 的影响,导致名字重复? ### Q:batch norm 里面的两个参数:moving_mean_name、moving_variance_name应该是两个var,但是他们却没有受到 `with fluid.unique_name.guard()` 的影响,导致名字重复?
+ 问题解答 + 问题解答
用户指定的name的优先级高于unique_name生成器,所以名字不会被改变。 用户指定的name的优先级高于unique_name生成器,所以名字不会被改变。
## Q:怎么配置让两个fc层共享参数? ### Q:怎么配置让两个fc层共享参数?
+ 问题解答 + 问题解答
只要指定param_attr相同名字即可,是`param_attr = fluid.ParamAttr(name='fc_share')`,然后把param_attr传到fc里去。 只要指定param_attr相同名字即可,是`param_attr = fluid.ParamAttr(name='fc_share')`,然后把param_attr传到fc里去。
## Q:调用`save_inference_model`后,`load_inference_model`加载预测模型的时候用py_reader读取,`feeded_var_names`为空也无法通过feed输入了。py_reader此刻应该如何声明? ### Q:调用`save_inference_model`后,`load_inference_model`加载预测模型的时候用py_reader读取,`feeded_var_names`为空也无法通过feed输入了。py_reader此刻应该如何声明?
+ 问题解答 + 问题解答
目前`load_inference_model`加载进行的模型还不支持py_reader输入。 目前`load_inference_model`加载进行的模型还不支持py_reader输入。
## Q:根据models里面的[ctr例子](https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleRec/ctr/infer.py)改写了一个脚本,主要在train的同时增加test过程,方便选择模型轮次,整体训练测试过程跑通,不过无法获取accuracy? ### Q:根据models里面的[ctr例子](https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleRec/ctr/infer.py)改写了一个脚本,主要在train的同时增加test过程,方便选择模型轮次,整体训练测试过程跑通,不过无法获取accuracy?
+ 问题解答 + 问题解答
AUC中带有LOD 信息,需要设置`return_numpy=False `来获得返回值。 AUC中带有LOD 信息,需要设置`return_numpy=False `来获得返回值。
## Q:CTR模型保存模型时报错 ### Q:CTR模型保存模型时报错
``` ```
Traceback (most recent call last): Traceback (most recent call last):
File "train.py", line 610, in <module> File "train.py", line 610, in <module>
...@@ -36,6 +36,7 @@ Traceback (most recent call last): ...@@ -36,6 +36,7 @@ Traceback (most recent call last):
"The target variable must have an " "The target variable must have an "
ValueError: The target variable must have an associated operator that generates it. ValueError: The target variable must have an associated operator that generates it.
``` ```
+ 代码文件:[network_conf.py](https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleRec/ctr/network_conf.py)只修改了最后一行: + 代码文件:[network_conf.py](https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleRec/ctr/network_conf.py)只修改了最后一行:
``` ```
accuracy = fluid.layers.accuracy(input=predict, label=words[-1]) accuracy = fluid.layers.accuracy(input=predict, label=words[-1])
...@@ -43,10 +44,11 @@ auc_var, batch_auc_var, auc_states = \ ...@@ -43,10 +44,11 @@ auc_var, batch_auc_var, auc_states = \
fluid.layers.auc(input=predict, label=words[-1], num_thresholds=2 ** 12, slide_steps=20) fluid.layers.auc(input=predict, label=words[-1], num_thresholds=2 ** 12, slide_steps=20)
return accuracy, avg_cost, auc_var, batch_auc_var, py_reader return accuracy, avg_cost, auc_var, batch_auc_var, py_reader
``` ```
+ 问题解答 + 问题解答
保存模型时需指定program 才能正确保存。请使用` executor = Executor(place)`, 你的train_program, 以及给` layers.data `指定的名称作为` save_inference_model` 的输入。 保存模型时需指定program 才能正确保存。请使用` executor = Executor(place)`, 你的train_program, 以及给` layers.data `指定的名称作为` save_inference_model` 的输入。
## Q:holder_ should not be null Tensor not initialized yet when Tensor::type() is called ### Q:holder_ should not be null Tensor not initialized yet when Tensor::type() is called
+ 错误信息 + 错误信息
``` ```
C++ Callstacks: C++ Callstacks:
...@@ -58,25 +60,25 @@ PaddlePaddle Call Stacks: ...@@ -58,25 +60,25 @@ PaddlePaddle Call Stacks:
错误提示是某个tensor为空。建议运行时加上环境变量GLOG_vmodule=operator=4 , GLOG_logtostderr=1看看运行到哪个op,哪个tensor为空。 错误提示是某个tensor为空。建议运行时加上环境变量GLOG_vmodule=operator=4 , GLOG_logtostderr=1看看运行到哪个op,哪个tensor为空。
## Q:使用py_reader读取数据的时候,怎么给读取的变量指定名字呢? ### Q:使用py_reader读取数据的时候,怎么给读取的变量指定名字呢?
+ 问题解答 + 问题解答
参考[create_py_reader_by_data](http://paddlepaddle.org/documentation/docs/zh/1.3/api_cn/layers_cn.html#create-py-reader-by-data) 参考[create_py_reader_by_data](http://paddlepaddle.org/documentation/docs/zh/1.3/api_cn/layers_cn.html#create-py-reader-by-data)
## Q:PaddlePaddle是否支持两维以上的变长tensor,如shape[-1, -1, 128]? ### Q:PaddlePaddle是否支持两维以上的变长tensor,如shape[-1, -1, 128]?
+ 问题解答 + 问题解答
配置网络的时候可以将shape写成[-1,任意正数,128],然后输入的时候shape可以为[任意正数,任意正数,128]。维度只是个占位,运行网络的时候的实际维度是从输入数据推导出来的。两个"任意整数" 在输入和配置的时候可以不相等。配置网络的时候第一维度必须为-1。 配置网络的时候可以将shape写成[-1,任意正数,128],然后输入的时候shape可以为[任意正数,任意正数,128]。维度只是个占位,运行网络的时候的实际维度是从输入数据推导出来的。两个"任意整数" 在输入和配置的时候可以不相等。配置网络的时候第一维度必须为-1。
## Q:请说明一下如下两个接口的适用场景,现在保存模型都不知用哪个:`save_inference_model`、`save_params`? ### Q:请说明一下如下两个接口的适用场景,现在保存模型都不知用哪个:`save_inference_model`、`save_params`?
+ 问题解答 + 问题解答
`save_inference_model`主要是用于预测的,该API除了会保存预测时所需的模型参数,还会保存预测使用的模型结构。而`save_params`会保存一个program中的所有参数,但是不保存该program对应的模型结构。参考[模型保存与加载](http://paddlepaddle.org/documentation/docs/zh/1.4/api_guides/low_level/model_save_reader.html) `save_inference_model`主要是用于预测的,该API除了会保存预测时所需的模型参数,还会保存预测使用的模型结构。而`save_params`会保存一个program中的所有参数,但是不保存该program对应的模型结构。参考[模型保存与加载](http://paddlepaddle.org/documentation/docs/zh/1.4/api_guides/low_level/model_save_reader.html)
## Q:PaddlePaddle的proto信息相关的解释文档? ### Q:PaddlePaddle的proto信息相关的解释文档?
+ 问题解答 + 问题解答
proto信息可以打印出来,然后参考Github [framework.prot](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/framework.proto)文件进行解释。 proto信息可以打印出来,然后参考Github [framework.prot](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/framework.proto)文件进行解释。
## Q:C++ 如何把std::vector转换成 lodtensor的方法? ### Q:C++ 如何把std::vector转换成 lodtensor的方法?
+ 问题解答 + 问题解答
如下示例 如下示例
```cpp ```cpp
...@@ -103,43 +105,43 @@ memcpy(pdata, ids.data(), n); ...@@ -103,43 +105,43 @@ memcpy(pdata, ids.data(), n);
``` ```
## Q:PaddlePaddle可以像tf一样根据输出,只执行模型的一部分么? ### Q:PaddlePaddle可以像tf一样根据输出,只执行模型的一部分么?
+ 问题解答 + 问题解答
目前的executor会执行整个program。建议做法是,在定义program的时候提前clone出一个子program,如当前`inference_program = fluid.default_main_program().clone(for_test=True)`的做法。 目前的executor会执行整个program。建议做法是,在定义program的时候提前clone出一个子program,如当前`inference_program = fluid.default_main_program().clone(for_test=True)`的做法。
## Q:PaddlePaddle的全连接层,可不可以手动输入参数比如weights和bias并禁止优化器比如optimizer.SGD在模型训练的时候改变它? ### Q:PaddlePaddle的全连接层,可不可以手动输入参数比如weights和bias并禁止优化器比如optimizer.SGD在模型训练的时候改变它?
+ 问题解答 + 问题解答
可以通过ParamAttr设置参数的属性,`fluid.ParamAttr( initializer=fluid.initializer.Normal(0.0, 0.02), learning_rate=2.0)`,其中learning_rate设置为0,就不会修改。手动输入参数也可以实现,但是会比较麻烦。 可以通过ParamAttr设置参数的属性,`fluid.ParamAttr( initializer=fluid.initializer.Normal(0.0, 0.02), learning_rate=2.0)`,其中learning_rate设置为0,就不会修改。手动输入参数也可以实现,但是会比较麻烦。
## Q:PaddlePaddle中训练好的fc层参数,有没有直接用numpy 读取出fc层的W矩阵的示例代码呢? ### Q:PaddlePaddle中训练好的fc层参数,有没有直接用numpy 读取出fc层的W矩阵的示例代码呢?
+ 问题解答 + 问题解答
weight名字在构建网络的时候可以通过param_attr指定,然后用`fluid.global_scope().find_var("weight_name").get_tensor()` weight名字在构建网络的时候可以通过param_attr指定,然后用`fluid.global_scope().find_var("weight_name").get_tensor()`
## Q:请问fluid 里面如果某一层使用`stop_gradient=True`,那么是不是这一层之前的层都会自动 `stop_gradient=True`? ### Q:请问fluid 里面如果某一层使用`stop_gradient=True`,那么是不是这一层之前的层都会自动 `stop_gradient=True`?
+ 问题解答 + 问题解答
是的,梯度不回传了。 是的,梯度不回传了。
## Q:如何不训练某层的权重? ### Q:如何不训练某层的权重?
+ 问题解答 + 问题解答
ParamAttr里配置`learning_rate=0` ParamAttr里配置`learning_rate=0`
## Q:PaddlePaddle有拓展tensor维度的op吗? ### Q:PaddlePaddle有拓展tensor维度的op吗?
+ 问题解答 + 问题解答
请参[unsqueeze op](http://paddlepaddle.org/documentation/docs/zh/1.3/api/layers.html#unsqueeze),例如[1,2]拓展为[1,2,1] 请参[unsqueeze op](http://paddlepaddle.org/documentation/docs/zh/1.3/api/layers.html#unsqueeze),例如[1,2]拓展为[1,2,1]
## Q:sigmoid二分类,`sigmoid_cross_entropy_with_logits`,其中num_classes的意义? ### Q:sigmoid二分类,`sigmoid_cross_entropy_with_logits`,其中num_classes的意义?
+ 问题解答 + 问题解答
`sigmoid_cross_entropy_with_logits`里面的num_classes是指有多个分类标签,而且这些标签之间相互独立,这样对每个分类都会有一个预测概率。举个例子,假如我们要做一个视频动作分类,有如下几个标签(吃饭,聊天,走路,打球),那么num_classes = 4。一个视频可以同时有多个ground truth标签是1,比如这里可能是(1, 1, 0, 0),也就是一边吃饭一边聊天的场景。而一个可能的预测概率是(0.8, 0.9, 0.1, 0.3),那么计算损失函数的时候,要对每个分类标签分别计算`sigmoid cross entropy` `sigmoid_cross_entropy_with_logits`里面的num_classes是指有多个分类标签,而且这些标签之间相互独立,这样对每个分类都会有一个预测概率。举个例子,假如我们要做一个视频动作分类,有如下几个标签(吃饭,聊天,走路,打球),那么num_classes = 4。一个视频可以同时有多个ground truth标签是1,比如这里可能是(1, 1, 0, 0),也就是一边吃饭一边聊天的场景。而一个可能的预测概率是(0.8, 0.9, 0.1, 0.3),那么计算损失函数的时候,要对每个分类标签分别计算`sigmoid cross entropy`
## Q:对于图片小但数量很大的数据集有什么好的处理方法? ### Q:对于图片小但数量很大的数据集有什么好的处理方法?
+ 问题解答 + 问题解答
`multiprocess_reader`可以解决该问题。参考[Github示例](https://github.com/PaddlePaddle/Paddle/issues/16592) `multiprocess_reader`可以解决该问题。参考[Github示例](https://github.com/PaddlePaddle/Paddle/issues/16592)
## Q:fluid1.3, cpu训练如何使用多线程? ### Q:fluid1.3, cpu训练如何使用多线程?
+ 问题解答 + 问题解答
使用`ParallelExecutor`的话默认是多线程所有核数的,设置CPU_NUM可以指定线程数,另外可以试下在创建`ParallelExecutor`时传入设置了num_threads 的exec_strategy。 使用`ParallelExecutor`的话默认是多线程所有核数的,设置CPU_NUM可以指定线程数,另外可以试下在创建`ParallelExecutor`时传入设置了num_threads 的exec_strategy。
## Q:Libnccl.so报错如何解决? ### Q:Libnccl.so报错如何解决?
+ 报错信息 + 报错信息
``` ```
Failed to find dynamic library: libnccl.so ( libnccl.so: cannot open shared object file: No such file or directory ) Failed to find dynamic library: libnccl.so ( libnccl.so: cannot open shared object file: No such file or directory )
......
...@@ -17,3 +17,4 @@ ...@@ -17,3 +17,4 @@
api_cn/index_cn.rst api_cn/index_cn.rst
faq/index_cn.rst faq/index_cn.rst
release_note_cn.rst release_note_cn.rst
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册