{"action":"created","comment":{"url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/comments/92804223","pull_request_review_id":13325551,"id":92804223,"diff_hunk":"@@ -0,0 +1,226 @@\n+RNN 配置\n+=================\n+\n+本教程将指导你如何在 PaddlePaddle 中配置循环神经网络（RNN）。PaddlePaddle 高度支持灵活和高效的循环神经网络配置。 在本教程中，您将了解如何：\n+\n+-   准备用来学习循环神经网络的序列数据。\n+-   配置循环神经网络架构。\n+-   使用学习完成的循环神经网络模型生成序列。\n+\n+我们将使用 vanilla 循环神经网络和 sequence to sequence 模型来指导你完成这些步骤。sequence to sequence 模型的代码可以在`demo / seqToseq`找到。\n+\n+准备序列数据\n+---------------------\n+\n+PaddlePaddle 不需要对序列数据进行任何预处理，例如填充。唯一需要做的是将相应类型设置为输入。例如，以下代码段定义了三个输入。 它们都是序列，它们的大小是`src_dict`，`trg_dict`和`trg_dict`：\n+\n+``` sourceCode\n+settings.input_types = [\n+  integer_value_sequence(len(settings.src_dict)),\n+  integer_value_sequence(len(settings.trg_dict)),\n+  integer_value_sequence(len(settings.trg_dict))]\n+```\n+\n+在`process`函数中，每个`yield`函数将返回三个整数列表。每个整数列表被视为一个整数序列：\n+\n+``` sourceCode\n+yield src_ids, trg_ids, trg_ids_next\n+```\n+\n+有关如何编写数据提供程序的更多细节描述，请参考 [PyDataProvider2](../../ui/data_provider/index.html)。完整的数据提供文件在 `demo/seqToseq/dataprovider.py`。\n+\n+配置循环神经网络架构\n+-----------------------------------------------\n+\n+### 简单门控(Simple Gated)循环神经网络\n+\n+循环神经网络在每个时间步骤顺序地处理序列。下面列出了 LSTM 的架构的示例。\n+\n+![image](../../../tutorials/sentiment_analysis/bi_lstm.jpg)\n+\n+一般来说，循环网络从 *t* = 1 到 *t* = *T* 或者相反从 *t* = *T* 到 *t* = 1 执行以下操作。\n+\n+*x*<sub>*t* + 1</sub> = *f*<sub>*x*</sub>(*x*<sub>*t*</sub>),*y*<sub>*t*</sub> = *f*<sub>*y*</sub>(*x*<sub>*t*</sub>)\n+\n+其中 *f*<sub>*x*</sub>(.) 称为**阶跃函数**，而 *f*<sub>*y*</sub>(.) 称为**输出函数**。在 vanilla 循环神经网络中，阶跃函数和输出函数都非常简单。然而，PaddlePaddle 支持通过修改这两个函数来配置非常复杂的架构。 我们将使用 sequence to sequence 模型演示如何配置复杂的循环神经网络模型。在本节中，我们将使用简单的 vanilla 循环神经网络作为使用`recurrent_group`配置简单循环神经网络的例子。 注意，如果你只需要使用简单的RNN，GRU或LSTM，那么推荐使用`grumemory`和`lstmemory`，因为它们的计算效率比`recurrent_group`更高。\n+\n+对于 vanilla RNN，在每个时间步长，**阶跃函数**为：\n+\n+*x*<sub>*t* + 1</sub> = *W*<sub>*x*</sub>*x*<sub>*t*</sub> + *W*<sub>*i*</sub>*I*<sub>*t*</sub> + *b*\n+\n+其中 *x*<sub>*t*</sub> 是RNN状态，并且 *I*<sub>*t*</sub> 是输入，*W*<sub>*x*</sub> 和 *W*<sub>*i*</sub> 分别是RNN状态和输入的变换矩阵。*b* 是偏差。它的**输出函数**只需要*x*<sub>*t*</sub>作为输出。\n+\n+`recurrent_group`是构建循环神经网络的最重要的工具。 它定义了**阶跃函数**，**输出函数**和循环神经网络的输入。注意，这个函数的`step`参数执行了`step function`（阶跃函数）和`output function`（输出函数）：\n+\n+\n+``` sourceCode\n+def simple_rnn(input,\n+               size=None,\n+               name=None,\n+               reverse=False,\n+               rnn_bias_attr=None,\n+               act=None,\n+               rnn_layer_attr=None):\n+    def __rnn_step__(ipt):\n+       out_mem = memory(name=name, size=size)\n+       rnn_out = mixed_layer(input = [full_matrix_projection(ipt),\n+                                      full_matrix_projection(out_mem)],\n+                             name = name,\n+                             bias_attr = rnn_bias_attr,\n+                             act = act,\n+                             layer_attr = rnn_layer_attr,\n+                             size = size)\n+       return rnn_out\n+    return recurrent_group(name='%s_recurrent_group' % name,\n+                           step=__rnn_step__,\n+                           reverse=reverse,\n+                           input=input)\n+```\n+\n+PaddlePaddle 使用“记忆”构造阶跃函数。**记忆（Memory）**是在PaddlePaddle中构造循环神经网络时最重要的概念。 记忆是在阶跃函数中循环使用的状态，例如*x*<sub>*t* + 1</sub> = *f*<sub>*x*</sub>(*x*<sub>*t*</sub>)。 一个记忆包含**输出**和**输入**。当前时间步处的记忆的输出作为下一时间步记忆的输入。记忆也可以具有**引导层**，其输出被用作记忆的初始值。 在我们的例子中，门控循环单元的输出被用作输出记忆。请注意，`rnn_out`层的名称与`out_mem`的名称相同。这意味着`rnn_out` (*x*<sub>*t* + 1</sub>)的输出被用作`out_mem`记忆的**输出**。\n+\n+记忆也可以是序列。在这种情况下，在每个时间步中，我们有一个序列作为循环神经网络的状态。这在构造非常复杂的循环神经网络时是有用的。 其他高级功能包括定义多个记忆，以及使用子序列来定义分级循环神经网络架构。\n+\n+我们在函数的结尾返回`rnn_out`。 这意味着 `rnn_out` 层的输出被用作门控循环神经网络的**输出**函数。\n+\n+### Sequence to Sequence Model with Attention\n+\n+我们将使用 sequence to sequence model with attention 作为例子演示如何配置复杂的循环神经网络模型。该模型的说明如下图所示。\n+\n+![image](../../../tutorials/text_generation/encoder-decoder-attention-model.png)\n+\n+在这个模型中，源序列 *S* = {*s*<sub>1</sub>, …, *s*<sub>*T*</sub>} 用双向门控循环神经网络编码。双向门控循环神经网络的隐藏状态 *H*<sub>*S*</sub> = {*H*<sub>1</sub>, …, *H*<sub>*T*</sub>} 被称为 *编码向量*。解码器是门控循环神经网络。当解读每一个*y*<sub>*t*</sub>时, 这个门控循环神经网络生成一系列权重 *W*<sub>*S*</sub><sup>*t*</sup> = {*W*<sub>1</sub><sup>*t*</sup>, …, *W*<sub>*T*</sub><sup>*t*</sup>}, 用于计算编码向量的加权和。加权和用来鉴定符号 *y*<sub>*t*</sub> 的生成。\n+\n+模型的编码器部分如下所示。它叫做`grumemory`来表示门控循环神经网络。如果网络架构简单，那么推荐使用循环神经网络的方法，因为它比 `recurrent_group` 更快。我们已经实现了大多数常用的循环神经网络架构，可以参考 [Layers](../../ui/api/trainer_config_helpers/layers_index.html) 了解更多细节。\n+\n+我们还将编码向量投射到`decoder_size`维空间，获得反向循环网络的第一个实例，并将其投射到`decoder_size`维空间：\n+\n+``` sourceCode\n+# 定义源语句的数据层\n+src_word_id = data_layer(name='source_language_word', size=source_dict_dim)\n+# 计算每个词的词向量\n+src_embedding = embedding_layer(\n+    input=src_word_id,\n+    size=word_vector_dim,\n+    param_attr=ParamAttr(name='_source_language_embedding'))\n+# 应用前向循环神经网络\n+src_forward = grumemory(input=src_embedding, size=encoder_size)\n+# 应用反向递归神经网络（reverse=True表示反向循环神经网络）\n+src_backward = grumemory(input=src_embedding,\n+                          size=encoder_size,\n+                          reverse=True)\n+# 将循环神经网络的前向和反向部分混合在一起\n+encoded_vector = concat_layer(input=[src_forward, src_backward])\n+\n+# 投射编码向量到 decoder_size\n+encoder_proj = mixed_layer(input = [full_matrix_projection(encoded_vector)],\n+                           size = decoder_size)\n+\n+# 计算反向RNN的第一个实例\n+backward_first = first_seq(input=src_backward)\n+\n+# 投射反向RNN的第一个实例到 decoder size\n+decoder_boot = mixed_layer(input=[full_matrix_projection(backward_first)], size=decoder_size, act=TanhActivation())\n+```\n+\n+解码器使用 `recurrent_group` 来定义循环神经网络。阶跃函数和输出函数在 `gru_decoder_with_attention` 中定义：\n+\n+``` sourceCode\n+group_inputs=[StaticInput(input=encoded_vector,is_seq=True),\n+              StaticInput(input=encoded_proj,is_seq=True)]\n+trg_embedding = embedding_layer(\n+    input=data_layer(name='target_language_word',\n+                     size=target_dict_dim),\n+    size=word_vector_dim,\n+    param_attr=ParamAttr(name='_target_language_embedding'))\n+group_inputs.append(trg_embedding)\n+\n+# 对于配备有注意力机制的解码器，在训练中，\n+# 目标向量（groudtruth）是数据输入，\n+# 而编码源序列作为无界存储器被访问。\n+# StaticInput 意味着不同时间步的相同值，\n+# 否则它是一个序列的输入，不同时间步的输入是不同的。\n+# 所有输入序列应该有相同的长度。\n+decoder = recurrent_group(name=decoder_group_name,\n+                          step=gru_decoder_with_attention,\n+                          input=group_inputs)\n+```\n+\n+阶跃函数的实现如下所示。首先，它定义解码网络的**记忆**。然后定义 attention，门控循环单元阶跃函数和输出函数：\n+\n+``` sourceCode\n+def gru_decoder_with_attention(enc_vec, enc_proj, current_word):\n+    # 定义解码器的记忆\n+    # 记忆的输出定义在 gru_step 内\n+    # 注意 gru_step 应该与它的记忆名字相同\n+    decoder_mem = memory(name='gru_decoder',\n+                         size=decoder_size,\n+                         boot_layer=decoder_boot)\n+    # 计算 attention 加权编码向量\n+    context = simple_attention(encoded_sequence=enc_vec,\n+                               encoded_proj=enc_proj,\n+                               decoder_state=decoder_mem)\n+    # 混合当前词向量和attention加权编码向量\n+    decoder_inputs = mixed_layer(inputs = [full_matrix_projection(context),\n+                                           full_matrix_projection(current_word)],\n+                                 size = decoder_size * 3)\n+    # 定义门控循环单元循环神经网络阶跃函数\n+    gru_step = gru_step_layer(name='gru_decoder',\n+                              input=decoder_inputs,\n+                              output_mem=decoder_mem,\n+                              size=decoder_size)\n+    # 定义输出函数\n+    out = mixed_layer(input=[full_matrix_projection(input=gru_step)],\n+                      size=target_dict_dim,\n+                      bias_attr=True,\n+                      act=SoftmaxActivation())\n+    return out\n+```\n+\n+生成序列\n+-----------------\n+\n+训练模型后，我们可以使用它来生成序列。通常的做法是使用**柱搜索（beam search** 生成序列。以下代码片段定义柱搜索算法。注意，`beam_search`函数假设`step`的输出函数返回下一个标志的 softmax 归一化概率向量。我们对模型进行了以下更改。","path":"doc/howto/deep_model/rnn/rnn_cn.md","position":null,"original_position":183,"commit_id":"660b310f8f246af820c2dd440804501ec12ee955","original_commit_id":"438a70477fcae07a31a1c9a414190c9fb0a8acea","user":{"login":"livc","id":11692045,"avatar_url":"https://avatars.githubusercontent.com/u/11692045?v=3","gravatar_id":"","url":"https://api.github.com/users/livc","html_url":"https://github.com/livc","followers_url":"https://api.github.com/users/livc/followers","following_url":"https://api.github.com/users/livc/following{/other_user}","gists_url":"https://api.github.com/users/livc/gists{/gist_id}","starred_url":"https://api.github.com/users/livc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/livc/subscriptions","organizations_url":"https://api.github.com/users/livc/orgs","repos_url":"https://api.github.com/users/livc/repos","events_url":"https://api.github.com/users/livc/events{/privacy}","received_events_url":"https://api.github.com/users/livc/received_events","type":"User","site_admin":false},"body":"done","created_at":"2016-12-16T12:34:17Z","updated_at":"2016-12-16T12:34:54Z","html_url":"https://github.com/PaddlePaddle/Paddle/pull/881#discussion_r92804223","pull_request_url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/881","_links":{"self":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/comments/92804223"},"html":{"href":"https://github.com/PaddlePaddle/Paddle/pull/881#discussion_r92804223"},"pull_request":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/881"}}},"pull_request":{"url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/881","id":97899772,"html_url":"https://github.com/PaddlePaddle/Paddle/pull/881","diff_url":"https://github.com/PaddlePaddle/Paddle/pull/881.diff","patch_url":"https://github.com/PaddlePaddle/Paddle/pull/881.patch","issue_url":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/881","number":881,"state":"open","locked":false,"title":"add rnn_cn.md","user":{"login":"livc","id":11692045,"avatar_url":"https://avatars.githubusercontent.com/u/11692045?v=3","gravatar_id":"","url":"https://api.github.com/users/livc","html_url":"https://github.com/livc","followers_url":"https://api.github.com/users/livc/followers","following_url":"https://api.github.com/users/livc/following{/other_user}","gists_url":"https://api.github.com/users/livc/gists{/gist_id}","starred_url":"https://api.github.com/users/livc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/livc/subscriptions","organizations_url":"https://api.github.com/users/livc/orgs","repos_url":"https://api.github.com/users/livc/repos","events_url":"https://api.github.com/users/livc/events{/privacy}","received_events_url":"https://api.github.com/users/livc/received_events","type":"User","site_admin":false},"body":"resolve #832 RNN Configuration. \r\n\r\nRNN这篇术语较多，可能很多地方不准确，辛苦校对的同学了。\r\n\r\nThanks.","created_at":"2016-12-14T07:22:25Z","updated_at":"2016-12-16T12:34:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f75ad2c769bbb2096748a60fb8430fc7e28b4534","assignee":{"login":"Zrachel","id":4532062,"avatar_url":"https://avatars.githubusercontent.com/u/4532062?v=3","gravatar_id":"","url":"https://api.github.com/users/Zrachel","html_url":"https://github.com/Zrachel","followers_url":"https://api.github.com/users/Zrachel/followers","following_url":"https://api.github.com/users/Zrachel/following{/other_user}","gists_url":"https://api.github.com/users/Zrachel/gists{/gist_id}","starred_url":"https://api.github.com/users/Zrachel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Zrachel/subscriptions","organizations_url":"https://api.github.com/users/Zrachel/orgs","repos_url":"https://api.github.com/users/Zrachel/repos","events_url":"https://api.github.com/users/Zrachel/events{/privacy}","received_events_url":"https://api.github.com/users/Zrachel/received_events","type":"User","site_admin":false},"assignees":[{"login":"Zrachel","id":4532062,"avatar_url":"https://avatars.githubusercontent.com/u/4532062?v=3","gravatar_id":"","url":"https://api.github.com/users/Zrachel","html_url":"https://github.com/Zrachel","followers_url":"https://api.github.com/users/Zrachel/followers","following_url":"https://api.github.com/users/Zrachel/following{/other_user}","gists_url":"https://api.github.com/users/Zrachel/gists{/gist_id}","starred_url":"https://api.github.com/users/Zrachel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Zrachel/subscriptions","organizations_url":"https://api.github.com/users/Zrachel/orgs","repos_url":"https://api.github.com/users/Zrachel/repos","events_url":"https://api.github.com/users/Zrachel/events{/privacy}","received_events_url":"https://api.github.com/users/Zrachel/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/881/commits","review_comments_url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/881/comments","review_comment_url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/881/comments","statuses_url":"https://api.github.com/repos/PaddlePaddle/Paddle/statuses/660b310f8f246af820c2dd440804501ec12ee955","head":{"label":"livc:rnn","ref":"rnn","sha":"660b310f8f246af820c2dd440804501ec12ee955","user":{"login":"livc","id":11692045,"avatar_url":"https://avatars.githubusercontent.com/u/11692045?v=3","gravatar_id":"","url":"https://api.github.com/users/livc","html_url":"https://github.com/livc","followers_url":"https://api.github.com/users/livc/followers","following_url":"https://api.github.com/users/livc/following{/other_user}","gists_url":"https://api.github.com/users/livc/gists{/gist_id}","starred_url":"https://api.github.com/users/livc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/livc/subscriptions","organizations_url":"https://api.github.com/users/livc/orgs","repos_url":"https://api.github.com/users/livc/repos","events_url":"https://api.github.com/users/livc/events{/privacy}","received_events_url":"https://api.github.com/users/livc/received_events","type":"User","site_admin":false},"repo":{"id":75936831,"name":"Paddle","full_name":"livc/Paddle","owner":{"login":"livc","id":11692045,"avatar_url":"https://avatars.githubusercontent.com/u/11692045?v=3","gravatar_id":"","url":"https://api.github.com/users/livc","html_url":"https://github.com/livc","followers_url":"https://api.github.com/users/livc/followers","following_url":"https://api.github.com/users/livc/following{/other_user}","gists_url":"https://api.github.com/users/livc/gists{/gist_id}","starred_url":"https://api.github.com/users/livc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/livc/subscriptions","organizations_url":"https://api.github.com/users/livc/orgs","repos_url":"https://api.github.com/users/livc/repos","events_url":"https://api.github.com/users/livc/events{/privacy}","received_events_url":"https://api.github.com/users/livc/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/livc/Paddle","description":"PArallel Distributed Deep LEarning","fork":true,"url":"https://api.github.com/repos/livc/Paddle","forks_url":"https://api.github.com/repos/livc/Paddle/forks","keys_url":"https://api.github.com/repos/livc/Paddle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/livc/Paddle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/livc/Paddle/teams","hooks_url":"https://api.github.com/repos/livc/Paddle/hooks","issue_events_url":"https://api.github.com/repos/livc/Paddle/issues/events{/number}","events_url":"https://api.github.com/repos/livc/Paddle/events","assignees_url":"https://api.github.com/repos/livc/Paddle/assignees{/user}","branches_url":"https://api.github.com/repos/livc/Paddle/branches{/branch}","tags_url":"https://api.github.com/repos/livc/Paddle/tags","blobs_url":"https://api.github.com/repos/livc/Paddle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/livc/Paddle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/livc/Paddle/git/refs{/sha}","trees_url":"https://api.github.com/repos/livc/Paddle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/livc/Paddle/statuses/{sha}","languages_url":"https://api.github.com/repos/livc/Paddle/languages","stargazers_url":"https://api.github.com/repos/livc/Paddle/stargazers","contributors_url":"https://api.github.com/repos/livc/Paddle/contributors","subscribers_url":"https://api.github.com/repos/livc/Paddle/subscribers","subscription_url":"https://api.github.com/repos/livc/Paddle/subscription","commits_url":"https://api.github.com/repos/livc/Paddle/commits{/sha}","git_commits_url":"https://api.github.com/repos/livc/Paddle/git/commits{/sha}","comments_url":"https://api.github.com/repos/livc/Paddle/comments{/number}","issue_comment_url":"https://api.github.com/repos/livc/Paddle/issues/comments{/number}","contents_url":"https://api.github.com/repos/livc/Paddle/contents/{+path}","compare_url":"https://api.github.com/repos/livc/Paddle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/livc/Paddle/merges","archive_url":"https://api.github.com/repos/livc/Paddle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/livc/Paddle/downloads","issues_url":"https://api.github.com/repos/livc/Paddle/issues{/number}","pulls_url":"https://api.github.com/repos/livc/Paddle/pulls{/number}","milestones_url":"https://api.github.com/repos/livc/Paddle/milestones{/number}","notifications_url":"https://api.github.com/repos/livc/Paddle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/livc/Paddle/labels{/name}","releases_url":"https://api.github.com/repos/livc/Paddle/releases{/id}","deployments_url":"https://api.github.com/repos/livc/Paddle/deployments","created_at":"2016-12-08T12:44:35Z","updated_at":"2016-12-08T12:44:38Z","pushed_at":"2016-12-16T12:25:26Z","git_url":"git://github.com/livc/Paddle.git","ssh_url":"git@github.com:livc/Paddle.git","clone_url":"https://github.com/livc/Paddle.git","svn_url":"https://github.com/livc/Paddle","homepage":"http://www.paddlepaddle.org/","size":16801,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"PaddlePaddle:develop","ref":"develop","sha":"140edd24eeb07eeb8c1e495e9f95e35e64a4835d","user":{"login":"PaddlePaddle","id":23534030,"avatar_url":"https://avatars.githubusercontent.com/u/23534030?v=3","gravatar_id":"","url":"https://api.github.com/users/PaddlePaddle","html_url":"https://github.com/PaddlePaddle","followers_url":"https://api.github.com/users/PaddlePaddle/followers","following_url":"https://api.github.com/users/PaddlePaddle/following{/other_user}","gists_url":"https://api.github.com/users/PaddlePaddle/gists{/gist_id}","starred_url":"https://api.github.com/users/PaddlePaddle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PaddlePaddle/subscriptions","organizations_url":"https://api.github.com/users/PaddlePaddle/orgs","repos_url":"https://api.github.com/users/PaddlePaddle/repos","events_url":"https://api.github.com/users/PaddlePaddle/events{/privacy}","received_events_url":"https://api.github.com/users/PaddlePaddle/received_events","type":"Organization","site_admin":false},"repo":{"id":65711522,"name":"Paddle","full_name":"PaddlePaddle/Paddle","owner":{"login":"PaddlePaddle","id":23534030,"avatar_url":"https://avatars.githubusercontent.com/u/23534030?v=3","gravatar_id":"","url":"https://api.github.com/users/PaddlePaddle","html_url":"https://github.com/PaddlePaddle","followers_url":"https://api.github.com/users/PaddlePaddle/followers","following_url":"https://api.github.com/users/PaddlePaddle/following{/other_user}","gists_url":"https://api.github.com/users/PaddlePaddle/gists{/gist_id}","starred_url":"https://api.github.com/users/PaddlePaddle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PaddlePaddle/subscriptions","organizations_url":"https://api.github.com/users/PaddlePaddle/orgs","repos_url":"https://api.github.com/users/PaddlePaddle/repos","events_url":"https://api.github.com/users/PaddlePaddle/events{/privacy}","received_events_url":"https://api.github.com/users/PaddlePaddle/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/PaddlePaddle/Paddle","description":"PArallel Distributed Deep LEarning","fork":false,"url":"https://api.github.com/repos/PaddlePaddle/Paddle","forks_url":"https://api.github.com/repos/PaddlePaddle/Paddle/forks","keys_url":"https://api.github.com/repos/PaddlePaddle/Paddle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PaddlePaddle/Paddle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PaddlePaddle/Paddle/teams","hooks_url":"https://api.github.com/repos/PaddlePaddle/Paddle/hooks","issue_events_url":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/events{/number}","events_url":"https://api.github.com/repos/PaddlePaddle/Paddle/events","assignees_url":"https://api.github.com/repos/PaddlePaddle/Paddle/assignees{/user}","branches_url":"https://api.github.com/repos/PaddlePaddle/Paddle/branches{/branch}","tags_url":"https://api.github.com/repos/PaddlePaddle/Paddle/tags","blobs_url":"https://api.github.com/repos/PaddlePaddle/Paddle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PaddlePaddle/Paddle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PaddlePaddle/Paddle/git/refs{/sha}","trees_url":"https://api.github.com/repos/PaddlePaddle/Paddle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PaddlePaddle/Paddle/statuses/{sha}","languages_url":"https://api.github.com/repos/PaddlePaddle/Paddle/languages","stargazers_url":"https://api.github.com/repos/PaddlePaddle/Paddle/stargazers","contributors_url":"https://api.github.com/repos/PaddlePaddle/Paddle/contributors","subscribers_url":"https://api.github.com/repos/PaddlePaddle/Paddle/subscribers","subscription_url":"https://api.github.com/repos/PaddlePaddle/Paddle/subscription","commits_url":"https://api.github.com/repos/PaddlePaddle/Paddle/commits{/sha}","git_commits_url":"https://api.github.com/repos/PaddlePaddle/Paddle/git/commits{/sha}","comments_url":"https://api.github.com/repos/PaddlePaddle/Paddle/comments{/number}","issue_comment_url":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/comments{/number}","contents_url":"https://api.github.com/repos/PaddlePaddle/Paddle/contents/{+path}","compare_url":"https://api.github.com/repos/PaddlePaddle/Paddle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PaddlePaddle/Paddle/merges","archive_url":"https://api.github.com/repos/PaddlePaddle/Paddle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PaddlePaddle/Paddle/downloads","issues_url":"https://api.github.com/repos/PaddlePaddle/Paddle/issues{/number}","pulls_url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls{/number}","milestones_url":"https://api.github.com/repos/PaddlePaddle/Paddle/milestones{/number}","notifications_url":"https://api.github.com/repos/PaddlePaddle/Paddle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PaddlePaddle/Paddle/labels{/name}","releases_url":"https://api.github.com/repos/PaddlePaddle/Paddle/releases{/id}","deployments_url":"https://api.github.com/repos/PaddlePaddle/Paddle/deployments","created_at":"2016-08-15T06:59:08Z","updated_at":"2016-12-16T09:04:14Z","pushed_at":"2016-12-16T12:27:13Z","git_url":"git://github.com/PaddlePaddle/Paddle.git","ssh_url":"git@github.com:PaddlePaddle/Paddle.git","clone_url":"https://github.com/PaddlePaddle/Paddle.git","svn_url":"https://github.com/PaddlePaddle/Paddle","homepage":"http://www.paddlepaddle.org/","size":16979,"stargazers_count":3967,"watchers_count":3967,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":972,"mirror_url":null,"open_issues_count":168,"forks":972,"open_issues":168,"watchers":3967,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/881"},"html":{"href":"https://github.com/PaddlePaddle/Paddle/pull/881"},"issue":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/881"},"comments":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/881/comments"},"review_comments":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/881/comments"},"review_comment":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/881/commits"},"statuses":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/statuses/660b310f8f246af820c2dd440804501ec12ee955"}}}}
{"actor":{"display_login":"livc"}}