提交 25fd8731 编写于 作者: Y Yu Yang 提交者: GitHub

Merge branch 'master' into fix_calc_batch_size_deadlock

...@@ -20,9 +20,8 @@ from optparse import OptionParser ...@@ -20,9 +20,8 @@ from optparse import OptionParser
import paddle.utils.image_util as image_util import paddle.utils.image_util as image_util
from py_paddle import swig_paddle, util from py_paddle import swig_paddle, DataProviderConverter
from py_paddle import DataProviderWrapperConverter from paddle.trainer.PyDataProvider2 import dense_vector
from paddle.trainer.PyDataProviderWrapper import DenseSlot
from paddle.trainer.config_parser import parse_config from paddle.trainer.config_parser import parse_config
logging.basicConfig(format='[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s') logging.basicConfig(format='[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s')
...@@ -75,8 +74,8 @@ class ImageClassifier(): ...@@ -75,8 +74,8 @@ class ImageClassifier():
self.network.loadParameters(self.model_dir) self.network.loadParameters(self.model_dir)
data_size = 3 * self.crop_dims[0] * self.crop_dims[1] data_size = 3 * self.crop_dims[0] * self.crop_dims[1]
slots = [DenseSlot(data_size)] slots = [dense_vector(data_size)]
self.converter = util.DataProviderWrapperConverter(False, slots) self.converter = DataProviderConverter(slots)
def get_data(self, img_path): def get_data(self, img_path):
""" """
......
...@@ -22,9 +22,8 @@ from optparse import OptionParser ...@@ -22,9 +22,8 @@ from optparse import OptionParser
import paddle.utils.image_util as image_util import paddle.utils.image_util as image_util
from py_paddle import swig_paddle, util from py_paddle import swig_paddle, DataProviderConverter
from py_paddle import DataProviderWrapperConverter from paddle.trainer.PyDataProvider2 import dense_vector
from paddle.trainer.PyDataProviderWrapper import DenseSlot
from paddle.trainer.config_parser import parse_config from paddle.trainer.config_parser import parse_config
logging.basicConfig(format='[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s') logging.basicConfig(format='[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s')
...@@ -85,9 +84,8 @@ class ImageClassifier(): ...@@ -85,9 +84,8 @@ class ImageClassifier():
self.network.loadParameters(self.model_dir) self.network.loadParameters(self.model_dir)
data_size = 3 * self.crop_dims[0] * self.crop_dims[1] data_size = 3 * self.crop_dims[0] * self.crop_dims[1]
slots = [DenseSlot(data_size)] slots = [dense_vector(data_size)]
is_sequence = False self.converter = DataProviderConverter(slots)
self.converter = util.DataProviderWrapperConverter(is_sequence, slots)
def get_data(self, img_path): def get_data(self, img_path):
""" """
......
...@@ -15,12 +15,12 @@ ...@@ -15,12 +15,12 @@
import os import os
import numpy as np import numpy as np
from optparse import OptionParser from optparse import OptionParser
from py_paddle import swig_paddle, util, DataProviderWrapperConverter from py_paddle import swig_paddle, DataProviderConverter
from paddle.trainer.PyDataProviderWrapper import IndexSlot from paddle.trainer.PyDataProvider2 import integer_value_sequence
from paddle.trainer.config_parser import parse_config from paddle.trainer.config_parser import parse_config
""" """
Usage: run following command to show help message. Usage: run following command to show help message.
python predict.py -h python predict.py -h
""" """
UNK_IDX = 0 UNK_IDX = 0
...@@ -43,16 +43,22 @@ class Prediction(): ...@@ -43,16 +43,22 @@ class Prediction():
conf = parse_config( conf = parse_config(
train_conf, train_conf,
'dict_len=' + str(len_dict) + 'dict_len=' + str(len_dict) +
',label_len=' + str(len_label) + ',label_len=' + str(len_label) +
',is_predict=True') ',is_predict=True')
self.network = swig_paddle.GradientMachine.createFromConfigProto( self.network = swig_paddle.GradientMachine.createFromConfigProto(
conf.model_config) conf.model_config)
self.network.loadParameters(model_dir) self.network.loadParameters(model_dir)
slots = [IndexSlot(len_dict), IndexSlot(len_dict), IndexSlot(len_dict), slots = [
IndexSlot(len_dict), IndexSlot(len_dict), IndexSlot(2)] integer_value_sequence(len_dict),
self.converter = util.DataProviderWrapperConverter(True, slots) integer_value_sequence(len_dict),
integer_value_sequence(len_dict),
integer_value_sequence(len_dict),
integer_value_sequence(len_dict),
integer_value_sequence(2)
]
self.converter = DataProviderConverter(slots)
def load_dict_label(self, dict_file, label_file): def load_dict_label(self, dict_file, label_file):
""" """
...@@ -109,7 +115,7 @@ class Prediction(): ...@@ -109,7 +115,7 @@ class Prediction():
def option_parser(): def option_parser():
usage = ("python predict.py -c config -w model_dir " usage = ("python predict.py -c config -w model_dir "
"-d word dictionary -l label_file -i input_file") "-d word dictionary -l label_file -i input_file")
parser = OptionParser(usage="usage: %s [options]" % usage) parser = OptionParser(usage="usage: %s [options]" % usage)
parser.add_option( parser.add_option(
......
...@@ -15,13 +15,13 @@ ...@@ -15,13 +15,13 @@
import os import os
import numpy as np import numpy as np
from optparse import OptionParser from optparse import OptionParser
from py_paddle import swig_paddle, util, DataProviderWrapperConverter from py_paddle import swig_paddle, DataProviderConverter
from paddle.trainer.PyDataProviderWrapper import IndexSlot from paddle.trainer.PyDataProvider2 import integer_value_sequence
from paddle.trainer.config_parser import parse_config from paddle.trainer.config_parser import parse_config
""" """
Usage: run following command to show help message. Usage: run following command to show help message.
python predict.py -h python predict.py -h
""" """
class SentimentPrediction(): class SentimentPrediction():
...@@ -46,8 +46,8 @@ class SentimentPrediction(): ...@@ -46,8 +46,8 @@ class SentimentPrediction():
conf = parse_config(train_conf, "is_predict=1") conf = parse_config(train_conf, "is_predict=1")
self.network = swig_paddle.GradientMachine.createFromConfigProto(conf.model_config) self.network = swig_paddle.GradientMachine.createFromConfigProto(conf.model_config)
self.network.loadParameters(self.model_dir) self.network.loadParameters(self.model_dir)
slots = [IndexSlot(self.dict_dim)] slots = [integer_value_sequence(self.dict_dim)]
self.converter = util.DataProviderWrapperConverter(True, slots) self.converter = DataProviderConverter(slots)
def load_dict(self): def load_dict(self):
""" """
......
RNN 配置
========
.. toctree::
:maxdepth: 3
* `RNN配置 <../../../doc/algorithm/rnn/rnn.html>`_
集群训练
========
参见 `集群训练 <../../doc/cluster/index.html>`_
新写Layer
=========
* `新写Layer <../../../doc/dev/new_layer/index.html>`_
PaddlePaddle文档
================
使用指南
--------
* [快速入门](demo/quick_start/index.md)
* [编译与安装](build_and_install/index.rst)
* [用户接口](ui/index.rst)
* [使用示例](demo/index.rst)
* [模型配置](ui/model.rst)
* [集群训练](cluster/index.rst)
开发指南
--------
* [新写Layer](dev/new_layer/index.rst)
算法教程
--------
* [RNN配置](algorithm/rnn/rnn.rst)
PaddlePaddle文档
================
使用指南
--------
* `快速入门 <demo/quick_start/index.html>`_
* `编译与安装 <build_and_install/index.html>`_
* `用户接口 <ui/index.html>`_
* `使用示例 <demo/index.html>`_
* `模型配置 <../doc/ui/api/trainer_config_helpers/index.html>`_
* `集群训练 <../doc/cluster/index.html>`_
开发指南
--------
* `新写Layer <../doc/dev/new_layer/index.html>`_
算法教程
--------
* `RNN配置 <../doc/algorithm/rnn/rnn.html>`_
模型配置
========
* `Model Config Interface <../../doc/ui/api/trainer_config_helpers/index.html>`_
...@@ -9,22 +9,30 @@ PaddlePaddle目前使用Swig对其常用的预测接口进行了封装,使在P ...@@ -9,22 +9,30 @@ PaddlePaddle目前使用Swig对其常用的预测接口进行了封装,使在P
* 准备数据 * 准备数据
* 预测 * 预测
典型的预测代码如下,使用mnist手写识别作为样例。 典型的预测代码如下,使用mnist手写识别作为样例, 完整代码见
:code:`src_root/doc/ui/predict/predict_sample.py` 。
.. literalinclude:: ../../../doc/ui/predict/predict_sample.py .. literalinclude:: ../../../doc/ui/predict/predict_sample.py
:language: python :language: python
:linenos: :lines: 15-18,90-100,101-104
主要的软件包为py_paddle.swig_paddle,这个软件包文档相对完善。可以使用python的 :code:`help()` 函数查询文档。主要步骤为: 主要的软件包为py_paddle.swig_paddle,这个软件包文档相对完善。可以使用python的
:code:`help()` 函数查询文档。主要步骤为:
* 在程序开始阶段,使用命令行参数初始化PaddlePaddle
* 在98行载入PaddlePaddle的训练文件。读取config * 在程序开始阶段,使用 :code:`swig_paddle.initPaddle()` 传入命令行参数初始化
* 在100行创建神经网络,并在83行载入参数。 PaddlePaddle。详细的命令行参数请参考
* 103行创建一个从工具类,用来转换数据。 `命令行参数 <../cmd_argument/detail_introduction.html>`_ 。
* 接下来使用 :code:`parse_config()` 解析训练时的配置文件。这里要注意预测数据通常
不包含label, 而且预测网络通常直接输出最后一层的结果而不是像训练时一样以cost
layer作为输出,所以用于预测的配置文件要做相应的修改。
* 使用 :code:`swig_paddle.GradientMachine.createFromConfigproto()` 根据上一步解
析好的配置创建神经网络。
* 创建一个 :code:`DataProviderConverter` 对象converter。
- swig_paddle接受的原始数据是C++的Matrix,也就是直接写内存的float数组。 - swig_paddle接受的原始数据是C++的Matrix,也就是直接写内存的float数组。
- 这个接口并不用户友好。所以,我们提供了一个工具类DataProviderWrapperConverter. 这个接口并不用户友好。所以,我们提供了一个工具类DataProviderConverter。
- 这个工具类接收和PyDataProviderWrapper一样的输入数据,请参考PyDataProviderWrapper的文档。 这个工具类接收和PyDataProvider2一样的输入数据,详情请参考
* 在第105行执行预测。forwardTest是一个工具类,直接提取出神经网络Output层的输出结果。典型的输出结果为\: `PyDataProvider2文档 <../../../doc/ui/data_provider/pydataprovider2.html>`_ 。
* 最后使用 :code:`forwardTest()` 直接提取出神经网络Output层的输出结果。典型的输出结果为\:
.. code-block:: text .. code-block:: text
...@@ -37,4 +45,4 @@ PaddlePaddle目前使用Swig对其常用的预测接口进行了封装,使在P ...@@ -37,4 +45,4 @@ PaddlePaddle目前使用Swig对其常用的预测接口进行了封装,使在P
2.70634608e-08, 3.48565123e-08, 5.25639710e-09, 2.70634608e-08, 3.48565123e-08, 5.25639710e-09,
4.48684503e-08]], dtype=float32)}] 4.48684503e-08]], dtype=float32)}]
其中,value即为softmax层的输出。由于数据是两个,所以输出的value 其中,value即为softmax层的输出。由于数据是两条,所以输出的value包含两个向量 
...@@ -40,3 +40,4 @@ HPPL_ERROR_LOG ...@@ -40,3 +40,4 @@ HPPL_ERROR_LOG
unittest.list unittest.list
proto proto
dist dist
setup.py
set(AVX_SOURCES
src/hl_math.cc
src/hl_avx_functions.cc
)
set(CUDA_SOURCES set(CUDA_SOURCES
src/hl_time.cc src/hl_time.cc
src/hl_math.cc
src/hl_cpu_functions.cc src/hl_cpu_functions.cc
src/hl_avx_functions.cc) ${AVX_SOURCES})
set(CUDA_CXX_WITH_GPU_SOURCES set(CUDA_CXX_WITH_GPU_SOURCES
src/hl_cuda_cublas.cc src/hl_cuda_cublas.cc
...@@ -12,7 +15,7 @@ set(CUDA_CXX_WITH_GPU_SOURCES ...@@ -12,7 +15,7 @@ set(CUDA_CXX_WITH_GPU_SOURCES
set_source_files_properties(${CUDA_CXX_WITH_GPU_SOURCES} set_source_files_properties(${CUDA_CXX_WITH_GPU_SOURCES}
PROPERTIES COMPILE_FLAGS "-D__NVCC__") PROPERTIES COMPILE_FLAGS "-D__NVCC__")
set_source_files_properties(${CUDA_SOURCES} set_source_files_properties(${AVX_SOURCES}
PROPERTIES COMPILE_FLAGS "-mavx") PROPERTIES COMPILE_FLAGS "-mavx")
set(CUDA_DSO_SOURCES set(CUDA_DSO_SOURCES
...@@ -73,4 +76,3 @@ endif() ...@@ -73,4 +76,3 @@ endif()
add_style_check_target(paddle_cuda ${CUDA_SOURCES}) add_style_check_target(paddle_cuda ${CUDA_SOURCES})
add_style_check_target(paddle_cuda ${CUDA_HEADERS}) add_style_check_target(paddle_cuda ${CUDA_HEADERS})
# add_style_check_target(hppl ${HPPL_CU_SOURCES}) # TODO(yuyang18): Format hppl style
...@@ -16,8 +16,6 @@ limitations under the License. */ ...@@ -16,8 +16,6 @@ limitations under the License. */
#ifndef HL_DEVICE_FUNCTIONS_CUH_ #ifndef HL_DEVICE_FUNCTIONS_CUH_
#define HL_DEVICE_FUNCTIONS_CUH_ #define HL_DEVICE_FUNCTIONS_CUH_
#if defined(__CUDA_ARCH__) && __CUDA_ARCH__ < 600
namespace hppl { namespace hppl {
static __inline__ __device__ double atomicAdd(double* address, double val) { static __inline__ __device__ double atomicAdd(double* address, double val) {
...@@ -42,6 +40,4 @@ static __inline__ __device__ double atomicAdd(double* address, double val) { ...@@ -42,6 +40,4 @@ static __inline__ __device__ double atomicAdd(double* address, double val) {
using hppl::atomicAdd; using hppl::atomicAdd;
#endif #endif
#endif
#endif /* HL_DEVICE_FUNCTIONS_CUH_ */ #endif /* HL_DEVICE_FUNCTIONS_CUH_ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册