{"action":"created","comment":{"url":"https://api.github.com/repos/apache/incubator-mxnet/pulls/comments/181168823","pull_request_review_id":111713165,"id":181168823,"diff_hunk":"@@ -0,0 +1,236 @@\n+\n+# Naming of Gluon Parameter and Blocks\n+\n+In gluon, each Parameter or Block has a name (and prefix). Parameter names are specified by users and Block names can be either specified by users or automatically created.\n+\n+In this tutorial we talk about the best practices on naming. First, let's import MXNet and Gluon:\n+\n+\n+```python\n+from __future__ import print_function\n+import mxnet as mx\n+from mxnet import gluon\n+```\n+\n+## Naming Blocks\n+\n+When creating a block, you can assign a prefix to it:\n+\n+\n+```python\n+mydense = gluon.nn.Dense(100, prefix='mydense_')\n+print(mydense.prefix)\n+```\n+\n+    mydense_\n+\n+\n+When no prefix is given, Gluon will automatically generate one:\n+\n+\n+```python\n+dense0 = gluon.nn.Dense(100)\n+print(dense0.prefix)\n+```\n+\n+    dense0_\n+\n+\n+When you create more Blocks of the same kind, they will be named differently to avoid collision:\n+\n+\n+```python\n+dense1 = gluon.nn.Dense(100)\n+print(dense1.prefix)\n+```\n+\n+    dense1_\n+\n+\n+## Naming Parameters\n+\n+Parameters within a Block will be named by prepending the prefix of the Block to the name of the Parameter:\n+\n+\n+```python\n+print(dense0.collect_params())\n+```\n+\n+    dense0_ (\n+      Parameter dense0_weight (shape=(100, 0), dtype=<type 'numpy.float32'>)\n+      Parameter dense0_bias (shape=(100,), dtype=<type 'numpy.float32'>)\n+    )\n+\n+\n+## Name scopes\n+\n+To manage the names of nested Blocks, each Block has a `name_scope` attached to it. All Blocks created within a name scope will have its parent Block's prefix prepended to its name.\n+\n+Let's demonstrate this by first define a simple neural net:\n+\n+\n+```python\n+class Model(gluon.Block):\n+    def __init__(self, **kwargs):\n+        super(Model, self).__init__(**kwargs)\n+        with self.name_scope():\n+            self.dense0 = gluon.nn.Dense(20)\n+            self.dense1 = gluon.nn.Dense(20)\n+            self.mydense = gluon.nn.Dense(20, prefix='mydense_')\n+\n+    def forward(self, x):\n+        x = mx.nd.relu(self.dense0(x))\n+        x = mx.nd.relu(self.dense1(x))\n+        return mx.nd.relu(self.mydense(x))\n+```\n+\n+Now let's instantiate our neural net.\n+\n+- Note that `model0.dense0` is named as `model0_dense0_` instead of `dense0_`.\n+\n+- Also note that although we specified `mydense_` as prefix for `model.mydense`, its parent's prefix is automatically prepended to generate the prefix `model0_mydense_`.\n+\n+\n+```python\n+model0 = Model()\n+model0.initialize()\n+model0(mx.nd.zeros((1, 20)))\n+print(model0.prefix, model0.dense0.prefix, model0.dense1.prefix, model0.mydense.prefix)\n+```\n+\n+    model0_ model0_dense0_ model0_dense1_ model0_mydense_\n+\n+\n+If we instantiate `Model` again, it will be given a different name like shown before for `Dense`.\n+\n+- Note that `model1.dense0` is still named as `dense0_` instead of `dense2_`, following dense layers in previously created `model0`. This is because each instance of model's name scope is independent of each other.\n+\n+\n+```python\n+model1 = Model()\n+print(model1.prefix, model1.dense0.prefix, model1.dense1.prefix, model1.mydense.prefix)\n+```\n+\n+    model1_ model1_dense0_ model1_dense1_ model1_mydense_\n+\n+\n+**It is recommended that you manually specify prefix for the top level Block (i.e. `model = Model(prefix='mymodel_')`) to avoid potential confusions in naming**\n+\n+The same principle also applies to container blocks like Sequantial. `name_scope` can be used inside `__init__` as well as out side of `__init__`:\n+\n+\n+```python\n+net = gluon.nn.Sequential()\n+with net.name_scope():\n+    net.add(gluon.nn.Dense(20))\n+    net.add(gluon.nn.Dense(20))\n+print(net.prefix, net[0].prefix, net[1].prefix)\n+```\n+\n+    sequential0_ sequential0_dense0_ sequential0_dense1_\n+\n+\n+`gluon.model_zoo` also behaves similarly:\n+\n+\n+```python\n+net = gluon.nn.Sequential()\n+with net.name_scope():\n+    net.add(gluon.model_zoo.vision.alexnet(pretrained=True))\n+    net.add(gluon.model_zoo.vision.alexnet(pretrained=True))\n+print(net.prefix, net[0].prefix, net[1].prefix)\n+```\n+\n+    sequential1_ sequential1_alexnet0_ sequential1_alexnet1_\n+\n+\n+## Saving and loading\n+\n+Because model0 and model1 have different prefixes, their Parameters also have different names:\n+\n+\n+```python\n+print(model0.collect_params(), '\\n')\n+print(model1.collect_params())\n+```\n+\n+    model0_ (\n+      Parameter model0_dense0_weight (shape=(20L, 20L), dtype=<type 'numpy.float32'>)\n+      Parameter model0_dense0_bias (shape=(20L,), dtype=<type 'numpy.float32'>)\n+      Parameter model0_dense1_weight (shape=(20L, 20L), dtype=<type 'numpy.float32'>)\n+      Parameter model0_dense1_bias (shape=(20L,), dtype=<type 'numpy.float32'>)\n+      Parameter model0_mydense_weight (shape=(20L, 20L), dtype=<type 'numpy.float32'>)\n+      Parameter model0_mydense_bias (shape=(20L,), dtype=<type 'numpy.float32'>)\n+    ) \n+    \n+    model1_ (\n+      Parameter model1_dense0_weight (shape=(20, 0), dtype=<type 'numpy.float32'>)\n+      Parameter model1_dense0_bias (shape=(20,), dtype=<type 'numpy.float32'>)\n+      Parameter model1_dense1_weight (shape=(20, 0), dtype=<type 'numpy.float32'>)\n+      Parameter model1_dense1_bias (shape=(20,), dtype=<type 'numpy.float32'>)\n+      Parameter model1_mydense_weight (shape=(20, 0), dtype=<type 'numpy.float32'>)\n+      Parameter model1_mydense_bias (shape=(20,), dtype=<type 'numpy.float32'>)\n+    )\n+\n+\n+As a result if you try to save parameters from model0 and load it with model1, you'll get an error due to unmatching names:\n+\n+\n+```python\n+model0.collect_params().save('model.params')\n+try:\n+    model1.collect_params().load('model.params', mx.cpu())\n+except Exception, e:\n+    print(e)\n+```\n+\n+    Parameter 'model1_dense0_weight' is missing in file 'model.params', which contains parameters: 'model0_mydense_weight', 'model0_dense1_bias', 'model0_dense1_weight', 'model0_dense0_weight', 'model0_dense0_bias', 'model0_mydense_bias'. Please make sure source and target networks have the same prefix.\n+\n+\n+To solve this problem, we use `save_params`/`load_params` instead of `collect_params` and `save`/`load`. This way, the unmatching part of parameter names (`model0_` and `model1_`) are stripped and only the matching part is saved.\n+\n+\n+```python\n+model0.save_params('model.params')\n+model1.load_params('model.params', mx.cpu())\n+print(mx.nd.load('model.params').keys())\n+```\n+\n+    ['dense0_bias', 'mydense_weight', 'mydense_bias', 'dense1_bias', 'dense1_weight', 'dense0_weight']\n+\n+\n+**Nevertheless, you are still recommended to manually specify the prefix of the top level Block (i.e. `model = Model(prefix='mymodel_')`) to avoid any potential problem during saving and loading.**\n+\n+## Replacing Blocks from networks and fine-tuning\n+\n+Sometimes you may want to load a pretrained model, and replace certain Blocks in it for fine-tuning.\n+\n+For example, the alexnet in model zoo has 1000 output dimensions, but maybe you only have 100 classes in your application.\n+\n+To see how to do this, we first load an pretrained alexnet.\n+\n+- Note that the output layer is a dense block with 1000 dimension outputs.\n+\n+\n+```python\n+alexnet = gluon.model_zoo.vision.alexnet(pretrained=True)\n+print(alexnet.output, alexnet.output.prefix)\n+```\n+\n+    Dense(4096 -> 1000, linear) alexnet0_dense2_\n+\n+\n+To change the output to 100 dimension, we replace it with a new block.\n+\n+- Note that it's important to do this in alexnet's name_scope, otherwise you will have unmatching names when you try to save and load your model.","path":"docs/tutorials/gluon/naming.md","position":225,"original_position":225,"commit_id":"eacac76eff3e5e3d200b771422eadf6f1a2af08e","original_commit_id":"eacac76eff3e5e3d200b771422eadf6f1a2af08e","user":{"login":"aaronmarkham","id":5974205,"avatar_url":"https://avatars1.githubusercontent.com/u/5974205?v=4","gravatar_id":"","url":"https://api.github.com/users/aaronmarkham","html_url":"https://github.com/aaronmarkham","followers_url":"https://api.github.com/users/aaronmarkham/followers","following_url":"https://api.github.com/users/aaronmarkham/following{/other_user}","gists_url":"https://api.github.com/users/aaronmarkham/gists{/gist_id}","starred_url":"https://api.github.com/users/aaronmarkham/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aaronmarkham/subscriptions","organizations_url":"https://api.github.com/users/aaronmarkham/orgs","repos_url":"https://api.github.com/users/aaronmarkham/repos","events_url":"https://api.github.com/users/aaronmarkham/events{/privacy}","received_events_url":"https://api.github.com/users/aaronmarkham/received_events","type":"User","site_admin":false},"body":"I ran into similar issues and just blanked out the prefix. Here's an example that I used.\r\nhttps://gist.github.com/aaronmarkham/1017664fe683596c614961112a867145#gistcomment-2336981\r\nCan you explain a bit more? This is all really helpful, and I wonder how you'd explain what I ran into and better ways to fix it.\r\n\r\nLike how I used `ignore_extra` to [get around the errors](https://gist.github.com/aaronmarkham/1017664fe683596c614961112a867145#file-gluon-export-model-L30) but was still worried that I hadn't really loaded the model properly.","created_at":"2018-04-12T17:53:34Z","updated_at":"2018-04-12T17:56:39Z","html_url":"https://github.com/apache/incubator-mxnet/pull/10511#discussion_r181168823","pull_request_url":"https://api.github.com/repos/apache/incubator-mxnet/pulls/10511","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/apache/incubator-mxnet/pulls/comments/181168823"},"html":{"href":"https://github.com/apache/incubator-mxnet/pull/10511#discussion_r181168823"},"pull_request":{"href":"https://api.github.com/repos/apache/incubator-mxnet/pulls/10511"}}},"pull_request":{"url":"https://api.github.com/repos/apache/incubator-mxnet/pulls/10511","id":181009560,"html_url":"https://github.com/apache/incubator-mxnet/pull/10511","diff_url":"https://github.com/apache/incubator-mxnet/pull/10511.diff","patch_url":"https://github.com/apache/incubator-mxnet/pull/10511.patch","issue_url":"https://api.github.com/repos/apache/incubator-mxnet/issues/10511","number":10511,"state":"open","locked":false,"title":"add naming tutorial","user":{"login":"piiswrong","id":568948,"avatar_url":"https://avatars0.githubusercontent.com/u/568948?v=4","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":"## Description ##\r\n(Brief description on what this PR is about)\r\n\r\n## Checklist ##\r\n### Essentials ###\r\nPlease feel free to remove inapplicable items for your PR.\r\n- [ ] The PR title starts with [MXNET-$JIRA_ID], where $JIRA_ID refers to the relevant [JIRA issue](https://issues.apache.org/jira/projects/MXNET/issues) created (except PRs with tiny changes)\r\n- [ ] Changes are complete (i.e. I finished coding on this PR)\r\n- [ ] All changes have test coverage:\r\n- Unit tests are added for small changes to verify correctness (e.g. adding a new operator)\r\n- Nightly tests are added for complicated/long-running ones (e.g. changing distributed kvstore)\r\n- Build tests will be added for build configuration changes (e.g. adding a new build option with NCCL)\r\n- [ ] Code is well-documented: \r\n- For user-facing API changes, API doc string has been updated. \r\n- For new C++ functions in header files, their functionalities and arguments are documented. \r\n- For new examples, README.md is added to explain the what the example does, the source of the dataset, expected performance on test set and reference to the original paper if applicable\r\n- Check the API doc at http://mxnet-ci-doc.s3-accelerate.dualstack.amazonaws.com/PR-$PR_ID/$BUILD_ID/index.html\r\n- [ ] To the my best knowledge, examples are either not affected by this change, or have been fixed to be compatible with this change\r\n\r\n### Changes ###\r\n- [ ] Feature1, tests, (and when applicable, API doc)\r\n- [ ] Feature2, tests, (and when applicable, API doc)\r\n\r\n## Comments ##\r\n- If this change is a backward incompatible change, why must this change be made.\r\n- Interesting edge cases to note here\r\n","created_at":"2018-04-11T19:50:36Z","updated_at":"2018-04-12T17:56:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0574f197de96346369d6d9d7c7658ae5372001d3","assignee":null,"assignees":[],"requested_reviewers":[{"login":"szha","id":2626883,"avatar_url":"https://avatars2.githubusercontent.com/u/2626883?v=4","gravatar_id":"","url":"https://api.github.com/users/szha","html_url":"https://github.com/szha","followers_url":"https://api.github.com/users/szha/followers","following_url":"https://api.github.com/users/szha/following{/other_user}","gists_url":"https://api.github.com/users/szha/gists{/gist_id}","starred_url":"https://api.github.com/users/szha/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/szha/subscriptions","organizations_url":"https://api.github.com/users/szha/orgs","repos_url":"https://api.github.com/users/szha/repos","events_url":"https://api.github.com/users/szha/events{/privacy}","received_events_url":"https://api.github.com/users/szha/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/apache/incubator-mxnet/pulls/10511/commits","review_comments_url":"https://api.github.com/repos/apache/incubator-mxnet/pulls/10511/comments","review_comment_url":"https://api.github.com/repos/apache/incubator-mxnet/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/incubator-mxnet/issues/10511/comments","statuses_url":"https://api.github.com/repos/apache/incubator-mxnet/statuses/eacac76eff3e5e3d200b771422eadf6f1a2af08e","head":{"label":"piiswrong:msg","ref":"msg","sha":"eacac76eff3e5e3d200b771422eadf6f1a2af08e","user":{"login":"piiswrong","id":568948,"avatar_url":"https://avatars0.githubusercontent.com/u/568948?v=4","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},"repo":{"id":44707337,"name":"mxnet","full_name":"piiswrong/mxnet","owner":{"login":"piiswrong","id":568948,"avatar_url":"https://avatars0.githubusercontent.com/u/568948?v=4","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},"private":false,"html_url":"https://github.com/piiswrong/mxnet","description":"Efficient and Flexible Distributed Deep Learning Framework, for python, R, Julia and more","fork":true,"url":"https://api.github.com/repos/piiswrong/mxnet","forks_url":"https://api.github.com/repos/piiswrong/mxnet/forks","keys_url":"https://api.github.com/repos/piiswrong/mxnet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/piiswrong/mxnet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/piiswrong/mxnet/teams","hooks_url":"https://api.github.com/repos/piiswrong/mxnet/hooks","issue_events_url":"https://api.github.com/repos/piiswrong/mxnet/issues/events{/number}","events_url":"https://api.github.com/repos/piiswrong/mxnet/events","assignees_url":"https://api.github.com/repos/piiswrong/mxnet/assignees{/user}","branches_url":"https://api.github.com/repos/piiswrong/mxnet/branches{/branch}","tags_url":"https://api.github.com/repos/piiswrong/mxnet/tags","blobs_url":"https://api.github.com/repos/piiswrong/mxnet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/piiswrong/mxnet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/piiswrong/mxnet/git/refs{/sha}","trees_url":"https://api.github.com/repos/piiswrong/mxnet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/piiswrong/mxnet/statuses/{sha}","languages_url":"https://api.github.com/repos/piiswrong/mxnet/languages","stargazers_url":"https://api.github.com/repos/piiswrong/mxnet/stargazers","contributors_url":"https://api.github.com/repos/piiswrong/mxnet/contributors","subscribers_url":"https://api.github.com/repos/piiswrong/mxnet/subscribers","subscription_url":"https://api.github.com/repos/piiswrong/mxnet/subscription","commits_url":"https://api.github.com/repos/piiswrong/mxnet/commits{/sha}","git_commits_url":"https://api.github.com/repos/piiswrong/mxnet/git/commits{/sha}","comments_url":"https://api.github.com/repos/piiswrong/mxnet/comments{/number}","issue_comment_url":"https://api.github.com/repos/piiswrong/mxnet/issues/comments{/number}","contents_url":"https://api.github.com/repos/piiswrong/mxnet/contents/{+path}","compare_url":"https://api.github.com/repos/piiswrong/mxnet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/piiswrong/mxnet/merges","archive_url":"https://api.github.com/repos/piiswrong/mxnet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/piiswrong/mxnet/downloads","issues_url":"https://api.github.com/repos/piiswrong/mxnet/issues{/number}","pulls_url":"https://api.github.com/repos/piiswrong/mxnet/pulls{/number}","milestones_url":"https://api.github.com/repos/piiswrong/mxnet/milestones{/number}","notifications_url":"https://api.github.com/repos/piiswrong/mxnet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/piiswrong/mxnet/labels{/name}","releases_url":"https://api.github.com/repos/piiswrong/mxnet/releases{/id}","deployments_url":"https://api.github.com/repos/piiswrong/mxnet/deployments","created_at":"2015-10-21T22:07:57Z","updated_at":"2017-11-23T06:32:51Z","pushed_at":"2018-04-12T01:05:35Z","git_url":"git://github.com/piiswrong/mxnet.git","ssh_url":"git@github.com:piiswrong/mxnet.git","clone_url":"https://github.com/piiswrong/mxnet.git","svn_url":"https://github.com/piiswrong/mxnet","homepage":"http://mxnet.rtfd.org","size":35542,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"apache:master","ref":"master","sha":"56649e66c8c7d21e5387719ecf112c3ced1e127e","user":{"login":"apache","id":47359,"avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":34864402,"name":"incubator-mxnet","full_name":"apache/incubator-mxnet","owner":{"login":"apache","id":47359,"avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apache/incubator-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/apache/incubator-mxnet","forks_url":"https://api.github.com/repos/apache/incubator-mxnet/forks","keys_url":"https://api.github.com/repos/apache/incubator-mxnet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/incubator-mxnet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/incubator-mxnet/teams","hooks_url":"https://api.github.com/repos/apache/incubator-mxnet/hooks","issue_events_url":"https://api.github.com/repos/apache/incubator-mxnet/issues/events{/number}","events_url":"https://api.github.com/repos/apache/incubator-mxnet/events","assignees_url":"https://api.github.com/repos/apache/incubator-mxnet/assignees{/user}","branches_url":"https://api.github.com/repos/apache/incubator-mxnet/branches{/branch}","tags_url":"https://api.github.com/repos/apache/incubator-mxnet/tags","blobs_url":"https://api.github.com/repos/apache/incubator-mxnet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/incubator-mxnet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/incubator-mxnet/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/incubator-mxnet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/incubator-mxnet/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/incubator-mxnet/languages","stargazers_url":"https://api.github.com/repos/apache/incubator-mxnet/stargazers","contributors_url":"https://api.github.com/repos/apache/incubator-mxnet/contributors","subscribers_url":"https://api.github.com/repos/apache/incubator-mxnet/subscribers","subscription_url":"https://api.github.com/repos/apache/incubator-mxnet/subscription","commits_url":"https://api.github.com/repos/apache/incubator-mxnet/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/incubator-mxnet/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/incubator-mxnet/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/incubator-mxnet/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/incubator-mxnet/contents/{+path}","compare_url":"https://api.github.com/repos/apache/incubator-mxnet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/incubator-mxnet/merges","archive_url":"https://api.github.com/repos/apache/incubator-mxnet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/incubator-mxnet/downloads","issues_url":"https://api.github.com/repos/apache/incubator-mxnet/issues{/number}","pulls_url":"https://api.github.com/repos/apache/incubator-mxnet/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/incubator-mxnet/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/incubator-mxnet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/incubator-mxnet/labels{/name}","releases_url":"https://api.github.com/repos/apache/incubator-mxnet/releases{/id}","deployments_url":"https://api.github.com/repos/apache/incubator-mxnet/deployments","created_at":"2015-04-30T16:21:15Z","updated_at":"2018-04-12T17:45:59Z","pushed_at":"2018-04-12T17:50:03Z","git_url":"git://github.com/apache/incubator-mxnet.git","ssh_url":"git@github.com:apache/incubator-mxnet.git","clone_url":"https://github.com/apache/incubator-mxnet.git","svn_url":"https://github.com/apache/incubator-mxnet","homepage":"http://mxnet.io","size":35066,"stargazers_count":13657,"watchers_count":13657,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":5049,"mirror_url":null,"archived":false,"open_issues_count":834,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":5049,"open_issues":834,"watchers":13657,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/incubator-mxnet/pulls/10511"},"html":{"href":"https://github.com/apache/incubator-mxnet/pull/10511"},"issue":{"href":"https://api.github.com/repos/apache/incubator-mxnet/issues/10511"},"comments":{"href":"https://api.github.com/repos/apache/incubator-mxnet/issues/10511/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/incubator-mxnet/pulls/10511/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/incubator-mxnet/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/incubator-mxnet/pulls/10511/commits"},"statuses":{"href":"https://api.github.com/repos/apache/incubator-mxnet/statuses/eacac76eff3e5e3d200b771422eadf6f1a2af08e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"aaronmarkham"}}