{"action":"created","comment":{"url":"https://api.github.com/repos/dmlc/mxnet/pulls/comments/72038529","id":72038529,"diff_hunk":"@@ -0,0 +1,331 @@\n+/*!\n+ * Copyright (c) 2016 by Contributors\n+ * \\file caffe_operator-inl.h\n+ * \\brief Caffe Operator\n+ * \\author Haoran Wang \n+*/\n+#ifndef PLUGIN_CAFFE_CAFFE_OPERATOR_INL_H_\n+#define PLUGIN_CAFFE_CAFFE_OPERATOR_INL_H_\n+\n+#include <caffe/layer.hpp>\n+#include <caffe/proto/caffe.pb.h>\n+#include <caffe/blob.hpp>\n+\n+#include <dmlc/logging.h>\n+#include <dmlc/parameter.h>\n+#include <mxnet/operator.h>\n+\n+#include <map>\n+#include <vector>\n+#include <string>\n+#include <utility>\n+#include <iostream>\n+#include <exception>\n+\n+#include \"../../src/operator/operator_common.h\"\n+\n+#include \"caffe_common.h\"\n+#include \"caffe_operator_util.h\"\n+#include \"caffe_stream.h\"\n+#include \"caffe_fieldentry.h\"\n+#include \"caffe_blob.h\"\n+\n+namespace mxnet {\n+namespace op {\n+\n+struct CaffeOperatorParam : public dmlc::Parameter<CaffeOperatorParam> {\n+  caffe::LayerParameter prototxt;\n+  int in_num, w_num, out_num;\n+\n+  DMLC_DECLARE_PARAMETER(CaffeOperatorParam) { DMLC_DECLARE_FIELD(prototxt).set_default(\"layer{}\")\n+    .describe(\"Caffe's layer parameter\");\n+    DMLC_DECLARE_FIELD(in_num).set_range(0, 100).set_default(1)\n+    .describe(\"Operator input number\");\n+    DMLC_DECLARE_FIELD(out_num).set_range(0, 100).set_default(1)\n+    .describe(\"Operator output number\");\n+  }\n+};\n+\n+\n+/**\n+ * \\brief this is the implementation of caffe operator in caffe.\n+ * \\tparam xpu the device that the op will be executed on.\n+ */\n+template<typename xpu, typename Dtype>\n+class CaffeOperator : public Operator {\n+ public:\n+  explicit CaffeOperator(CaffeOperatorParam p):param_(p),\n+                                               setup_(false),\n+                                               init_w_(false),\n+                                               init_wd_(false) {\n+    std::string type = param_.prototxt.type();\n+    CaffeOpInitEntry<Dtype>* e = CaffeOpInitRegistry<Dtype>::Get()->Find(type);\n+    caffeOp_ = e->gen_f_(param_.prototxt);\n+\n+    InitCaffeBlobs<Dtype>(bot_, param_.in_num);\n+    InitCaffeBlobs<Dtype>(top_, param_.out_num);\n+    InitCaffeBlobs<Dtype>(wei_, param_.w_num);\n+    flags_.resize(param_.in_num);\n+  }\n+\n+  ~CaffeOperator() {\n+    DelCaffeBlobs(bot_, param_.in_num);\n+    DelCaffeBlobs(top_, param_.out_num);\n+    DelCaffeBlobs(wei_, param_.w_num);\n+  }\n+\n+  virtual void Forward(const OpContext &ctx,\n+                       const std::vector<TBlob> &in_data,\n+                       const std::vector<OpReqType> &req,\n+                       const std::vector<TBlob> &out_data,\n+                       const std::vector<TBlob> &aux_args) {\n+    // Set mode before forward\n+    ::mxnet::CaffeMode::SetMode<xpu>();\n+    using ::caffe::Blob;\n+    using std::vector;\n+    using namespace mshadow;\n+    using namespace mshadow::expr;\n+    for (index_t i = 0; i < req.size(); ++i)\n+      CHECK_EQ(req[i], kWriteTo);\n+    index_t expected_in_num = param_.w_num + param_.in_num;\n+    CHECK_EQ(in_data.size(), expected_in_num);\n+    CHECK_EQ(out_data.size(), param_.out_num);\n+\n+    Stream<xpu> *s = ctx.get_stream<xpu>();\n+#if defined(__CUDACC__)\n+    // TODO(Haoran): when need cublas handle in stream?\n+    CHECK_EQ(s->blas_handle_ownership_, Stream<xpu>::OwnHandle)\n+          << \"Must init CuBLAS handle in stream\";\n+#endif  // __CUDACC__\n+\n+    TBlob2CaffeBlob<xpu, Dtype>(caffememtype::Data, bot_.begin(), in_data.begin(), param_.in_num);\n+    TBlob2CaffeBlob<xpu, Dtype>(caffememtype::Data, top_.begin(), out_data.begin(), param_.out_num);\n+\n+    CaffeOpSetup();\n+\n+    // Init caffe's weight pointer\n+    if (!init_w_) {\n+      init_w_ = true;\n+      TBlob2CaffeBlob<xpu, Dtype>(caffememtype::Data,\n+                      wei_.begin(),\n+                      in_data.begin() + param_.in_num,\n+                      param_.w_num);\n+      caffeOp_->SetBlobs(wei_);\n+    }    \n+\n+    caffeOp_->Forward(bot_, top_);\n+  }\n+\n+  // Set up caffe op with real data\n+  void CaffeOpSetup() {\n+    if (!setup_ ) {\n+      setup_ = true;\n+      caffeOp_->SetUp(bot_, top_);\n+    }\n+  }\n+\n+  virtual void Backward(const OpContext &ctx,\n+                        const std::vector<TBlob> &out_grad,\n+                        const std::vector<TBlob> &in_data,\n+                        const std::vector<TBlob> &out_data,\n+                        const std::vector<OpReqType> &req,\n+                        const std::vector<TBlob> &in_grad,\n+                        const std::vector<TBlob> &aux_args) {\n+    // Set mode before backward\n+    ::mxnet::CaffeMode::SetMode<xpu>();\n+    using namespace mshadow;\n+    using namespace mshadow::expr;\n+    CHECK_EQ(out_grad.size(), param_.out_num);\n+    for (index_t i = 0; i < param_.in_num; ++i)\n+      CHECK(req[i] != kAddTo) << \"caffe doesn't accm diff on bottom data\";\n+\n+    index_t expected_in_num = param_.w_num + param_.in_num;\n+    CHECK(in_data.size() == expected_in_num && in_grad.size() == expected_in_num);\n+    CHECK_EQ(req.size(), expected_in_num);\n+\n+    Stream<xpu> *s = ctx.get_stream<xpu>();\n+#if defined(__CUDACC__)\n+    // TODO(Haoran): when need cublas handle in stream?\n+    CHECK_EQ(s->blas_handle_ownership_, Stream<xpu>::OwnHandle)\n+          << \"Must init CuBLAS handle in stream\";\n+#endif  // __CUDACC__\n+\n+    TBlob2CaffeBlob<xpu, Dtype>(caffememtype::Grad, bot_.begin(), in_grad.begin(), param_.in_num);\n+    TBlob2CaffeBlob<xpu, Dtype>(caffememtype::Grad, top_.begin(), out_grad.begin(), param_.out_num);\n+\n+    // Init caffe's gradient pointer\n+    if (!init_wd_) {\n+      init_wd_ = true;\n+      TBlob2CaffeBlob<xpu, Dtype>(caffememtype::Grad,\n+                            wei_.begin(),\n+                            in_grad.begin() + param_.in_num,\n+                            param_.w_num);\n+    }\n+\n+    // Handle OpReqType of weights\n+    for (index_t i = param_.in_num; i < expected_in_num; ++i)\n+      HandleOpReq(s, req[i], &in_grad[i]);\n+\n+    // Set BP flag\n+    for (index_t i = 0; i < param_.in_num; ++i)\n+      flags_[i] = req[i] != kNullOp;\n+\n+    caffeOp_->Backward(top_, flags_, bot_);\n+  }\n+\n+  void HandleOpReq(mshadow::Stream<xpu>*s, OpReqType req, const TBlob* in_g) {\n+    if ((req == kWriteInplace) || (req == kWriteTo))\n+      switch (in_g->shape_.ndim()) {\n+        case 1: CleanTBlob<1>(s, req, in_g); break;","path":"plugin/caffe/caffe_operator-inl.h","position":null,"original_position":179,"commit_id":"44400ecf1bf5d5f56391f8e67c3d4b7492a8a587","original_commit_id":"6838111daecb3913d795917d590fa6556dade520","user":{"login":"HrWangChengdu","id":12106925,"avatar_url":"https://avatars.githubusercontent.com/u/12106925?v=3","gravatar_id":"","url":"https://api.github.com/users/HrWangChengdu","html_url":"https://github.com/HrWangChengdu","followers_url":"https://api.github.com/users/HrWangChengdu/followers","following_url":"https://api.github.com/users/HrWangChengdu/following{/other_user}","gists_url":"https://api.github.com/users/HrWangChengdu/gists{/gist_id}","starred_url":"https://api.github.com/users/HrWangChengdu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HrWangChengdu/subscriptions","organizations_url":"https://api.github.com/users/HrWangChengdu/orgs","repos_url":"https://api.github.com/users/HrWangChengdu/repos","events_url":"https://api.github.com/users/HrWangChengdu/events{/privacy}","received_events_url":"https://api.github.com/users/HrWangChengdu/received_events","type":"User","site_admin":false},"body":"Fixed","created_at":"2016-07-25T10:05:52Z","updated_at":"2016-07-25T10:05:52Z","html_url":"https://github.com/dmlc/mxnet/pull/2746#discussion_r72038529","pull_request_url":"https://api.github.com/repos/dmlc/mxnet/pulls/2746","_links":{"self":{"href":"https://api.github.com/repos/dmlc/mxnet/pulls/comments/72038529"},"html":{"href":"https://github.com/dmlc/mxnet/pull/2746#discussion_r72038529"},"pull_request":{"href":"https://api.github.com/repos/dmlc/mxnet/pulls/2746"}}},"pull_request":{"url":"https://api.github.com/repos/dmlc/mxnet/pulls/2746","id":77748593,"html_url":"https://github.com/dmlc/mxnet/pull/2746","diff_url":"https://github.com/dmlc/mxnet/pull/2746.diff","patch_url":"https://github.com/dmlc/mxnet/pull/2746.patch","issue_url":"https://api.github.com/repos/dmlc/mxnet/issues/2746","number":2746,"state":"open","locked":false,"title":"Caffe Plugin","user":{"login":"piiswrong","id":568948,"avatar_url":"https://avatars.githubusercontent.com/u/568948?v=3","gravatar_id":"","url":"https://api.github.com/users/piiswrong","html_url":"https://github.com/piiswrong","followers_url":"https://api.github.com/users/piiswrong/followers","following_url":"https://api.github.com/users/piiswrong/following{/other_user}","gists_url":"https://api.github.com/users/piiswrong/gists{/gist_id}","starred_url":"https://api.github.com/users/piiswrong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/piiswrong/subscriptions","organizations_url":"https://api.github.com/users/piiswrong/orgs","repos_url":"https://api.github.com/users/piiswrong/repos","events_url":"https://api.github.com/users/piiswrong/events{/privacy}","received_events_url":"https://api.github.com/users/piiswrong/received_events","type":"User","site_admin":false},"body":"@HrWangChengdu I helped you created this pull request to track progress and make some comments.","created_at":"2016-07-17T22:53:24Z","updated_at":"2016-07-25T10:05:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c96f7a3dad0c785591084bcaa6931dffce4734e4","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/dmlc/mxnet/pulls/2746/commits","review_comments_url":"https://api.github.com/repos/dmlc/mxnet/pulls/2746/comments","review_comment_url":"https://api.github.com/repos/dmlc/mxnet/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dmlc/mxnet/issues/2746/comments","statuses_url":"https://api.github.com/repos/dmlc/mxnet/statuses/44400ecf1bf5d5f56391f8e67c3d4b7492a8a587","head":{"label":"HrWangChengdu:master","ref":"master","sha":"44400ecf1bf5d5f56391f8e67c3d4b7492a8a587","user":{"login":"HrWangChengdu","id":12106925,"avatar_url":"https://avatars.githubusercontent.com/u/12106925?v=3","gravatar_id":"","url":"https://api.github.com/users/HrWangChengdu","html_url":"https://github.com/HrWangChengdu","followers_url":"https://api.github.com/users/HrWangChengdu/followers","following_url":"https://api.github.com/users/HrWangChengdu/following{/other_user}","gists_url":"https://api.github.com/users/HrWangChengdu/gists{/gist_id}","starred_url":"https://api.github.com/users/HrWangChengdu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HrWangChengdu/subscriptions","organizations_url":"https://api.github.com/users/HrWangChengdu/orgs","repos_url":"https://api.github.com/users/HrWangChengdu/repos","events_url":"https://api.github.com/users/HrWangChengdu/events{/privacy}","received_events_url":"https://api.github.com/users/HrWangChengdu/received_events","type":"User","site_admin":false},"repo":{"id":48380664,"name":"mxnet","full_name":"HrWangChengdu/mxnet","owner":{"login":"HrWangChengdu","id":12106925,"avatar_url":"https://avatars.githubusercontent.com/u/12106925?v=3","gravatar_id":"","url":"https://api.github.com/users/HrWangChengdu","html_url":"https://github.com/HrWangChengdu","followers_url":"https://api.github.com/users/HrWangChengdu/followers","following_url":"https://api.github.com/users/HrWangChengdu/following{/other_user}","gists_url":"https://api.github.com/users/HrWangChengdu/gists{/gist_id}","starred_url":"https://api.github.com/users/HrWangChengdu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HrWangChengdu/subscriptions","organizations_url":"https://api.github.com/users/HrWangChengdu/orgs","repos_url":"https://api.github.com/users/HrWangChengdu/repos","events_url":"https://api.github.com/users/HrWangChengdu/events{/privacy}","received_events_url":"https://api.github.com/users/HrWangChengdu/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/HrWangChengdu/mxnet","description":"Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Go, Javascript and more","fork":true,"url":"https://api.github.com/repos/HrWangChengdu/mxnet","forks_url":"https://api.github.com/repos/HrWangChengdu/mxnet/forks","keys_url":"https://api.github.com/repos/HrWangChengdu/mxnet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/HrWangChengdu/mxnet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/HrWangChengdu/mxnet/teams","hooks_url":"https://api.github.com/repos/HrWangChengdu/mxnet/hooks","issue_events_url":"https://api.github.com/repos/HrWangChengdu/mxnet/issues/events{/number}","events_url":"https://api.github.com/repos/HrWangChengdu/mxnet/events","assignees_url":"https://api.github.com/repos/HrWangChengdu/mxnet/assignees{/user}","branches_url":"https://api.github.com/repos/HrWangChengdu/mxnet/branches{/branch}","tags_url":"https://api.github.com/repos/HrWangChengdu/mxnet/tags","blobs_url":"https://api.github.com/repos/HrWangChengdu/mxnet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/HrWangChengdu/mxnet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/HrWangChengdu/mxnet/git/refs{/sha}","trees_url":"https://api.github.com/repos/HrWangChengdu/mxnet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/HrWangChengdu/mxnet/statuses/{sha}","languages_url":"https://api.github.com/repos/HrWangChengdu/mxnet/languages","stargazers_url":"https://api.github.com/repos/HrWangChengdu/mxnet/stargazers","contributors_url":"https://api.github.com/repos/HrWangChengdu/mxnet/contributors","subscribers_url":"https://api.github.com/repos/HrWangChengdu/mxnet/subscribers","subscription_url":"https://api.github.com/repos/HrWangChengdu/mxnet/subscription","commits_url":"https://api.github.com/repos/HrWangChengdu/mxnet/commits{/sha}","git_commits_url":"https://api.github.com/repos/HrWangChengdu/mxnet/git/commits{/sha}","comments_url":"https://api.github.com/repos/HrWangChengdu/mxnet/comments{/number}","issue_comment_url":"https://api.github.com/repos/HrWangChengdu/mxnet/issues/comments{/number}","contents_url":"https://api.github.com/repos/HrWangChengdu/mxnet/contents/{+path}","compare_url":"https://api.github.com/repos/HrWangChengdu/mxnet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/HrWangChengdu/mxnet/merges","archive_url":"https://api.github.com/repos/HrWangChengdu/mxnet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/HrWangChengdu/mxnet/downloads","issues_url":"https://api.github.com/repos/HrWangChengdu/mxnet/issues{/number}","pulls_url":"https://api.github.com/repos/HrWangChengdu/mxnet/pulls{/number}","milestones_url":"https://api.github.com/repos/HrWangChengdu/mxnet/milestones{/number}","notifications_url":"https://api.github.com/repos/HrWangChengdu/mxnet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/HrWangChengdu/mxnet/labels{/name}","releases_url":"https://api.github.com/repos/HrWangChengdu/mxnet/releases{/id}","deployments_url":"https://api.github.com/repos/HrWangChengdu/mxnet/deployments","created_at":"2015-12-21T15:58:24Z","updated_at":"2016-05-23T00:13:41Z","pushed_at":"2016-07-25T10:05:24Z","git_url":"git://github.com/HrWangChengdu/mxnet.git","ssh_url":"git@github.com:HrWangChengdu/mxnet.git","clone_url":"https://github.com/HrWangChengdu/mxnet.git","svn_url":"https://github.com/HrWangChengdu/mxnet","homepage":"http://mxnet.rtfd.org","size":8285,"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":"master"}},"base":{"label":"dmlc:master","ref":"master","sha":"5ab62dbe18cdf8ac55d206492ad47f572b39fefc","user":{"login":"dmlc","id":11508361,"avatar_url":"https://avatars.githubusercontent.com/u/11508361?v=3","gravatar_id":"","url":"https://api.github.com/users/dmlc","html_url":"https://github.com/dmlc","followers_url":"https://api.github.com/users/dmlc/followers","following_url":"https://api.github.com/users/dmlc/following{/other_user}","gists_url":"https://api.github.com/users/dmlc/gists{/gist_id}","starred_url":"https://api.github.com/users/dmlc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmlc/subscriptions","organizations_url":"https://api.github.com/users/dmlc/orgs","repos_url":"https://api.github.com/users/dmlc/repos","events_url":"https://api.github.com/users/dmlc/events{/privacy}","received_events_url":"https://api.github.com/users/dmlc/received_events","type":"Organization","site_admin":false},"repo":{"id":34864402,"name":"mxnet","full_name":"dmlc/mxnet","owner":{"login":"dmlc","id":11508361,"avatar_url":"https://avatars.githubusercontent.com/u/11508361?v=3","gravatar_id":"","url":"https://api.github.com/users/dmlc","html_url":"https://github.com/dmlc","followers_url":"https://api.github.com/users/dmlc/followers","following_url":"https://api.github.com/users/dmlc/following{/other_user}","gists_url":"https://api.github.com/users/dmlc/gists{/gist_id}","starred_url":"https://api.github.com/users/dmlc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmlc/subscriptions","organizations_url":"https://api.github.com/users/dmlc/orgs","repos_url":"https://api.github.com/users/dmlc/repos","events_url":"https://api.github.com/users/dmlc/events{/privacy}","received_events_url":"https://api.github.com/users/dmlc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dmlc/mxnet","description":"Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more","fork":false,"url":"https://api.github.com/repos/dmlc/mxnet","forks_url":"https://api.github.com/repos/dmlc/mxnet/forks","keys_url":"https://api.github.com/repos/dmlc/mxnet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dmlc/mxnet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dmlc/mxnet/teams","hooks_url":"https://api.github.com/repos/dmlc/mxnet/hooks","issue_events_url":"https://api.github.com/repos/dmlc/mxnet/issues/events{/number}","events_url":"https://api.github.com/repos/dmlc/mxnet/events","assignees_url":"https://api.github.com/repos/dmlc/mxnet/assignees{/user}","branches_url":"https://api.github.com/repos/dmlc/mxnet/branches{/branch}","tags_url":"https://api.github.com/repos/dmlc/mxnet/tags","blobs_url":"https://api.github.com/repos/dmlc/mxnet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dmlc/mxnet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dmlc/mxnet/git/refs{/sha}","trees_url":"https://api.github.com/repos/dmlc/mxnet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dmlc/mxnet/statuses/{sha}","languages_url":"https://api.github.com/repos/dmlc/mxnet/languages","stargazers_url":"https://api.github.com/repos/dmlc/mxnet/stargazers","contributors_url":"https://api.github.com/repos/dmlc/mxnet/contributors","subscribers_url":"https://api.github.com/repos/dmlc/mxnet/subscribers","subscription_url":"https://api.github.com/repos/dmlc/mxnet/subscription","commits_url":"https://api.github.com/repos/dmlc/mxnet/commits{/sha}","git_commits_url":"https://api.github.com/repos/dmlc/mxnet/git/commits{/sha}","comments_url":"https://api.github.com/repos/dmlc/mxnet/comments{/number}","issue_comment_url":"https://api.github.com/repos/dmlc/mxnet/issues/comments{/number}","contents_url":"https://api.github.com/repos/dmlc/mxnet/contents/{+path}","compare_url":"https://api.github.com/repos/dmlc/mxnet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dmlc/mxnet/merges","archive_url":"https://api.github.com/repos/dmlc/mxnet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dmlc/mxnet/downloads","issues_url":"https://api.github.com/repos/dmlc/mxnet/issues{/number}","pulls_url":"https://api.github.com/repos/dmlc/mxnet/pulls{/number}","milestones_url":"https://api.github.com/repos/dmlc/mxnet/milestones{/number}","notifications_url":"https://api.github.com/repos/dmlc/mxnet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dmlc/mxnet/labels{/name}","releases_url":"https://api.github.com/repos/dmlc/mxnet/releases{/id}","deployments_url":"https://api.github.com/repos/dmlc/mxnet/deployments","created_at":"2015-04-30T16:21:15Z","updated_at":"2016-07-25T09:38:56Z","pushed_at":"2016-07-25T10:05:25Z","git_url":"git://github.com/dmlc/mxnet.git","ssh_url":"git@github.com:dmlc/mxnet.git","clone_url":"https://github.com/dmlc/mxnet.git","svn_url":"https://github.com/dmlc/mxnet","homepage":"http://mxnet.rtfd.org","size":12022,"stargazers_count":4518,"watchers_count":4518,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1676,"mirror_url":null,"open_issues_count":492,"forks":1676,"open_issues":492,"watchers":4518,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dmlc/mxnet/pulls/2746"},"html":{"href":"https://github.com/dmlc/mxnet/pull/2746"},"issue":{"href":"https://api.github.com/repos/dmlc/mxnet/issues/2746"},"comments":{"href":"https://api.github.com/repos/dmlc/mxnet/issues/2746/comments"},"review_comments":{"href":"https://api.github.com/repos/dmlc/mxnet/pulls/2746/comments"},"review_comment":{"href":"https://api.github.com/repos/dmlc/mxnet/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dmlc/mxnet/pulls/2746/commits"},"statuses":{"href":"https://api.github.com/repos/dmlc/mxnet/statuses/44400ecf1bf5d5f56391f8e67c3d4b7492a8a587"}}}}
{"actor":{"display_login":"HrWangChengdu"}}