{"action":"created","comment":{"url":"https://api.github.com/repos/fchollet/keras/pulls/comments/53251112","id":53251112,"diff_hunk":"@@ -343,6 +343,194 @@ def get_config(self):\n         return dict(list(base_config.items()) + list(config.items()))\n \n \n+class Convolution3D(Layer):\n+    '''Convolution operator for filtering windows of three-dimensional inputs.\n+    When using this layer as the first layer in a model,\n+    provide the keyword argument `input_shape`\n+    (tuple of integers, does not include the sample axis),\n+    e.g. `input_shape=(3, 10, 128, 128)` for 10 frames of 128x128 RGB pictures.\n+\n+    Note: this layer will only work with Theano for the time being.\n+\n+    # Input shape\n+        5D tensor with shape:\n+        `(samples, channels, len_conv_dim1, len_conv_dim2, len_conv_dim3)` if dim_ordering='th'\n+        or 5D tensor with shape:\n+        `(samples, len_conv_dim1, len_conv_dim2, len_conv_dim3, channels)` if dim_ordering='tf'.\n+    # Output shape\n+        5D tensor with shape:\n+        `(samples, nb_filter, len_new_dim1, len_new_dim2, len_new_dim3)` if dim_ordering='th'\n+        or 5D tensor with shape:\n+        `(samples, len_new_dim1, len_new_dim2, len_new_dim3, nb_filter)` if dim_ordering='tf'.\n+        `len_new_dim1`, `len_new_dim2` and `len_new_dim3` values might have changed due to padding.\n+    # Arguments\n+        nb_filter: Number of convolution filters to use.\n+        len_conv_dim1: Length of the first dimension in the covolution kernel.\n+        len_conv_dim2: Length of the second dimension in the convolution kernel.\n+        len_conv_dim3: Length of the third dimension in the convolution kernel.\n+        init: name of initialization function for the weights of the layer\n+            (see [initializations](../initializations.md)), or alternatively,\n+            Theano function to use for weights initialization.\n+            This parameter is only relevant if you don't pass\n+            a `weights` argument.\n+        activation: name of activation function to use\n+            (see [activations](../activations.md)),\n+            or alternatively, elementwise Theano function.\n+            If you don't specify anything, no activation is applied\n+            (ie. \"linear\" activation: a(x) = x).\n+        weights: list of numpy arrays to set as initial weights.\n+        border_mode: 'valid' or 'same'.\n+        subsample: tuple of length 3. Factor by which to subsample output.\n+            Also called strides elsewhere.\n+            Note: 'subsample' is implemented by slicing the output of conv3d with strides=(1,1,1).\n+        W_regularizer: instance of [WeightRegularizer](../regularizers.md)\n+            (eg. L1 or L2 regularization), applied to the main weights matrix.\n+        b_regularizer: instance of [WeightRegularizer](../regularizers.md),\n+            applied to the bias.\n+        activity_regularizer: instance of [ActivityRegularizer](../regularizers.md),\n+            applied to the network output.\n+        W_constraint: instance of the [constraints](../constraints.md) module\n+            (eg. maxnorm, nonneg), applied to the main weights matrix.\n+        b_constraint: instance of the [constraints](../constraints.md) module,\n+            applied to the bias.\n+        dim_ordering: 'th' or 'tf'. In 'th' mode, the channels dimension\n+            (the depth) is at index 1, in 'tf' mode is it at index 4.\n+    '''\n+    input_ndim = 5\n+\n+    def __init__(self, nb_filter, len_conv_dim1, len_conv_dim2, len_conv_dim3,\n+                 init='glorot_uniform', activation='linear', weights=None,\n+                 border_mode='valid', subsample=(1, 1, 1), dim_ordering='th',\n+                 W_regularizer=None, b_regularizer=None, activity_regularizer=None,\n+                 W_constraint=None, b_constraint=None, **kwargs):\n+        if K._BACKEND != 'theano':\n+            raise Exception(self.__class__.__name__ +\n+                            ' is currently only working with Theano backend.')\n+        if border_mode not in {'valid', 'same'}:\n+            raise Exception('Invalid border mode for Convolution3D:', border_mode)\n+        self.nb_filter = nb_filter\n+        self.len_conv_dim1 = len_conv_dim1\n+        self.len_conv_dim2 = len_conv_dim2\n+        self.len_conv_dim3 = len_conv_dim3\n+        self.init = initializations.get(init)\n+        self.activation = activations.get(activation)\n+        assert border_mode in {'valid', 'same'}, 'border_mode must be in {valid, same}'\n+        self.border_mode = border_mode\n+        self.subsample = tuple(subsample)\n+        assert dim_ordering in {'tf', 'th'}, 'dim_ordering must be in {tf, th}'\n+        self.dim_ordering = dim_ordering\n+\n+        self.W_regularizer = regularizers.get(W_regularizer)\n+        self.b_regularizer = regularizers.get(b_regularizer)\n+        self.activity_regularizer = regularizers.get(activity_regularizer)\n+\n+        self.W_constraint = constraints.get(W_constraint)\n+        self.b_constraint = constraints.get(b_constraint)\n+        self.constraints = [self.W_constraint, self.b_constraint]\n+\n+        self.initial_weights = weights\n+        self.input = K.placeholder(ndim=5)\n+        super(Convolution3D, self).__init__(**kwargs)\n+\n+    def build(self):\n+\n+        if self.dim_ordering == 'th':\n+            stack_size = self.input_shape[1]\n+            self.W_shape = (self.nb_filter, stack_size,\n+                            self.len_conv_dim1, self.len_conv_dim2, self.len_conv_dim3)\n+        elif self.dim_ordering == 'tf':\n+            stack_size = self.input_shape[4]\n+            self.W_shape = (self.len_conv_dim1, self.len_conv_dim2, self.len_conv_dim3,\n+                            stack_size, self.nb_filter)\n+        else:\n+            raise Exception('Invalid dim_ordering: ' + self.dim_ordering)\n+\n+        self.W = self.init(self.W_shape)\n+        self.b = K.zeros((self.nb_filter,))\n+        self.trainable_weights = [self.W, self.b]\n+        self.regularizers = []\n+\n+        if self.W_regularizer:\n+            self.W_regularizer.set_param(self.W)\n+            self.regularizers.append(self.W_regularizer)\n+\n+        if self.b_regularizer:\n+            self.b_regularizer.set_param(self.b)\n+            self.regularizers.append(self.b_regularizer)\n+\n+        if self.activity_regularizer:\n+            self.activity_regularizer.set_layer(self)\n+            self.regularizers.append(self.activity_regularizer)\n+\n+        if self.initial_weights is not None:\n+            self.set_weights(self.initial_weights)\n+            del self.initial_weights\n+\n+    @property\n+    def output_shape(self):\n+        input_shape = self.input_shape\n+        if self.dim_ordering == 'th':\n+            conv_dim1 = input_shape[2]\n+            conv_dim2 = input_shape[3]\n+            conv_dim3 = input_shape[4]\n+        elif self.dim_ordering == 'tf':\n+            conv_dim1 = input_shape[1]\n+            conv_dim2 = input_shape[2]\n+            conv_dim3 = input_shape[3]\n+        else:\n+            raise Exception('Invalid dim_ordering: ' + self.dim_ordering)\n+\n+        conv_dim1 = conv_output_length(conv_dim1, self.len_conv_dim1,\n+                                       self.border_mode, self.subsample[0])\n+        conv_dim2 = conv_output_length(conv_dim2, self.len_conv_dim3,","path":"keras/layers/convolutional.py","position":143,"original_position":143,"commit_id":"b62b67f8f5ba4a9f373ab60f244c8040c2333669","original_commit_id":"b62b67f8f5ba4a9f373ab60f244c8040c2333669","user":{"login":"jruales","id":1588988,"avatar_url":"https://avatars.githubusercontent.com/u/1588988?v=3","gravatar_id":"","url":"https://api.github.com/users/jruales","html_url":"https://github.com/jruales","followers_url":"https://api.github.com/users/jruales/followers","following_url":"https://api.github.com/users/jruales/following{/other_user}","gists_url":"https://api.github.com/users/jruales/gists{/gist_id}","starred_url":"https://api.github.com/users/jruales/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jruales/subscriptions","organizations_url":"https://api.github.com/users/jruales/orgs","repos_url":"https://api.github.com/users/jruales/repos","events_url":"https://api.github.com/users/jruales/events{/privacy}","received_events_url":"https://api.github.com/users/jruales/received_events","type":"User","site_admin":false},"body":"Should be `self.len_conv_dim2` instead of `self.len_conv_dim3`.","created_at":"2016-02-17T23:43:43Z","updated_at":"2016-02-17T23:43:43Z","html_url":"https://github.com/fchollet/keras/pull/1623#discussion_r53251112","pull_request_url":"https://api.github.com/repos/fchollet/keras/pulls/1623","_links":{"self":{"href":"https://api.github.com/repos/fchollet/keras/pulls/comments/53251112"},"html":{"href":"https://github.com/fchollet/keras/pull/1623#discussion_r53251112"},"pull_request":{"href":"https://api.github.com/repos/fchollet/keras/pulls/1623"}}},"pull_request":{"url":"https://api.github.com/repos/fchollet/keras/pulls/1623","id":57988800,"html_url":"https://github.com/fchollet/keras/pull/1623","diff_url":"https://github.com/fchollet/keras/pull/1623.diff","patch_url":"https://github.com/fchollet/keras/pull/1623.patch","issue_url":"https://api.github.com/repos/fchollet/keras/issues/1623","number":1623,"state":"open","locked":false,"title":"Convolutional layers for 3D","user":{"login":"oeway","id":478667,"avatar_url":"https://avatars.githubusercontent.com/u/478667?v=3","gravatar_id":"","url":"https://api.github.com/users/oeway","html_url":"https://github.com/oeway","followers_url":"https://api.github.com/users/oeway/followers","following_url":"https://api.github.com/users/oeway/following{/other_user}","gists_url":"https://api.github.com/users/oeway/gists{/gist_id}","starred_url":"https://api.github.com/users/oeway/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oeway/subscriptions","organizations_url":"https://api.github.com/users/oeway/orgs","repos_url":"https://api.github.com/users/oeway/repos","events_url":"https://api.github.com/users/oeway/events{/privacy}","received_events_url":"https://api.github.com/users/oeway/received_events","type":"User","site_admin":false},"body":"This PR includes the following convolution layers:\r\n\r\n- Convolution3D\r\n- MaxPooling3D\r\n- AveragePooling3D\r\n- UpSampling3D\r\n- ZeroPadding3D\r\n\r\nAnd also the corresponding test functions for these layers.\r\n\r\nYou can use it like this:\r\nConvolution3D(nb_filters, nb_time, nb_row, nb_col)\r\nSee the convolution 3D example in examples/shapes_3d_cnn.py by @MinhazPalasara.\r\n\r\nThe shape of the underlaying 5D tensor:\r\n        `(samples, channels, time, rows, cols)` if dim_ordering='th'\r\n        `(samples, time, rows, cols, channels)` if dim_ordering='tf'.\r\n\r\nHere I used \"time\" for the case of movies, of course it can be depth of a 3D volume. I didn't use the notion \"depth\" because some people use \"depth\" to stand for filter or channel, the word \"depth\" sometimes appears in the docstring of Keras when it means channel.\r\n\r\nThe following functions are added into theano_backend.py:\r\n\r\n- conv3d\r\n- pool3d\r\n- resize_volumes\r\n- spatial_3d_padding\r\n\r\nBut notice that, currently, these layers won't work in tensorflow backend, due the fact that there is no convolution3d ops implemented in tensorflow. It would be great if anyone can implement it.\r\n\r\nDetails about convolutional 3D in theano:\r\n\r\n   There are two implementations available in theano, I used `conv3d2d.conv3d` for both GPU and CPU, because it's faster:\r\n\r\n * on CPU:\r\n```\r\n        *  conv3d2d.conv3d:    160 ms per loop\r\noutput:\r\n[  2.30778933   2.12729692  -3.06885958  -4.90572691  10.89875412\r\n   3.7447443   -4.60463953   8.3501606    3.69148254  -0.93439424]\r\n\r\n        *  nnet.conv3D: 1.19 s per loop\r\noutput:\r\n[  2.30778956   2.12729645  -3.0688591   -4.90572643  10.89875507\r\n   3.74474525  -4.60463953   8.35016346   3.69148254  -0.93439448]\r\n```\r\n * on GPU (k40):\r\n```\r\n        *  conv3d2d.conv3d:    36.2 ms per loop\r\noutput:\r\n[  2.30778933   2.12729692  -3.06885958  -4.90572691  10.89875412\r\n   3.7447443   -4.60463953   8.3501606    3.69148254  -0.93439424]\r\n\r\n       *  nnet.conv3D: 941 ms per loop\r\noutput:\r\n[  2.30778956   2.12729645  -3.0688591   -4.90572643  10.89875507\r\n   3.74474525  -4.60463953   8.35016346   3.69148254  -0.93439448]\r\n\r\n```\r\n\r\nNotice that there are precision differences with `conv3d2d.conv3d` on GPU and CPU. The testing code can be found in this discussion: https://groups.google.com/d/msg/theano-users/1S9_bZgHxVw/0cQR9a4riFUJ.\r\n\r\nAnother PR(#718) was created by @MinhazPalasara  but it's out dated. Many functions, the test example and test dataset in this PR are taken from #718, thanks @MinhazPalasara, @rbharath, @fchollet and others for improving that codes and giving suggestions.\r\n\r\nBe careful that, these codes are not tested restrictedly, please report bugs if you encountered any.\r\n","created_at":"2016-02-02T13:49:49Z","updated_at":"2016-02-17T23:43:43Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c7e18990b6fe939debeb0835148525ff8f8566b3","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/fchollet/keras/pulls/1623/commits","review_comments_url":"https://api.github.com/repos/fchollet/keras/pulls/1623/comments","review_comment_url":"https://api.github.com/repos/fchollet/keras/pulls/comments{/number}","comments_url":"https://api.github.com/repos/fchollet/keras/issues/1623/comments","statuses_url":"https://api.github.com/repos/fchollet/keras/statuses/b62b67f8f5ba4a9f373ab60f244c8040c2333669","head":{"label":"oeway:master","ref":"master","sha":"b62b67f8f5ba4a9f373ab60f244c8040c2333669","user":{"login":"oeway","id":478667,"avatar_url":"https://avatars.githubusercontent.com/u/478667?v=3","gravatar_id":"","url":"https://api.github.com/users/oeway","html_url":"https://github.com/oeway","followers_url":"https://api.github.com/users/oeway/followers","following_url":"https://api.github.com/users/oeway/following{/other_user}","gists_url":"https://api.github.com/users/oeway/gists{/gist_id}","starred_url":"https://api.github.com/users/oeway/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oeway/subscriptions","organizations_url":"https://api.github.com/users/oeway/orgs","repos_url":"https://api.github.com/users/oeway/repos","events_url":"https://api.github.com/users/oeway/events{/privacy}","received_events_url":"https://api.github.com/users/oeway/received_events","type":"User","site_admin":false},"repo":{"id":50852294,"name":"keras","full_name":"oeway/keras","owner":{"login":"oeway","id":478667,"avatar_url":"https://avatars.githubusercontent.com/u/478667?v=3","gravatar_id":"","url":"https://api.github.com/users/oeway","html_url":"https://github.com/oeway","followers_url":"https://api.github.com/users/oeway/followers","following_url":"https://api.github.com/users/oeway/following{/other_user}","gists_url":"https://api.github.com/users/oeway/gists{/gist_id}","starred_url":"https://api.github.com/users/oeway/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oeway/subscriptions","organizations_url":"https://api.github.com/users/oeway/orgs","repos_url":"https://api.github.com/users/oeway/repos","events_url":"https://api.github.com/users/oeway/events{/privacy}","received_events_url":"https://api.github.com/users/oeway/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/oeway/keras","description":"Deep Learning library for Python. Convnets, recurrent neural networks, and more. Runs on Theano and TensorFlow.","fork":true,"url":"https://api.github.com/repos/oeway/keras","forks_url":"https://api.github.com/repos/oeway/keras/forks","keys_url":"https://api.github.com/repos/oeway/keras/keys{/key_id}","collaborators_url":"https://api.github.com/repos/oeway/keras/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/oeway/keras/teams","hooks_url":"https://api.github.com/repos/oeway/keras/hooks","issue_events_url":"https://api.github.com/repos/oeway/keras/issues/events{/number}","events_url":"https://api.github.com/repos/oeway/keras/events","assignees_url":"https://api.github.com/repos/oeway/keras/assignees{/user}","branches_url":"https://api.github.com/repos/oeway/keras/branches{/branch}","tags_url":"https://api.github.com/repos/oeway/keras/tags","blobs_url":"https://api.github.com/repos/oeway/keras/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/oeway/keras/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/oeway/keras/git/refs{/sha}","trees_url":"https://api.github.com/repos/oeway/keras/git/trees{/sha}","statuses_url":"https://api.github.com/repos/oeway/keras/statuses/{sha}","languages_url":"https://api.github.com/repos/oeway/keras/languages","stargazers_url":"https://api.github.com/repos/oeway/keras/stargazers","contributors_url":"https://api.github.com/repos/oeway/keras/contributors","subscribers_url":"https://api.github.com/repos/oeway/keras/subscribers","subscription_url":"https://api.github.com/repos/oeway/keras/subscription","commits_url":"https://api.github.com/repos/oeway/keras/commits{/sha}","git_commits_url":"https://api.github.com/repos/oeway/keras/git/commits{/sha}","comments_url":"https://api.github.com/repos/oeway/keras/comments{/number}","issue_comment_url":"https://api.github.com/repos/oeway/keras/issues/comments{/number}","contents_url":"https://api.github.com/repos/oeway/keras/contents/{+path}","compare_url":"https://api.github.com/repos/oeway/keras/compare/{base}...{head}","merges_url":"https://api.github.com/repos/oeway/keras/merges","archive_url":"https://api.github.com/repos/oeway/keras/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/oeway/keras/downloads","issues_url":"https://api.github.com/repos/oeway/keras/issues{/number}","pulls_url":"https://api.github.com/repos/oeway/keras/pulls{/number}","milestones_url":"https://api.github.com/repos/oeway/keras/milestones{/number}","notifications_url":"https://api.github.com/repos/oeway/keras/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/oeway/keras/labels{/name}","releases_url":"https://api.github.com/repos/oeway/keras/releases{/id}","deployments_url":"https://api.github.com/repos/oeway/keras/deployments","created_at":"2016-02-01T16:18:18Z","updated_at":"2016-02-01T16:18:19Z","pushed_at":"2016-02-15T16:19:49Z","git_url":"git://github.com/oeway/keras.git","ssh_url":"git@github.com:oeway/keras.git","clone_url":"https://github.com/oeway/keras.git","svn_url":"https://github.com/oeway/keras","homepage":"http://keras.io/","size":2116,"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":"fchollet:master","ref":"master","sha":"6a41ac1c36e467c861a5fdc60a54fbac6627bdab","user":{"login":"fchollet","id":710255,"avatar_url":"https://avatars.githubusercontent.com/u/710255?v=3","gravatar_id":"","url":"https://api.github.com/users/fchollet","html_url":"https://github.com/fchollet","followers_url":"https://api.github.com/users/fchollet/followers","following_url":"https://api.github.com/users/fchollet/following{/other_user}","gists_url":"https://api.github.com/users/fchollet/gists{/gist_id}","starred_url":"https://api.github.com/users/fchollet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fchollet/subscriptions","organizations_url":"https://api.github.com/users/fchollet/orgs","repos_url":"https://api.github.com/users/fchollet/repos","events_url":"https://api.github.com/users/fchollet/events{/privacy}","received_events_url":"https://api.github.com/users/fchollet/received_events","type":"User","site_admin":false},"repo":{"id":33015583,"name":"keras","full_name":"fchollet/keras","owner":{"login":"fchollet","id":710255,"avatar_url":"https://avatars.githubusercontent.com/u/710255?v=3","gravatar_id":"","url":"https://api.github.com/users/fchollet","html_url":"https://github.com/fchollet","followers_url":"https://api.github.com/users/fchollet/followers","following_url":"https://api.github.com/users/fchollet/following{/other_user}","gists_url":"https://api.github.com/users/fchollet/gists{/gist_id}","starred_url":"https://api.github.com/users/fchollet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fchollet/subscriptions","organizations_url":"https://api.github.com/users/fchollet/orgs","repos_url":"https://api.github.com/users/fchollet/repos","events_url":"https://api.github.com/users/fchollet/events{/privacy}","received_events_url":"https://api.github.com/users/fchollet/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fchollet/keras","description":"Deep Learning library for Python. Convnets, recurrent neural networks, and more. Runs on Theano and TensorFlow.","fork":false,"url":"https://api.github.com/repos/fchollet/keras","forks_url":"https://api.github.com/repos/fchollet/keras/forks","keys_url":"https://api.github.com/repos/fchollet/keras/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fchollet/keras/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fchollet/keras/teams","hooks_url":"https://api.github.com/repos/fchollet/keras/hooks","issue_events_url":"https://api.github.com/repos/fchollet/keras/issues/events{/number}","events_url":"https://api.github.com/repos/fchollet/keras/events","assignees_url":"https://api.github.com/repos/fchollet/keras/assignees{/user}","branches_url":"https://api.github.com/repos/fchollet/keras/branches{/branch}","tags_url":"https://api.github.com/repos/fchollet/keras/tags","blobs_url":"https://api.github.com/repos/fchollet/keras/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fchollet/keras/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fchollet/keras/git/refs{/sha}","trees_url":"https://api.github.com/repos/fchollet/keras/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fchollet/keras/statuses/{sha}","languages_url":"https://api.github.com/repos/fchollet/keras/languages","stargazers_url":"https://api.github.com/repos/fchollet/keras/stargazers","contributors_url":"https://api.github.com/repos/fchollet/keras/contributors","subscribers_url":"https://api.github.com/repos/fchollet/keras/subscribers","subscription_url":"https://api.github.com/repos/fchollet/keras/subscription","commits_url":"https://api.github.com/repos/fchollet/keras/commits{/sha}","git_commits_url":"https://api.github.com/repos/fchollet/keras/git/commits{/sha}","comments_url":"https://api.github.com/repos/fchollet/keras/comments{/number}","issue_comment_url":"https://api.github.com/repos/fchollet/keras/issues/comments{/number}","contents_url":"https://api.github.com/repos/fchollet/keras/contents/{+path}","compare_url":"https://api.github.com/repos/fchollet/keras/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fchollet/keras/merges","archive_url":"https://api.github.com/repos/fchollet/keras/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fchollet/keras/downloads","issues_url":"https://api.github.com/repos/fchollet/keras/issues{/number}","pulls_url":"https://api.github.com/repos/fchollet/keras/pulls{/number}","milestones_url":"https://api.github.com/repos/fchollet/keras/milestones{/number}","notifications_url":"https://api.github.com/repos/fchollet/keras/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fchollet/keras/labels{/name}","releases_url":"https://api.github.com/repos/fchollet/keras/releases{/id}","deployments_url":"https://api.github.com/repos/fchollet/keras/deployments","created_at":"2015-03-28T00:35:42Z","updated_at":"2016-02-17T22:51:10Z","pushed_at":"2016-02-17T22:07:02Z","git_url":"git://github.com/fchollet/keras.git","ssh_url":"git@github.com:fchollet/keras.git","clone_url":"https://github.com/fchollet/keras.git","svn_url":"https://github.com/fchollet/keras","homepage":"http://keras.io/","size":101114,"stargazers_count":4442,"watchers_count":4442,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1078,"mirror_url":null,"open_issues_count":455,"forks":1078,"open_issues":455,"watchers":4442,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/fchollet/keras/pulls/1623"},"html":{"href":"https://github.com/fchollet/keras/pull/1623"},"issue":{"href":"https://api.github.com/repos/fchollet/keras/issues/1623"},"comments":{"href":"https://api.github.com/repos/fchollet/keras/issues/1623/comments"},"review_comments":{"href":"https://api.github.com/repos/fchollet/keras/pulls/1623/comments"},"review_comment":{"href":"https://api.github.com/repos/fchollet/keras/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/fchollet/keras/pulls/1623/commits"},"statuses":{"href":"https://api.github.com/repos/fchollet/keras/statuses/b62b67f8f5ba4a9f373ab60f244c8040c2333669"}}}}