Skip to content

Commit 2dc23ff

Browse files
committed
Merge branch 'develop' into multi-thread2
2 parents 39ed148 + 04272c0 commit 2dc23ff

File tree

11 files changed

+293
-108
lines changed

11 files changed

+293
-108
lines changed

doc/fluid/new_docs/beginners_guide/basics/machine_translation/README.cn.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
图3. 编码器-解码器框架
6161
</div>
6262

63+
<a name="编码器"></a>
6364
#### 编码器
6465

6566
编码阶段分为三步:
@@ -81,7 +82,7 @@
8182
机器翻译任务的训练过程中,解码阶段的目标是最大化下一个正确的目标语言词的概率。思路是:
8283
1. 每一个时刻,根据源语言句子的编码信息(又叫上下文向量,context vector)`$c$`、真实目标语言序列的第`$i$`个词`$u_i$``$i$`时刻RNN的隐层状态`$z_i$`,计算出下一个隐层状态`$z_{i+1}$`。计算公式如下:
8384
$$z_{i+1}=\phi_{\theta '} \left ( c,u_i,z_i \right )$$
84-
其中`$\phi _{\theta '}$`是一个非线性激活函数;`$c=q\mathbf{h}$`是源语言句子的上下文向量,在不使用[注意力机制](#注意力机制),如果[编码器](#编码器)的输出是源语言句子编码后的最后一个元素,则可以定义`$c=h_T$``$u_i$`是目标语言序列的第`$i$`个单词,`$u_0$`是目标语言序列的开始标记`<s>`,表示解码开始;`$z_i$``$i$`时刻解码RNN的隐层状态,`$z_0$`是一个全零的向量。
85+
其中`$\phi _{\theta '}$`是一个非线性激活函数;`$c=q\mathbf{h}$`是源语言句子的上下文向量,在不使用注意力机制时,如果[编码器](#编码器)的输出是源语言句子编码后的最后一个元素,则可以定义`$c=h_T$``$u_i$`是目标语言序列的第`$i$`个单词,`$u_0$`是目标语言序列的开始标记`<s>`,表示解码开始;`$z_i$``$i$`时刻解码RNN的隐层状态,`$z_0$`是一个全零的向量。
8586

8687
2.`$z_{i+1}$`通过`softmax`归一化,得到目标语言序列的第`$i+1$`个单词的概率分布`$p_{i+1}$`。概率分布公式如下:
8788
$$p\left ( u_{i+1}|u_{&lt;i+1},\mathbf{x} \right )=softmax(W_sz_{i+1}+b_z)$$
@@ -93,6 +94,7 @@ $$p\left ( u_{i+1}|u_{&lt;i+1},\mathbf{x} \right )=softmax(W_sz_{i+1}+b_z)$$
9394

9495
机器翻译任务的生成过程,通俗来讲就是根据预先训练的模型来翻译源语言句子。生成过程中的解码阶段和上述训练过程的有所差异,具体介绍请见[柱搜索算法](#柱搜索算法)
9596

97+
<a name="柱搜索算法"></a>
9698
### 柱搜索算法
9799

98100
柱搜索([beam search](http://en.wikipedia.org/wiki/Beam_search))是一种启发式图搜索算法,用于在图或树中搜索有限集合中的最优扩展节点,通常用在解空间非常大的系统(如机器翻译、语音识别)中,原因是内存无法装下图或树中所有展开的解。如在机器翻译任务中希望翻译“`<s>你好<e>`”,就算目标语言字典中只有3个词(`<s>`, `<e>`, `hello`),也可能生成无限句话(`hello`循环出现的次数不定),为了找到其中较好的翻译结果,我们可采用柱搜索算法。

doc/fluid/new_docs/beginners_guide/basics/understand_sentiment/README.cn.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ def convolution_net(data, input_dim, class_dim, emb_dim, hid_dim):
149149

150150
网络的输入`input_dim`表示的是词典的大小,`class_dim`表示类别数。这里,我们使用[`sequence_conv_pool`](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/trainer_config_helpers/networks.py) API实现了卷积和池化操作。
151151

152+
<a name="栈值双向LSTM"></a>
153+
152154
### 栈式双向LSTM
153155

154156
栈式双向神经网络`stacked_lstm_net`的代码片段如下:

doc/fluid/new_docs/beginners_guide/basics/word2vec/README.cn.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ similarity: -0.0997506977351
5050
5151
```
5252

53-
以上结果可以通过运行`calculate_dis.py`, 加载字典里的单词和对应训练特征结果得到,我们将在[应用模型](#应用模型)中详细描述用法。
53+
以上结果可以通过运行`calculate_dis.py`, 加载字典里的单词和对应训练特征结果得到,我们将在[模型应用](#模型应用)中详细描述用法。
5454

5555

5656
## 模型概览
@@ -189,6 +189,7 @@ dream that one day <e>
189189

190190
最后,每个输入会按其单词次在字典里的位置,转化成整数的索引序列,作为PaddlePaddle的输入。
191191

192+
<a name="训练模型"></a>
192193
## 编程实现
193194

194195
本配置的模型结构如下图所示:
@@ -349,6 +350,7 @@ Step 20: Average Cost 5.766995
349350
...
350351
```
351352

353+
<a name="模型应用"></a>
352354
## 模型应用
353355
在模型训练后,我们可以用它做一些预测。
354356

doc/fluid/new_docs/beginners_guide/quick_start/recognize_digits/README.cn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ Softmax回归模型采用了最简单的两层神经网络,即只有输入层
102102

103103
池化是非线性下采样的一种形式,主要作用是通过减少网络的参数来减小计算量,并且能够在一定程度上控制过拟合。通常在卷积层的后面会加上一个池化层。池化包括最大池化、平均池化等。其中最大池化是用不重叠的矩形框将输入层分成不同的区域,对于每个矩形框的数取最大值作为输出层,如图6所示。
104104

105-
更详细的关于卷积神经网络的具体知识可以参考[斯坦福大学公开课]( http://cs231n.github.io/convolutional-networks/ )[图像分类](https://github.com/PaddlePaddle/book/blob/develop/image_classification/README.md)教程。
105+
更详细的关于卷积神经网络的具体知识可以参考[斯坦福大学公开课]( http://cs231n.github.io/convolutional-networks/ )[图像分类]( https://github.com/PaddlePaddle/book/tree/develop/03.image_classification )教程。
106106

107107
### 常见激活函数介绍
108108
- sigmoid激活函数: $ f(x) = sigmoid(x) = \frac{1}{1+e^{-x}} $

doc/fluid/new_docs/user_guides/howto/debug/visualdl.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ python setup.py bdist_wheel
149149
pip install --upgrade dist/visualdl-*.whl
150150
```
151151

152-
如果打包和安装遇到其他问题,不安装只想运行Visual DL可以看[这里](https://github.com/PaddlePaddle/VisualDL/blob/develop/docs/how_to_dev_frontend_en.md)
152+
如果打包和安装遇到其他问题,不安装只想运行Visual DL可以看[这里](https://github.com/PaddlePaddle/VisualDL/blob/develop/docs/develop/how_to_dev_frontend_cn.md)
153153

154154

155155
## SDK

paddle/fluid/framework/ir/fc_lstm_fuse_pass.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
14-
1514
#include "paddle/fluid/framework/ir/fc_lstm_fuse_pass.h"
1615
#include <string>
1716
#include "paddle/fluid/framework/lod_tensor.h"

paddle/fluid/inference/api/demo_ci/run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ else
1414
fi
1515

1616
PREFIX=inference-vis-demos%2F
17-
URL_ROOT=http://paddlemodels.bj.bcebos.com/${PREFIX}
17+
URL_ROOT=http://paddlemodels.cdn.bcebos.com/${PREFIX}
1818

1919
# download vis_demo data
2020
function download() {

paddle/fluid/operators/distributed/request_handler_impl.cc

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,6 @@ bool RequestSendHandler::Handle(const std::string& varname,
3939
const std::string& out_var_name) {
4040
VLOG(4) << "RequestSendHandler:" << varname;
4141

42-
// Async
43-
if (!sync_mode_) {
44-
rpc_server_->Profiler().OneStep();
45-
try {
46-
executor_->RunPreparedContext((*grad_to_prepared_ctx_)[varname].get(),
47-
scope);
48-
} catch (std::exception& e) {
49-
LOG(ERROR) << "async: run sub program error " << e.what();
50-
return false;
51-
}
52-
return true;
53-
}
54-
5542
// Sync
5643
if (varname == BATCH_BARRIER_MESSAGE) {
5744
VLOG(3) << "sync: recv BATCH_BARRIER_MESSAGE";
@@ -60,17 +47,31 @@ bool RequestSendHandler::Handle(const std::string& varname,
6047
VLOG(3) << "sync: recv complete message";
6148
rpc_server_->Complete();
6249
} else {
63-
VLOG(3) << "sync: received var_name: " << varname;
64-
rpc_server_->WaitCond(kRequestSend);
65-
VLOG(3) << "sync: processing received var: " << varname;
66-
67-
if (invar == nullptr) {
68-
LOG(FATAL) << "sync: Can not find server side var: " << varname;
69-
return false;
70-
}
71-
if (invar->IsType<framework::SelectedRows>()) {
72-
std::unique_lock<std::mutex> lock(mutex_sparse_vars_);
73-
sparse_vars_.push_back(invar);
50+
// Async
51+
if (!sync_mode_) {
52+
VLOG(3) << "async process var: " << varname;
53+
rpc_server_->Profiler().OneStep();
54+
try {
55+
executor_->RunPreparedContext((*grad_to_prepared_ctx_)[varname].get(),
56+
scope);
57+
} catch (std::exception& e) {
58+
LOG(ERROR) << "async: run sub program error " << e.what();
59+
return false;
60+
}
61+
return true;
62+
} else { // sync
63+
rpc_server_->WaitCond(kRequestSend);
64+
VLOG(3) << "sync: processing received var: " << varname;
65+
66+
if (invar == nullptr) {
67+
LOG(FATAL) << "sync: Can not find server side var: " << varname;
68+
return false;
69+
}
70+
71+
if (invar->IsType<framework::SelectedRows>()) {
72+
std::unique_lock<std::mutex> lock(mutex_sparse_vars_);
73+
sparse_vars_.push_back(invar);
74+
}
7475
}
7576
}
7677
return true;

0 commit comments

Comments
 (0)