{"action":"created","comment":{"url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/comments/218624196","pull_request_review_id":156605340,"id":218624196,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxODYyNDE5Ng==","diff_hunk":"@@ -3392,3 +3392,252 @@ def call(self, inputs, state):\n \n     new_state = rnn_cell_impl.LSTMStateTuple(new_c, new_h)\n     return new_h, new_state\n+\n+class NTMCell(rnn_cell_impl.LayerRNNCell):\n+  \"\"\"Neural Turing Machine Cell with RNN controller.\n+\n+    Implementation based on:\n+    https://arxiv.org/abs/1807.08518\n+    Mark Collier, Joeran Beel\n+\n+    which is in turn based on the source code of:\n+    https://github.com/snowkylin/ntm\n+\n+    and of course the original NTM paper:\n+    Neural Turing Machines\n+    https://arxiv.org/abs/1410.5401\n+    A Graves, G Wayne, I Danihelka\n+  \"\"\"\n+  def __init__(self, controller, memory_size,\n+    memory_vector_dim, read_head_num, write_head_num, shift_range=1,\n+    output_dim=None, clip_value=20, dtype=dtypes.float32,\n+    reuse=None, name=None):\n+    \"\"\"Initialize the NTM Cell.\n+\n+      Args:\n+        controller: an RNNCell, the RNN controller.\n+        memory_size: int, The number of memory locations in the\n+          NTM memory matrix\n+        memory_vector_dim: int, The dimensionality of each location in the\n+          NTM memory matrix\n+        read_head_num: int, The number of read heads from the controller\n+          into memory\n+        write_head_num: int, The number of write heads from the controller\n+          into memory\n+        shift_range: int, The number of places to the left/right it is possible\n+          to iterate the previous address to in a single step\n+        output_dim: int, The number of dimensions to make a linear projection\n+          of the NTM controller outputs to.\n+          If None, no linear projection is applied\n+        clip_value: float, The maximum absolute value the controller parameters\n+          are clipped to\n+        dtype: Default dtype of the layer (default of `None` means use the type\n+          of the first input). Required when `build` is called before `call`.\n+        reuse: (optional) Python boolean describing whether to reuse variables\n+          in an existing scope.  If not `True`, and the existing scope already\n+          has the given variables, an error is raised.\n+        name: String, the name of the layer. Layers with the same name will\n+          share weights, but to avoid mistakes we require reuse=True in such\n+          cases.\n+    \"\"\"\n+    super(NTMCell, self).__init__(_reuse=reuse, dtype=dtype, name=name)\n+\n+    rnn_cell_impl.assert_like_rnncell(\"NTM RNN controller cell\", controller)\n+\n+    self.controller = controller\n+    self.memory_size = memory_size\n+    self.memory_vector_dim = memory_vector_dim\n+    self.read_head_num = read_head_num\n+    self.write_head_num = write_head_num\n+    self.clip_value = clip_value\n+    self.reuse = reuse\n+\n+    self.NTMControllerState = collections.namedtuple('NTMControllerState',\n+      ('controller_state', 'read_vector_list', 'w_list', 'M'))\n+\n+    self.output_dim = output_dim\n+    self.shift_range = shift_range\n+\n+    self.num_parameters_per_head = self.memory_vector_dim + \\\n+      2 * self.shift_range + 4\n+    self.num_heads = self.read_head_num + self.write_head_num\n+    self.total_parameter_num = self.num_parameters_per_head * self.num_heads + \\\n+      self.memory_vector_dim * 2 * self.write_head_num\n+\n+  @property\n+  def state_size(self):\n+    return self.NTMControllerState(\n+      controller_state=self.controller.state_size,\n+      read_vector_list=[self.memory_vector_dim\n+        for _ in range(self.read_head_num)],\n+      w_list=[self.memory_size\n+        for _ in range(self.read_head_num + self.write_head_num)],\n+      M=tensor_shape.TensorShape([self.memory_size * self.memory_vector_dim]))\n+\n+  @property\n+  def output_size(self):\n+    return self.output_dim\n+\n+  def build(self, inputs_shape):\n+    if self.output_dim is None:\n+      if inputs_shape[1].value is None:\n+        raise ValueError(\"Expected inputs.shape[-1] to be known, saw shape: %s\"\n+                         % inputs_shape)\n+      else:\n+        self.output_dim = inputs_shape[1].value\n+\n+    self._ntm_params_kernel = self.add_variable(\n+        'ntm_parameters_kernel',\n+        shape=[self.controller.output_size, self.total_parameter_num])\n+\n+    self._ntm_params_bias = self.add_variable(\n+        'ntm_parameters_bias',\n+        shape=[self.total_parameter_num],\n+        initializer=init_ops.zeros_initializer(dtype=self.dtype))\n+\n+    self._output_kernel = self.add_variable(\n+        'ntm_output_kernel',\n+        shape=[self.controller.output_size + \\\n+          self.memory_vector_dim * self.read_head_num, self.output_dim])\n+\n+    self._output_bias = self.add_variable(\n+        'ntm_output_bias',\n+        shape=[self.output_dim],\n+        initializer=init_ops.zeros_initializer(dtype=self.dtype))\n+\n+    self.built = True\n+\n+  def call(self, x, prev_state):\n+    prev_read_vector_list = prev_state.read_vector_list\n+\n+    controller_input = array_ops.concat([x] + prev_read_vector_list, axis=1)\n+    with vs.variable_scope('controller', reuse=self.reuse):\n+      controller_output, controller_state = self.controller(controller_input,\n+        prev_state.controller_state)\n+\n+    parameters = math_ops.matmul(controller_output, self._ntm_params_kernel)\n+    parameters = nn_ops.bias_add(parameters, self._ntm_params_bias)\n+    parameters = clip_ops.clip_by_value(parameters,\n+      -self.clip_value, self.clip_value)\n+    head_parameter_list = array_ops.split(\n+      parameters[:, :self.num_parameters_per_head * self.num_heads],\n+      self.num_heads,\n+      axis=1)\n+    erase_add_list = array_ops.split(\n+      parameters[:, self.num_parameters_per_head * self.num_heads:],\n+      2 * self.write_head_num,\n+      axis=1)\n+\n+    prev_w_list = prev_state.w_list\n+    prev_M = prev_state.M\n+    w_list = []\n+    for i, head_parameter in enumerate(head_parameter_list):\n+      k = math_ops.tanh(head_parameter[:, 0:self.memory_vector_dim])\n+      beta = nn_ops.softplus(head_parameter[:, self.memory_vector_dim])\n+      g = math_ops.sigmoid(head_parameter[:, self.memory_vector_dim + 1])\n+      s = nn_ops.softmax(head_parameter[:,self.memory_vector_dim + 2:\n+        self.memory_vector_dim + 2 + (self.shift_range * 2 + 1)])\n+      gamma = nn_ops.softplus(head_parameter[:, -1]) + 1\n+      with vs.variable_scope('addressing_head_%d' % i):\n+        w = self.addressing(k, beta, g, s, gamma, prev_M, prev_w_list[i])\n+      w_list.append(w)\n+\n+    read_w_list = w_list[:self.read_head_num]\n+    read_vector_list = []\n+    for i in range(self.read_head_num):\n+      read_vector = math_ops.reduce_sum(\n+        array_ops.expand_dims(read_w_list[i], dim=2) * prev_M, axis=1)\n+      read_vector_list.append(read_vector)\n+\n+    write_w_list = w_list[self.read_head_num:]\n+    M = prev_M\n+    for i in range(self.write_head_num):\n+      w = array_ops.expand_dims(write_w_list[i], axis=2)\n+      erase_vector = array_ops.expand_dims(\n+        math_ops.sigmoid(erase_add_list[i * 2]), axis=1)\n+      add_vector = array_ops.expand_dims(\n+        math_ops.tanh(erase_add_list[i * 2 + 1]), axis=1)\n+      erase_M = array_ops.ones(M.get_shape()) - math_ops.matmul(w, erase_vector)","path":"tensorflow/contrib/rnn/python/ops/rnn_cell.py","position":169,"original_position":169,"commit_id":"c4dd29c75a2d134647f639d5df469a2755a1c693","original_commit_id":"c4dd29c75a2d134647f639d5df469a2755a1c693","user":{"login":"ebrevdo","id":1794715,"node_id":"MDQ6VXNlcjE3OTQ3MTU=","avatar_url":"https://avatars0.githubusercontent.com/u/1794715?v=4","gravatar_id":"","url":"https://api.github.com/users/ebrevdo","html_url":"https://github.com/ebrevdo","followers_url":"https://api.github.com/users/ebrevdo/followers","following_url":"https://api.github.com/users/ebrevdo/following{/other_user}","gists_url":"https://api.github.com/users/ebrevdo/gists{/gist_id}","starred_url":"https://api.github.com/users/ebrevdo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ebrevdo/subscriptions","organizations_url":"https://api.github.com/users/ebrevdo/orgs","repos_url":"https://api.github.com/users/ebrevdo/repos","events_url":"https://api.github.com/users/ebrevdo/events{/privacy}","received_events_url":"https://api.github.com/users/ebrevdo/received_events","type":"User","site_admin":false},"body":"array_ops.ones_like(M)","created_at":"2018-09-18T23:15:36Z","updated_at":"2018-09-18T23:15:37Z","html_url":"https://github.com/tensorflow/tensorflow/pull/21222#discussion_r218624196","pull_request_url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/21222","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/comments/218624196"},"html":{"href":"https://github.com/tensorflow/tensorflow/pull/21222#discussion_r218624196"},"pull_request":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/21222"}}},"pull_request":{"url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/21222","id":204645514,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA0NjQ1NTE0","html_url":"https://github.com/tensorflow/tensorflow/pull/21222","diff_url":"https://github.com/tensorflow/tensorflow/pull/21222.diff","patch_url":"https://github.com/tensorflow/tensorflow/pull/21222.patch","issue_url":"https://api.github.com/repos/tensorflow/tensorflow/issues/21222","number":21222,"state":"open","locked":false,"title":"Added NTM implementation","user":{"login":"MarkPKCollier","id":1159632,"node_id":"MDQ6VXNlcjExNTk2MzI=","avatar_url":"https://avatars1.githubusercontent.com/u/1159632?v=4","gravatar_id":"","url":"https://api.github.com/users/MarkPKCollier","html_url":"https://github.com/MarkPKCollier","followers_url":"https://api.github.com/users/MarkPKCollier/followers","following_url":"https://api.github.com/users/MarkPKCollier/following{/other_user}","gists_url":"https://api.github.com/users/MarkPKCollier/gists{/gist_id}","starred_url":"https://api.github.com/users/MarkPKCollier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MarkPKCollier/subscriptions","organizations_url":"https://api.github.com/users/MarkPKCollier/orgs","repos_url":"https://api.github.com/users/MarkPKCollier/repos","events_url":"https://api.github.com/users/MarkPKCollier/events{/privacy}","received_events_url":"https://api.github.com/users/MarkPKCollier/received_events","type":"User","site_admin":false},"body":"This PR adds a Neural Turing Machine implementation as described in https://arxiv.org/abs/1807.08518 to the contrib library.","created_at":"2018-07-29T14:43:26Z","updated_at":"2018-09-18T23:15:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d4643aa5a6d246e8d30ed175817aa8015dd36d3a","assignee":{"login":"caisq","id":16824702,"node_id":"MDQ6VXNlcjE2ODI0NzAy","avatar_url":"https://avatars2.githubusercontent.com/u/16824702?v=4","gravatar_id":"","url":"https://api.github.com/users/caisq","html_url":"https://github.com/caisq","followers_url":"https://api.github.com/users/caisq/followers","following_url":"https://api.github.com/users/caisq/following{/other_user}","gists_url":"https://api.github.com/users/caisq/gists{/gist_id}","starred_url":"https://api.github.com/users/caisq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caisq/subscriptions","organizations_url":"https://api.github.com/users/caisq/orgs","repos_url":"https://api.github.com/users/caisq/repos","events_url":"https://api.github.com/users/caisq/events{/privacy}","received_events_url":"https://api.github.com/users/caisq/received_events","type":"User","site_admin":false},"assignees":[{"login":"caisq","id":16824702,"node_id":"MDQ6VXNlcjE2ODI0NzAy","avatar_url":"https://avatars2.githubusercontent.com/u/16824702?v=4","gravatar_id":"","url":"https://api.github.com/users/caisq","html_url":"https://github.com/caisq","followers_url":"https://api.github.com/users/caisq/followers","following_url":"https://api.github.com/users/caisq/following{/other_user}","gists_url":"https://api.github.com/users/caisq/gists{/gist_id}","starred_url":"https://api.github.com/users/caisq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caisq/subscriptions","organizations_url":"https://api.github.com/users/caisq/orgs","repos_url":"https://api.github.com/users/caisq/repos","events_url":"https://api.github.com/users/caisq/events{/privacy}","received_events_url":"https://api.github.com/users/caisq/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":300136587,"node_id":"MDU6TGFiZWwzMDAxMzY1ODc=","url":"https://api.github.com/repos/tensorflow/tensorflow/labels/cla:%20yes","name":"cla: yes","color":"009800","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/21222/commits","review_comments_url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/21222/comments","review_comment_url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/comments{/number}","comments_url":"https://api.github.com/repos/tensorflow/tensorflow/issues/21222/comments","statuses_url":"https://api.github.com/repos/tensorflow/tensorflow/statuses/c4dd29c75a2d134647f639d5df469a2755a1c693","head":{"label":"MarkPKCollier:NeuralTuringMachine","ref":"NeuralTuringMachine","sha":"c4dd29c75a2d134647f639d5df469a2755a1c693","user":{"login":"MarkPKCollier","id":1159632,"node_id":"MDQ6VXNlcjExNTk2MzI=","avatar_url":"https://avatars1.githubusercontent.com/u/1159632?v=4","gravatar_id":"","url":"https://api.github.com/users/MarkPKCollier","html_url":"https://github.com/MarkPKCollier","followers_url":"https://api.github.com/users/MarkPKCollier/followers","following_url":"https://api.github.com/users/MarkPKCollier/following{/other_user}","gists_url":"https://api.github.com/users/MarkPKCollier/gists{/gist_id}","starred_url":"https://api.github.com/users/MarkPKCollier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MarkPKCollier/subscriptions","organizations_url":"https://api.github.com/users/MarkPKCollier/orgs","repos_url":"https://api.github.com/users/MarkPKCollier/repos","events_url":"https://api.github.com/users/MarkPKCollier/events{/privacy}","received_events_url":"https://api.github.com/users/MarkPKCollier/received_events","type":"User","site_admin":false},"repo":{"id":142768067,"node_id":"MDEwOlJlcG9zaXRvcnkxNDI3NjgwNjc=","name":"tensorflow","full_name":"MarkPKCollier/tensorflow","private":false,"owner":{"login":"MarkPKCollier","id":1159632,"node_id":"MDQ6VXNlcjExNTk2MzI=","avatar_url":"https://avatars1.githubusercontent.com/u/1159632?v=4","gravatar_id":"","url":"https://api.github.com/users/MarkPKCollier","html_url":"https://github.com/MarkPKCollier","followers_url":"https://api.github.com/users/MarkPKCollier/followers","following_url":"https://api.github.com/users/MarkPKCollier/following{/other_user}","gists_url":"https://api.github.com/users/MarkPKCollier/gists{/gist_id}","starred_url":"https://api.github.com/users/MarkPKCollier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MarkPKCollier/subscriptions","organizations_url":"https://api.github.com/users/MarkPKCollier/orgs","repos_url":"https://api.github.com/users/MarkPKCollier/repos","events_url":"https://api.github.com/users/MarkPKCollier/events{/privacy}","received_events_url":"https://api.github.com/users/MarkPKCollier/received_events","type":"User","site_admin":false},"html_url":"https://github.com/MarkPKCollier/tensorflow","description":"Computation using data flow graphs for scalable machine learning","fork":true,"url":"https://api.github.com/repos/MarkPKCollier/tensorflow","forks_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/forks","keys_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/teams","hooks_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/hooks","issue_events_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/issues/events{/number}","events_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/events","assignees_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/assignees{/user}","branches_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/branches{/branch}","tags_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/tags","blobs_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/git/refs{/sha}","trees_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/statuses/{sha}","languages_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/languages","stargazers_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/stargazers","contributors_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/contributors","subscribers_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/subscribers","subscription_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/subscription","commits_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/commits{/sha}","git_commits_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/git/commits{/sha}","comments_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/comments{/number}","issue_comment_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/issues/comments{/number}","contents_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/contents/{+path}","compare_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/merges","archive_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/downloads","issues_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/issues{/number}","pulls_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/pulls{/number}","milestones_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/milestones{/number}","notifications_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/labels{/name}","releases_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/releases{/id}","deployments_url":"https://api.github.com/repos/MarkPKCollier/tensorflow/deployments","created_at":"2018-07-29T14:31:00Z","updated_at":"2018-07-29T14:31:44Z","pushed_at":"2018-09-18T15:20:12Z","git_url":"git://github.com/MarkPKCollier/tensorflow.git","ssh_url":"git@github.com:MarkPKCollier/tensorflow.git","clone_url":"https://github.com/MarkPKCollier/tensorflow.git","svn_url":"https://github.com/MarkPKCollier/tensorflow","homepage":"https://tensorflow.org","size":185495,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"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","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"tensorflow:master","ref":"master","sha":"cde1c8e835f7fdfbb3ab8a4c8a01edb3a7e569aa","user":{"login":"tensorflow","id":15658638,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE1NjU4NjM4","avatar_url":"https://avatars1.githubusercontent.com/u/15658638?v=4","gravatar_id":"","url":"https://api.github.com/users/tensorflow","html_url":"https://github.com/tensorflow","followers_url":"https://api.github.com/users/tensorflow/followers","following_url":"https://api.github.com/users/tensorflow/following{/other_user}","gists_url":"https://api.github.com/users/tensorflow/gists{/gist_id}","starred_url":"https://api.github.com/users/tensorflow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tensorflow/subscriptions","organizations_url":"https://api.github.com/users/tensorflow/orgs","repos_url":"https://api.github.com/users/tensorflow/repos","events_url":"https://api.github.com/users/tensorflow/events{/privacy}","received_events_url":"https://api.github.com/users/tensorflow/received_events","type":"Organization","site_admin":false},"repo":{"id":45717250,"node_id":"MDEwOlJlcG9zaXRvcnk0NTcxNzI1MA==","name":"tensorflow","full_name":"tensorflow/tensorflow","private":false,"owner":{"login":"tensorflow","id":15658638,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE1NjU4NjM4","avatar_url":"https://avatars1.githubusercontent.com/u/15658638?v=4","gravatar_id":"","url":"https://api.github.com/users/tensorflow","html_url":"https://github.com/tensorflow","followers_url":"https://api.github.com/users/tensorflow/followers","following_url":"https://api.github.com/users/tensorflow/following{/other_user}","gists_url":"https://api.github.com/users/tensorflow/gists{/gist_id}","starred_url":"https://api.github.com/users/tensorflow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tensorflow/subscriptions","organizations_url":"https://api.github.com/users/tensorflow/orgs","repos_url":"https://api.github.com/users/tensorflow/repos","events_url":"https://api.github.com/users/tensorflow/events{/privacy}","received_events_url":"https://api.github.com/users/tensorflow/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/tensorflow/tensorflow","description":"An Open Source Machine Learning Framework for Everyone","fork":false,"url":"https://api.github.com/repos/tensorflow/tensorflow","forks_url":"https://api.github.com/repos/tensorflow/tensorflow/forks","keys_url":"https://api.github.com/repos/tensorflow/tensorflow/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tensorflow/tensorflow/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tensorflow/tensorflow/teams","hooks_url":"https://api.github.com/repos/tensorflow/tensorflow/hooks","issue_events_url":"https://api.github.com/repos/tensorflow/tensorflow/issues/events{/number}","events_url":"https://api.github.com/repos/tensorflow/tensorflow/events","assignees_url":"https://api.github.com/repos/tensorflow/tensorflow/assignees{/user}","branches_url":"https://api.github.com/repos/tensorflow/tensorflow/branches{/branch}","tags_url":"https://api.github.com/repos/tensorflow/tensorflow/tags","blobs_url":"https://api.github.com/repos/tensorflow/tensorflow/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tensorflow/tensorflow/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tensorflow/tensorflow/git/refs{/sha}","trees_url":"https://api.github.com/repos/tensorflow/tensorflow/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tensorflow/tensorflow/statuses/{sha}","languages_url":"https://api.github.com/repos/tensorflow/tensorflow/languages","stargazers_url":"https://api.github.com/repos/tensorflow/tensorflow/stargazers","contributors_url":"https://api.github.com/repos/tensorflow/tensorflow/contributors","subscribers_url":"https://api.github.com/repos/tensorflow/tensorflow/subscribers","subscription_url":"https://api.github.com/repos/tensorflow/tensorflow/subscription","commits_url":"https://api.github.com/repos/tensorflow/tensorflow/commits{/sha}","git_commits_url":"https://api.github.com/repos/tensorflow/tensorflow/git/commits{/sha}","comments_url":"https://api.github.com/repos/tensorflow/tensorflow/comments{/number}","issue_comment_url":"https://api.github.com/repos/tensorflow/tensorflow/issues/comments{/number}","contents_url":"https://api.github.com/repos/tensorflow/tensorflow/contents/{+path}","compare_url":"https://api.github.com/repos/tensorflow/tensorflow/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tensorflow/tensorflow/merges","archive_url":"https://api.github.com/repos/tensorflow/tensorflow/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tensorflow/tensorflow/downloads","issues_url":"https://api.github.com/repos/tensorflow/tensorflow/issues{/number}","pulls_url":"https://api.github.com/repos/tensorflow/tensorflow/pulls{/number}","milestones_url":"https://api.github.com/repos/tensorflow/tensorflow/milestones{/number}","notifications_url":"https://api.github.com/repos/tensorflow/tensorflow/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tensorflow/tensorflow/labels{/name}","releases_url":"https://api.github.com/repos/tensorflow/tensorflow/releases{/id}","deployments_url":"https://api.github.com/repos/tensorflow/tensorflow/deployments","created_at":"2015-11-07T01:19:20Z","updated_at":"2018-09-18T22:49:04Z","pushed_at":"2018-09-18T23:14:44Z","git_url":"git://github.com/tensorflow/tensorflow.git","ssh_url":"git@github.com:tensorflow/tensorflow.git","clone_url":"https://github.com/tensorflow/tensorflow.git","svn_url":"https://github.com/tensorflow/tensorflow","homepage":"https://tensorflow.org","size":256539,"stargazers_count":109737,"watchers_count":109737,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":67649,"mirror_url":null,"archived":false,"open_issues_count":1806,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":67649,"open_issues":1806,"watchers":109737,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/21222"},"html":{"href":"https://github.com/tensorflow/tensorflow/pull/21222"},"issue":{"href":"https://api.github.com/repos/tensorflow/tensorflow/issues/21222"},"comments":{"href":"https://api.github.com/repos/tensorflow/tensorflow/issues/21222/comments"},"review_comments":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/21222/comments"},"review_comment":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/21222/commits"},"statuses":{"href":"https://api.github.com/repos/tensorflow/tensorflow/statuses/c4dd29c75a2d134647f639d5df469a2755a1c693"}},"author_association":"NONE"}}
{"actor":{"display_login":"ebrevdo"}}