{"action":"created","comment":{"url":"https://api.github.com/repos/pfnet/chainer/pulls/comments/87541695","pull_request_review_id":7944314,"id":87541695,"diff_hunk":"@@ -0,0 +1,447 @@\n+from __future__ import print_function\n+from collections import OrderedDict\n+import os\n+\n+import numpy\n+try:\n+    from PIL import Image\n+    available = True\n+except ImportError as e:\n+    available = False\n+    _import_error = e\n+\n+from chainer.dataset.convert import concat_examples\n+from chainer.dataset import download\n+from chainer.functions.activation.relu import relu\n+from chainer.functions.activation.softmax import softmax\n+from chainer.functions.array.reshape import reshape\n+from chainer.functions.math.sum import sum\n+from chainer.functions.pooling.average_pooling_2d import average_pooling_2d\n+from chainer.functions.pooling.max_pooling_2d import max_pooling_2d\n+from chainer.initializers import constant\n+from chainer import link\n+from chainer.links.connection.convolution_2d import Convolution2D\n+from chainer.links.connection.linear import Linear\n+from chainer.links.normalization.batch_normalization import BatchNormalization\n+from chainer.serializers import npz\n+from chainer.utils import imgproc\n+from chainer.variable import Variable\n+\n+\n+class ResNet50Layers(link.Chain):\n+\n+    \"\"\"A pre-trained CNN model with 50 layers provided by MSRA [1].\n+\n+    When you specify the path of the pre-trained chainer model serialized as\n+    a ``.npz`` file in the constructor, this chain model automatically\n+    initializes all the parameters with it.\n+    This model would be useful when you want to extract a semantic feature\n+    vector from given images, or fine-tune the model on a different dataset.\n+    Note that unlike ``VGG16Layers``, it does not automatically download a\n+    pre-trained caffemodel. This caffemodel can be downloaded at\n+    `GitHub <https://github.com/KaimingHe/deep-residual-networks>`_.\n+\n+    If you want to manually convert the pre-trained caffemodel to a chainer\n+    model that can be spesified in the constractor,\n+    please use ``convert_caffemodel_to_npz`` classmethod instead.\n+\n+    .. [1] K. He et. al., `Deep Residual Learning for Image Recognition\n+        <http://arxiv.org/abs/1512.03385>`_\n+\n+    Args:\n+        pretrained_model (str): the destination of the pre-trained\n+            chainer model serialized as a ``.npz`` file.\n+            If this argument is specified as ``auto``,\n+            it automatically loads and converts the caffemodel from\n+            ``$CHAINER_DATASET_ROOT/pfnet/chainer/models/ResNet-50-model.caffemodel``,\n+            where ``$CHAINER_DATASET_ROOT`` is set as\n+            ``$HOME/.chainer/dataset`` unless you specify another value\n+            as an environment variable. Note that in this case the converted\n+            chainer model is stored on the same directory and automatically\n+            used from the second time.\n+            If the argument is specfied as ``None``, all the parameters\n+            are not initialized by the pre-trained model, but the default\n+            initializer used in the original paper.\n+\n+    Attributes:\n+        available_layers (list of str): The list of available layer names\n+            used by ``__call__`` and ``extract`` methods.\n+\n+    \"\"\"\n+\n+    def __init__(self, pretrained_model='auto'):\n+        if pretrained_model is not None:\n+            # As a sampling process is time-consuming,\n+            # we employ a zero initializer for faster computation.\n+            kwargs = {'initialW': constant.Zero()}\n+        else:\n+            # employ default initializers used in the original paper\n+            kwargs = {'initialW': None}\n+        super(ResNet50Layers, self).__init__(\n+            conv1=Convolution2D(3, 64, 7, 2, 3, **kwargs),\n+            bn1=BatchNormalization(64),\n+            res2=BuildingBlock(3, 64, 64, 256, 1, **kwargs),\n+            res3=BuildingBlock(4, 256, 128, 512, 2, **kwargs),\n+            res4=BuildingBlock(6, 512, 256, 1024, 2, **kwargs),\n+            res5=BuildingBlock(3, 1024, 512, 2048, 2, **kwargs),\n+            fc6=Linear(2048, 1000),\n+        )\n+        if pretrained_model == 'auto':\n+            _retrieve(\n+                'ResNet-50-model.npz', 'ResNet-50-model.caffemodel', self)\n+        elif pretrained_model is not None:\n+            npz.load_npz(pretrained_model, self)\n+        self.functions = OrderedDict([\n+            ('conv1', [self.conv1, self.bn1, relu]),\n+            ('pool1', [lambda x: max_pooling_2d(x, ksize=3, stride=2)]),\n+            ('res2', [self.res2]),\n+            ('res3', [self.res3]),\n+            ('res4', [self.res4]),\n+            ('res5', [self.res5]),\n+            ('pool5', [_global_average_pooling_2d]),\n+            ('fc6', [self.fc6]),\n+            ('prob', [softmax]),\n+        ])\n+\n+    @property\n+    def available_layers(self):\n+        return list(self.functions.keys())\n+\n+    @classmethod\n+    def convert_caffemodel_to_npz(cls, path_caffemodel, path_npz):\n+        \"\"\"Converts a pre-trained caffemodel to a chainer model.\n+\n+        Args:\n+            path_caffemodel (str): Path of the pre-trained caffemodel.\n+            path_npz (str): Path of the converted chainer model.\n+        \"\"\"\n+\n+        # As CaffeFunction uses shortcut symbols,\n+        # we import CaffeFunction here.\n+        from chainer.links.caffe.caffe_function import CaffeFunction\n+        caffemodel = CaffeFunction(path_caffemodel)\n+        chainermodel = cls(pretrained_model=None)\n+        _transfer_resnet50(caffemodel, chainermodel)\n+        npz.save_npz(path_npz, chainermodel, compression=False)\n+\n+    def __call__(self, x, layers=['prob'], test=True):\n+        \"\"\"Computes all the feature maps specified by ``layers``.\n+\n+        Args:\n+            x (~chainer.Variable): Input variable.\n+            layers (list of str): The list of layernames you want to extract.\n+            test (bool): If ``True``, it runs in test mode.\n+\n+        Returns:\n+            Dictionary of ~chainer.Variable: The directory in which\n+            the key contains the layer name and the value contains\n+            the corresponding variable.\n+\n+        \"\"\"\n+\n+        h = x\n+        activations = {}\n+        target_layers = set(layers)\n+        for key, funcs in self.functions.items():\n+            if len(target_layers) == 0:\n+                break\n+            for func in funcs:\n+                if isinstance(func, BatchNormalization) or \\\n+                        isinstance(func, BuildingBlock):\n+                    h = func(h, test=test)\n+                else:\n+                    h = func(h)\n+            if key in target_layers:\n+                activations[key] = h\n+                target_layers.remove(key)\n+        return activations\n+\n+    def extract(self, images, layers=['pool5'], size=(224, 224), test=True):\n+        \"\"\"Extracts all the feature maps of given images.\n+\n+        The difference of directly executing ``__call__`` is that\n+        it directly accepts images as an input and automatically\n+        transforms them to a proper variable. That is,\n+        it is also interpreted as a shortcut method that implicitly call\n+        ``prepare`` and ``__call__`` functions.\n+\n+        Args:\n+            image (iterable of PIL.Image or numpy.ndarray): Input images.\n+            layers (list of str): The list of layernames you want to extract.\n+            size (pair of ints): The resolution of resized images used as\n+                an input of CNN. All the given images are not resized\n+                if this argument is ``None``, but the resolutions of\n+                all the images should be the same.\n+            test (bool): If ``True``, it runs in test mode.\n+\n+        Returns:\n+            Dictionary of ~chainer.Variable: The directory in which","path":"chainer/links/model/vision/resnet.py","position":178,"original_position":178,"commit_id":"ea449a2f42c3003f97d4a75364d8f894d4980670","original_commit_id":"ea449a2f42c3003f97d4a75364d8f894d4980670","user":{"login":"zori","id":583139,"avatar_url":"https://avatars.githubusercontent.com/u/583139?v=3","gravatar_id":"","url":"https://api.github.com/users/zori","html_url":"https://github.com/zori","followers_url":"https://api.github.com/users/zori/followers","following_url":"https://api.github.com/users/zori/following{/other_user}","gists_url":"https://api.github.com/users/zori/gists{/gist_id}","starred_url":"https://api.github.com/users/zori/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zori/subscriptions","organizations_url":"https://api.github.com/users/zori/orgs","repos_url":"https://api.github.com/users/zori/repos","events_url":"https://api.github.com/users/zori/events{/privacy}","received_events_url":"https://api.github.com/users/zori/received_events","type":"User","site_admin":false},"body":"ditto\r\nThe directory -> A dictionary","created_at":"2016-11-11T06:08:39Z","updated_at":"2016-11-11T06:45:44Z","html_url":"https://github.com/pfnet/chainer/pull/1677#discussion_r87541695","pull_request_url":"https://api.github.com/repos/pfnet/chainer/pulls/1677","_links":{"self":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/comments/87541695"},"html":{"href":"https://github.com/pfnet/chainer/pull/1677#discussion_r87541695"},"pull_request":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/1677"}}},"pull_request":{"url":"https://api.github.com/repos/pfnet/chainer/pulls/1677","id":86109978,"html_url":"https://github.com/pfnet/chainer/pull/1677","diff_url":"https://github.com/pfnet/chainer/pull/1677.diff","patch_url":"https://github.com/pfnet/chainer/pull/1677.patch","issue_url":"https://api.github.com/repos/pfnet/chainer/issues/1677","number":1677,"state":"open","locked":false,"title":"Add VGG16Layers and ResNet50Layers that automatically load pre-trained caffemodels","user":{"login":"rezoo","id":212315,"avatar_url":"https://avatars.githubusercontent.com/u/212315?v=3","gravatar_id":"","url":"https://api.github.com/users/rezoo","html_url":"https://github.com/rezoo","followers_url":"https://api.github.com/users/rezoo/followers","following_url":"https://api.github.com/users/rezoo/following{/other_user}","gists_url":"https://api.github.com/users/rezoo/gists{/gist_id}","starred_url":"https://api.github.com/users/rezoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rezoo/subscriptions","organizations_url":"https://api.github.com/users/rezoo/orgs","repos_url":"https://api.github.com/users/rezoo/repos","events_url":"https://api.github.com/users/rezoo/events{/privacy}","received_events_url":"https://api.github.com/users/rezoo/received_events","type":"User","site_admin":false},"body":"In the field of computer vision, many researchers use VGG16layers model as a feature extractor.\nThis model aims to easily extract the feature vectors from given images on chainer like that:\n\n``` python\nfrom chainer.links import VGG16Layers\nfrom PIL import Image\n\nmodel = VGG16Layers()\nimg = Image.open(\"path/to/image.jpg\")\nfeature = model.extract([img], layers=[\"fc7\"])[\"fc7\"]\n```\n## Updates (2016/09/29)\n- I added the ResNet50Layers that automatically loads a pre-trained model. The usage is the same as that of VGG16Layers. I implemented this based on [chainer-ResNet](https://github.com/yasunorikudo/chainer-ResNet). Thank you, @yasunorikudo!\n\n``` python\nfrom chainer.links import ResNet50Layers\nfrom PIL import Image\n\nmodel = ResNet50Layers()\nimg = Image.open(\"path/to/image.jpg\")\nfeature = model.extract([img], layers=[\"pool5\"])[\"pool5\"]\n```\n","created_at":"2016-09-21T07:22:40Z","updated_at":"2016-11-11T06:45:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"04214e0e848252c159e510160fbc752554020fc9","assignee":{"login":"zori","id":583139,"avatar_url":"https://avatars.githubusercontent.com/u/583139?v=3","gravatar_id":"","url":"https://api.github.com/users/zori","html_url":"https://github.com/zori","followers_url":"https://api.github.com/users/zori/followers","following_url":"https://api.github.com/users/zori/following{/other_user}","gists_url":"https://api.github.com/users/zori/gists{/gist_id}","starred_url":"https://api.github.com/users/zori/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zori/subscriptions","organizations_url":"https://api.github.com/users/zori/orgs","repos_url":"https://api.github.com/users/zori/repos","events_url":"https://api.github.com/users/zori/events{/privacy}","received_events_url":"https://api.github.com/users/zori/received_events","type":"User","site_admin":false},"assignees":[{"login":"zori","id":583139,"avatar_url":"https://avatars.githubusercontent.com/u/583139?v=3","gravatar_id":"","url":"https://api.github.com/users/zori","html_url":"https://github.com/zori","followers_url":"https://api.github.com/users/zori/followers","following_url":"https://api.github.com/users/zori/following{/other_user}","gists_url":"https://api.github.com/users/zori/gists{/gist_id}","starred_url":"https://api.github.com/users/zori/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zori/subscriptions","organizations_url":"https://api.github.com/users/zori/orgs","repos_url":"https://api.github.com/users/zori/repos","events_url":"https://api.github.com/users/zori/events{/privacy}","received_events_url":"https://api.github.com/users/zori/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/pfnet/chainer/pulls/1677/commits","review_comments_url":"https://api.github.com/repos/pfnet/chainer/pulls/1677/comments","review_comment_url":"https://api.github.com/repos/pfnet/chainer/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pfnet/chainer/issues/1677/comments","statuses_url":"https://api.github.com/repos/pfnet/chainer/statuses/ea449a2f42c3003f97d4a75364d8f894d4980670","head":{"label":"rezoo:pretrained_models","ref":"pretrained_models","sha":"ea449a2f42c3003f97d4a75364d8f894d4980670","user":{"login":"rezoo","id":212315,"avatar_url":"https://avatars.githubusercontent.com/u/212315?v=3","gravatar_id":"","url":"https://api.github.com/users/rezoo","html_url":"https://github.com/rezoo","followers_url":"https://api.github.com/users/rezoo/followers","following_url":"https://api.github.com/users/rezoo/following{/other_user}","gists_url":"https://api.github.com/users/rezoo/gists{/gist_id}","starred_url":"https://api.github.com/users/rezoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rezoo/subscriptions","organizations_url":"https://api.github.com/users/rezoo/orgs","repos_url":"https://api.github.com/users/rezoo/repos","events_url":"https://api.github.com/users/rezoo/events{/privacy}","received_events_url":"https://api.github.com/users/rezoo/received_events","type":"User","site_admin":false},"repo":{"id":37520833,"name":"chainer","full_name":"rezoo/chainer","owner":{"login":"rezoo","id":212315,"avatar_url":"https://avatars.githubusercontent.com/u/212315?v=3","gravatar_id":"","url":"https://api.github.com/users/rezoo","html_url":"https://github.com/rezoo","followers_url":"https://api.github.com/users/rezoo/followers","following_url":"https://api.github.com/users/rezoo/following{/other_user}","gists_url":"https://api.github.com/users/rezoo/gists{/gist_id}","starred_url":"https://api.github.com/users/rezoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rezoo/subscriptions","organizations_url":"https://api.github.com/users/rezoo/orgs","repos_url":"https://api.github.com/users/rezoo/repos","events_url":"https://api.github.com/users/rezoo/events{/privacy}","received_events_url":"https://api.github.com/users/rezoo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rezoo/chainer","description":"A flexible framework of neural networks for deep learning","fork":true,"url":"https://api.github.com/repos/rezoo/chainer","forks_url":"https://api.github.com/repos/rezoo/chainer/forks","keys_url":"https://api.github.com/repos/rezoo/chainer/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rezoo/chainer/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rezoo/chainer/teams","hooks_url":"https://api.github.com/repos/rezoo/chainer/hooks","issue_events_url":"https://api.github.com/repos/rezoo/chainer/issues/events{/number}","events_url":"https://api.github.com/repos/rezoo/chainer/events","assignees_url":"https://api.github.com/repos/rezoo/chainer/assignees{/user}","branches_url":"https://api.github.com/repos/rezoo/chainer/branches{/branch}","tags_url":"https://api.github.com/repos/rezoo/chainer/tags","blobs_url":"https://api.github.com/repos/rezoo/chainer/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rezoo/chainer/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rezoo/chainer/git/refs{/sha}","trees_url":"https://api.github.com/repos/rezoo/chainer/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rezoo/chainer/statuses/{sha}","languages_url":"https://api.github.com/repos/rezoo/chainer/languages","stargazers_url":"https://api.github.com/repos/rezoo/chainer/stargazers","contributors_url":"https://api.github.com/repos/rezoo/chainer/contributors","subscribers_url":"https://api.github.com/repos/rezoo/chainer/subscribers","subscription_url":"https://api.github.com/repos/rezoo/chainer/subscription","commits_url":"https://api.github.com/repos/rezoo/chainer/commits{/sha}","git_commits_url":"https://api.github.com/repos/rezoo/chainer/git/commits{/sha}","comments_url":"https://api.github.com/repos/rezoo/chainer/comments{/number}","issue_comment_url":"https://api.github.com/repos/rezoo/chainer/issues/comments{/number}","contents_url":"https://api.github.com/repos/rezoo/chainer/contents/{+path}","compare_url":"https://api.github.com/repos/rezoo/chainer/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rezoo/chainer/merges","archive_url":"https://api.github.com/repos/rezoo/chainer/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rezoo/chainer/downloads","issues_url":"https://api.github.com/repos/rezoo/chainer/issues{/number}","pulls_url":"https://api.github.com/repos/rezoo/chainer/pulls{/number}","milestones_url":"https://api.github.com/repos/rezoo/chainer/milestones{/number}","notifications_url":"https://api.github.com/repos/rezoo/chainer/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rezoo/chainer/labels{/name}","releases_url":"https://api.github.com/repos/rezoo/chainer/releases{/id}","deployments_url":"https://api.github.com/repos/rezoo/chainer/deployments","created_at":"2015-06-16T09:28:14Z","updated_at":"2016-01-28T11:59:28Z","pushed_at":"2016-10-21T04:50:20Z","git_url":"git://github.com/rezoo/chainer.git","ssh_url":"git@github.com:rezoo/chainer.git","clone_url":"https://github.com/rezoo/chainer.git","svn_url":"https://github.com/rezoo/chainer","homepage":"http://chainer.org","size":12757,"stargazers_count":0,"watchers_count":0,"language":"Python","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":"pfnet:master","ref":"master","sha":"8bc5170e368d543cbc0fb384948b68a822b3c8ae","user":{"login":"pfnet","id":9739572,"avatar_url":"https://avatars.githubusercontent.com/u/9739572?v=3","gravatar_id":"","url":"https://api.github.com/users/pfnet","html_url":"https://github.com/pfnet","followers_url":"https://api.github.com/users/pfnet/followers","following_url":"https://api.github.com/users/pfnet/following{/other_user}","gists_url":"https://api.github.com/users/pfnet/gists{/gist_id}","starred_url":"https://api.github.com/users/pfnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pfnet/subscriptions","organizations_url":"https://api.github.com/users/pfnet/orgs","repos_url":"https://api.github.com/users/pfnet/repos","events_url":"https://api.github.com/users/pfnet/events{/privacy}","received_events_url":"https://api.github.com/users/pfnet/received_events","type":"Organization","site_admin":false},"repo":{"id":36914478,"name":"chainer","full_name":"pfnet/chainer","owner":{"login":"pfnet","id":9739572,"avatar_url":"https://avatars.githubusercontent.com/u/9739572?v=3","gravatar_id":"","url":"https://api.github.com/users/pfnet","html_url":"https://github.com/pfnet","followers_url":"https://api.github.com/users/pfnet/followers","following_url":"https://api.github.com/users/pfnet/following{/other_user}","gists_url":"https://api.github.com/users/pfnet/gists{/gist_id}","starred_url":"https://api.github.com/users/pfnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pfnet/subscriptions","organizations_url":"https://api.github.com/users/pfnet/orgs","repos_url":"https://api.github.com/users/pfnet/repos","events_url":"https://api.github.com/users/pfnet/events{/privacy}","received_events_url":"https://api.github.com/users/pfnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pfnet/chainer","description":"A flexible framework of neural networks for deep learning","fork":false,"url":"https://api.github.com/repos/pfnet/chainer","forks_url":"https://api.github.com/repos/pfnet/chainer/forks","keys_url":"https://api.github.com/repos/pfnet/chainer/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pfnet/chainer/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pfnet/chainer/teams","hooks_url":"https://api.github.com/repos/pfnet/chainer/hooks","issue_events_url":"https://api.github.com/repos/pfnet/chainer/issues/events{/number}","events_url":"https://api.github.com/repos/pfnet/chainer/events","assignees_url":"https://api.github.com/repos/pfnet/chainer/assignees{/user}","branches_url":"https://api.github.com/repos/pfnet/chainer/branches{/branch}","tags_url":"https://api.github.com/repos/pfnet/chainer/tags","blobs_url":"https://api.github.com/repos/pfnet/chainer/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pfnet/chainer/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pfnet/chainer/git/refs{/sha}","trees_url":"https://api.github.com/repos/pfnet/chainer/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pfnet/chainer/statuses/{sha}","languages_url":"https://api.github.com/repos/pfnet/chainer/languages","stargazers_url":"https://api.github.com/repos/pfnet/chainer/stargazers","contributors_url":"https://api.github.com/repos/pfnet/chainer/contributors","subscribers_url":"https://api.github.com/repos/pfnet/chainer/subscribers","subscription_url":"https://api.github.com/repos/pfnet/chainer/subscription","commits_url":"https://api.github.com/repos/pfnet/chainer/commits{/sha}","git_commits_url":"https://api.github.com/repos/pfnet/chainer/git/commits{/sha}","comments_url":"https://api.github.com/repos/pfnet/chainer/comments{/number}","issue_comment_url":"https://api.github.com/repos/pfnet/chainer/issues/comments{/number}","contents_url":"https://api.github.com/repos/pfnet/chainer/contents/{+path}","compare_url":"https://api.github.com/repos/pfnet/chainer/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pfnet/chainer/merges","archive_url":"https://api.github.com/repos/pfnet/chainer/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pfnet/chainer/downloads","issues_url":"https://api.github.com/repos/pfnet/chainer/issues{/number}","pulls_url":"https://api.github.com/repos/pfnet/chainer/pulls{/number}","milestones_url":"https://api.github.com/repos/pfnet/chainer/milestones{/number}","notifications_url":"https://api.github.com/repos/pfnet/chainer/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pfnet/chainer/labels{/name}","releases_url":"https://api.github.com/repos/pfnet/chainer/releases{/id}","deployments_url":"https://api.github.com/repos/pfnet/chainer/deployments","created_at":"2015-06-05T05:50:37Z","updated_at":"2016-11-11T01:34:01Z","pushed_at":"2016-11-11T05:06:31Z","git_url":"git://github.com/pfnet/chainer.git","ssh_url":"git@github.com:pfnet/chainer.git","clone_url":"https://github.com/pfnet/chainer.git","svn_url":"https://github.com/pfnet/chainer","homepage":"http://chainer.org","size":33468,"stargazers_count":1770,"watchers_count":1770,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":453,"mirror_url":null,"open_issues_count":244,"forks":453,"open_issues":244,"watchers":1770,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/1677"},"html":{"href":"https://github.com/pfnet/chainer/pull/1677"},"issue":{"href":"https://api.github.com/repos/pfnet/chainer/issues/1677"},"comments":{"href":"https://api.github.com/repos/pfnet/chainer/issues/1677/comments"},"review_comments":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/1677/comments"},"review_comment":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/1677/commits"},"statuses":{"href":"https://api.github.com/repos/pfnet/chainer/statuses/ea449a2f42c3003f97d4a75364d8f894d4980670"}}}}
{"actor":{"display_login":"zori"}}