{"action":"created","comment":{"url":"https://api.github.com/repos/tensorflow/addons/pulls/comments/360965754","pull_request_review_id":335963486,"id":360965754,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM2MDk2NTc1NA==","diff_hunk":"@@ -0,0 +1,478 @@\n+# Copyright 2019 The TensorFlow Authors. All Rights Reserved.\n+#\n+# Licensed under the Apache License, Version 2.0 (the \"License\");\n+# you may not use this file except in compliance with the License.\n+# You may obtain a copy of the License at\n+#\n+#     http://www.apache.org/licenses/LICENSE-2.0\n+#\n+# Unless required by applicable law or agreed to in writing, software\n+# distributed under the License is distributed on an \"AS IS\" BASIS,\n+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+# See the License for the specific language governing permissions and\n+# limitations under the License.\n+#\n+# Orginal implementation from keras_contrib/layers/crf\n+# ==============================================================================\n+\"\"\"Implementing Conditional Random Field layer.\"\"\"\n+\n+from __future__ import absolute_import\n+from __future__ import division\n+from __future__ import print_function\n+\n+import tensorflow as tf\n+from tensorflow_addons.text.crf import crf_decode, crf_log_likelihood\n+\n+\n+@tf.keras.utils.register_keras_serializable(package='Addons')\n+class CRF(tf.keras.layers.Layer):\n+    \"\"\"Linear chain conditional random field (CRF).\n+\n+    Examples:\n+\n+    ```python\n+        from tensorflow_addons.layers import CRF\n+        from tensorflow_addons.losses import crf_loss\n+\n+        model = Sequential()\n+        model.add(Embedding(3001, 300, mask_zero=True)\n+\n+        crf = CRF(10)\n+        model.add(crf)\n+\n+        model.compile('adam', loss=crf_loss)\n+\n+        model.fit(x, y)\n+    ```\n+\n+    Arguments:\n+        units: Positive integer, dimensionality of the output space,\n+            should equal to tag num.\n+        chain_initializer: Initializer for the `chain_kernel` weights matrix,\n+            used for the CRF chain energy.\n+            (see [initializers](../initializers.md)).\n+        chain_regularizer: Regularizer function applied to\n+            the `chain_kernel` weights matrix.\n+        chain_constraint: Constraint function applied to\n+            the `chain_kernel` weights matrix.\n+        use_boundary: Boolean (default True), indicating if trainable\n+            start-end chain energies should be added to model.\n+        boundary_initializer: Initializer for the `left_boundary`,\n+            'right_boundary' weights vectors,\n+            used for the start/left and end/right boundary energy.\n+        boundary_regularizer: Regularizer function applied to\n+            the 'left_boundary', 'right_boundary' weight vectors.\n+        boundary_constraint: Constraint function applied to\n+            the `left_boundary`, `right_boundary` weights vectors.\n+        use_kernel: Boolean (default True), indicating if apply\n+            a fully connected layer before CRF op.\n+        kernel_initializer: Initializer for the `kernel` weights matrix,\n+            used for the linear transformation of the inputs.\n+        kernel_regularizer: Regularizer function applied to\n+            the `kernel` weights matrix.\n+        kernel_constraint: Constraint function applied to\n+            the `kernel` weights matrix.\n+        use_bias: Boolean (default True), whether the layer uses a bias vector.\n+        bias_initializer: Initializer for the bias vector.\n+        bias_regularizer: Regularizer function applied to the bias vector.\n+        bias_constraint: Constraint function applied to the bias vector.\n+        activation: default value is 'linear', Activation function to use.\n+\n+    Input shape:\n+        3D tensor with shape: `(batch_size, sequence_length, feature_size)`.\n+\n+    Output shape:\n+        2D tensor (dtype: int32) with shape: `(batch_size, sequence_length)`.\n+\n+    Masking:\n+        This layer supports masking\n+        (2D tensor, shape: `(batch_size, sequence_length)`)\n+        for input data with a variable number of timesteps.\n+        This layer output same make tensor,\n+        NOTICE this may cause issue when you\n+        use some keras loss and metrics function which usually expect 1D mask.\n+\n+    Loss function:\n+        Due to the TF 2.0 version support eager execution be default,\n+        there is no way can implement CRF loss as independent loss function.\n+        Thus, user should use loss method of this layer.\n+        See Examples (above) for detailed usage.\n+\n+    References:\n+        - [Conditional Random Field](https://en.wikipedia.org/wiki/Conditional_random_field)\n+    \"\"\"\n+\n+    def __init__(self,\n+                 units,\n+                 chain_initializer=\"orthogonal\",\n+                 chain_regularizer=None,\n+                 chain_constraint=None,\n+                 use_boundary=True,\n+                 boundary_initializer=\"zeros\",\n+                 boundary_regularizer=None,\n+                 boundary_constraint=None,\n+                 use_kernel=True,\n+                 kernel_initializer=\"glorot_uniform\",\n+                 kernel_regularizer=None,\n+                 kernel_constraint=None,\n+                 use_bias=True,\n+                 bias_initializer=\"zeros\",\n+                 bias_regularizer=None,\n+                 bias_constraint=None,\n+                 activation=\"linear\",\n+                 **kwargs):\n+        super(CRF, self).__init__(**kwargs)\n+\n+        # setup mask supporting flag, used by base class (the Layer)\n+        # because base class's init method will set it to False unconditionally\n+        # So this assigned must be executed after call base class's init method\n+        self.supports_masking = True\n+\n+        self.units = units  # numbers of tags\n+\n+        self.use_boundary = use_boundary\n+        self.use_bias = use_bias\n+        self.use_kernel = use_kernel\n+\n+        self.activation = tf.keras.activations.get(activation)\n+\n+        self.kernel_initializer = tf.keras.initializers.get(kernel_initializer)\n+        self.chain_initializer = tf.keras.initializers.get(chain_initializer)\n+        self.boundary_initializer = tf.keras.initializers.get(\n+            boundary_initializer)\n+        self.bias_initializer = tf.keras.initializers.get(bias_initializer)\n+\n+        self.kernel_regularizer = tf.keras.regularizers.get(kernel_regularizer)\n+        self.chain_regularizer = tf.keras.regularizers.get(chain_regularizer)\n+        self.boundary_regularizer = tf.keras.regularizers.get(\n+            boundary_regularizer)\n+        self.bias_regularizer = tf.keras.regularizers.get(bias_regularizer)\n+\n+        self.kernel_constraint = tf.keras.constraints.get(kernel_constraint)\n+        self.chain_constraint = tf.keras.constraints.get(chain_constraint)\n+        self.boundary_constraint = tf.keras.constraints.get(\n+            boundary_constraint)\n+        self.bias_constraint = tf.keras.constraints.get(bias_constraint)\n+\n+        # values will be assigned in method\n+        self.input_spec = None\n+\n+        # value remembered for loss/metrics function\n+        self.potentials = None\n+        self.sequence_length = None\n+        self.mask = None\n+\n+        # global variable\n+        self.kernel = None\n+        self.chain_kernel = None\n+        self.bias = None\n+        self.left_boundary = None\n+        self.right_boundary = None\n+\n+    def build(self, input_shape):\n+        input_shape = tuple(tf.TensorShape(input_shape).as_list())\n+\n+        # see API docs of InputSpec for more detail\n+        self.input_spec = [tf.keras.layers.InputSpec(shape=input_shape)]\n+\n+        feature_size = input_shape[-1]\n+\n+        if self.use_kernel:\n+            # weights that mapping arbitrary tensor to correct shape\n+            self.kernel = self.add_weight(\n+                shape=(feature_size, self.units),\n+                name=\"kernel\",\n+                initializer=self.kernel_initializer,\n+                regularizer=self.kernel_regularizer,\n+                constraint=self.kernel_constraint,\n+            )\n+\n+        # weights that work as transfer probability of each tags\n+        self.chain_kernel = self.add_weight(\n+            shape=(self.units, self.units),\n+            name=\"chain_kernel\",\n+            initializer=self.chain_initializer,\n+            regularizer=self.chain_regularizer,\n+            constraint=self.chain_constraint,\n+        )\n+\n+        # bias that works with self.kernel\n+        if self.use_kernel and self.use_bias:\n+            self.bias = self.add_weight(\n+                shape=(self.units,),\n+                name=\"bias\",\n+                initializer=self.bias_initializer,\n+                regularizer=self.bias_regularizer,\n+                constraint=self.bias_constraint,\n+            )\n+        else:\n+            self.bias = 0\n+\n+        # weight of <START> to tag probability and tag to <END> probability\n+        if self.use_boundary:\n+            self.left_boundary = self.add_weight(\n+                shape=(self.units,),\n+                name=\"left_boundary\",\n+                initializer=self.boundary_initializer,\n+                regularizer=self.boundary_regularizer,\n+                constraint=self.boundary_constraint,\n+            )\n+            self.right_boundary = self.add_weight(\n+                shape=(self.units,),\n+                name=\"right_boundary\",\n+                initializer=self.boundary_initializer,\n+                regularizer=self.boundary_regularizer,\n+                constraint=self.boundary_constraint,\n+            )\n+\n+        # or directly call self.built = True\n+        super(CRF, self).build(input_shape)\n+\n+    def call(self, inputs, mask=None, **kwargs):\n+        # mask: Tensor(shape=(batch_size, sequence_length), dtype=bool) or None\n+\n+        if mask is not None:\n+            if tf.keras.backend.ndim(mask) != 2:\n+                raise ValueError(\n+                    \"Input mask to CRF must have dim 2 if not None\")\n+\n+        # left padding of mask is not supported, due the underline CRF function\n+        # detect it and report it to user","path":"tensorflow_addons/layers/crf.py","position":240,"original_position":240,"commit_id":"b262357ba32c8c6b14bfb14a0914a7e69661736e","original_commit_id":"b262357ba32c8c6b14bfb14a0914a7e69661736e","user":{"login":"Squadrick","id":19751320,"node_id":"MDQ6VXNlcjE5NzUxMzIw","avatar_url":"https://avatars0.githubusercontent.com/u/19751320?v=4","gravatar_id":"","url":"https://api.github.com/users/Squadrick","html_url":"https://github.com/Squadrick","followers_url":"https://api.github.com/users/Squadrick/followers","following_url":"https://api.github.com/users/Squadrick/following{/other_user}","gists_url":"https://api.github.com/users/Squadrick/gists{/gist_id}","starred_url":"https://api.github.com/users/Squadrick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Squadrick/subscriptions","organizations_url":"https://api.github.com/users/Squadrick/orgs","repos_url":"https://api.github.com/users/Squadrick/repos","events_url":"https://api.github.com/users/Squadrick/events{/privacy}","received_events_url":"https://api.github.com/users/Squadrick/received_events","type":"User","site_admin":false},"body":"Create an issue for this. We can add support to it soon. ","created_at":"2019-12-23T18:18:26Z","updated_at":"2019-12-23T18:47:19Z","html_url":"https://github.com/tensorflow/addons/pull/377#discussion_r360965754","pull_request_url":"https://api.github.com/repos/tensorflow/addons/pulls/377","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/tensorflow/addons/pulls/comments/360965754"},"html":{"href":"https://github.com/tensorflow/addons/pull/377#discussion_r360965754"},"pull_request":{"href":"https://api.github.com/repos/tensorflow/addons/pulls/377"}}},"pull_request":{"url":"https://api.github.com/repos/tensorflow/addons/pulls/377","id":302459727,"node_id":"MDExOlB1bGxSZXF1ZXN0MzAyNDU5NzI3","html_url":"https://github.com/tensorflow/addons/pull/377","diff_url":"https://github.com/tensorflow/addons/pull/377.diff","patch_url":"https://github.com/tensorflow/addons/pull/377.patch","issue_url":"https://api.github.com/repos/tensorflow/addons/issues/377","number":377,"state":"open","locked":false,"title":"Add Conditional Random Field (CRF) layer","user":{"login":"howl-anderson","id":1263428,"node_id":"MDQ6VXNlcjEyNjM0Mjg=","avatar_url":"https://avatars2.githubusercontent.com/u/1263428?v=4","gravatar_id":"","url":"https://api.github.com/users/howl-anderson","html_url":"https://github.com/howl-anderson","followers_url":"https://api.github.com/users/howl-anderson/followers","following_url":"https://api.github.com/users/howl-anderson/following{/other_user}","gists_url":"https://api.github.com/users/howl-anderson/gists{/gist_id}","starred_url":"https://api.github.com/users/howl-anderson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/howl-anderson/subscriptions","organizations_url":"https://api.github.com/users/howl-anderson/orgs","repos_url":"https://api.github.com/users/howl-anderson/repos","events_url":"https://api.github.com/users/howl-anderson/events{/privacy}","received_events_url":"https://api.github.com/users/howl-anderson/received_events","type":"User","site_admin":false},"body":"related to: #314 #22\r\ndepend on: #314 \r\n\r\n# What's include\r\n* TensorFlow Keras layer for CRF\r\n* Loss function for CRF\r\n\r\n# How to use it\r\nThe document is coming soon.\r\n\r\n# Progress\r\n[x] Layer class for CRF\r\n[x] Test cases\r\n\r\n# Limitation\r\n* Currently, only support right padding mask (due to the underline CRF functions), CRF layer will detect and report to user if mask contains left padding.\r\n\r\n# Roadmap (next version)\r\n* Include `constraints`: an optional list of allowed transitions (from_tag_id, to_tag_id). Learned from [AllenNLP](https://github.com/allenai/allennlp)\r\n","created_at":"2019-07-30T11:44:31Z","updated_at":"2019-12-23T18:47:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9a1aa15bed0f5e8c60f390450595358ebc4141be","assignee":null,"assignees":[],"requested_reviewers":[{"login":"facaiy","id":1112263,"node_id":"MDQ6VXNlcjExMTIyNjM=","avatar_url":"https://avatars3.githubusercontent.com/u/1112263?v=4","gravatar_id":"","url":"https://api.github.com/users/facaiy","html_url":"https://github.com/facaiy","followers_url":"https://api.github.com/users/facaiy/followers","following_url":"https://api.github.com/users/facaiy/following{/other_user}","gists_url":"https://api.github.com/users/facaiy/gists{/gist_id}","starred_url":"https://api.github.com/users/facaiy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/facaiy/subscriptions","organizations_url":"https://api.github.com/users/facaiy/orgs","repos_url":"https://api.github.com/users/facaiy/repos","events_url":"https://api.github.com/users/facaiy/events{/privacy}","received_events_url":"https://api.github.com/users/facaiy/received_events","type":"User","site_admin":false},{"login":"WindQAQ","id":11615393,"node_id":"MDQ6VXNlcjExNjE1Mzkz","avatar_url":"https://avatars2.githubusercontent.com/u/11615393?v=4","gravatar_id":"","url":"https://api.github.com/users/WindQAQ","html_url":"https://github.com/WindQAQ","followers_url":"https://api.github.com/users/WindQAQ/followers","following_url":"https://api.github.com/users/WindQAQ/following{/other_user}","gists_url":"https://api.github.com/users/WindQAQ/gists{/gist_id}","starred_url":"https://api.github.com/users/WindQAQ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WindQAQ/subscriptions","organizations_url":"https://api.github.com/users/WindQAQ/orgs","repos_url":"https://api.github.com/users/WindQAQ/repos","events_url":"https://api.github.com/users/WindQAQ/events{/privacy}","received_events_url":"https://api.github.com/users/WindQAQ/received_events","type":"User","site_admin":false},{"login":"seanpmorgan","id":18154355,"node_id":"MDQ6VXNlcjE4MTU0MzU1","avatar_url":"https://avatars3.githubusercontent.com/u/18154355?v=4","gravatar_id":"","url":"https://api.github.com/users/seanpmorgan","html_url":"https://github.com/seanpmorgan","followers_url":"https://api.github.com/users/seanpmorgan/followers","following_url":"https://api.github.com/users/seanpmorgan/following{/other_user}","gists_url":"https://api.github.com/users/seanpmorgan/gists{/gist_id}","starred_url":"https://api.github.com/users/seanpmorgan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seanpmorgan/subscriptions","organizations_url":"https://api.github.com/users/seanpmorgan/orgs","repos_url":"https://api.github.com/users/seanpmorgan/repos","events_url":"https://api.github.com/users/seanpmorgan/events{/privacy}","received_events_url":"https://api.github.com/users/seanpmorgan/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":1245934882,"node_id":"MDU6TGFiZWwxMjQ1OTM0ODgy","url":"https://api.github.com/repos/tensorflow/addons/labels/cla:%20yes","name":"cla: yes","color":"04a52a","default":false,"description":""},{"id":1660230255,"node_id":"MDU6TGFiZWwxNjYwMjMwMjU1","url":"https://api.github.com/repos/tensorflow/addons/labels/crf","name":"crf","color":"f7640e","default":false,"description":""},{"id":1186666067,"node_id":"MDU6TGFiZWwxMTg2NjY2MDY3","url":"https://api.github.com/repos/tensorflow/addons/labels/layers","name":"layers","color":"825cc9","default":false,"description":""}],"milestone":null,"commits_url":"https://api.github.com/repos/tensorflow/addons/pulls/377/commits","review_comments_url":"https://api.github.com/repos/tensorflow/addons/pulls/377/comments","review_comment_url":"https://api.github.com/repos/tensorflow/addons/pulls/comments{/number}","comments_url":"https://api.github.com/repos/tensorflow/addons/issues/377/comments","statuses_url":"https://api.github.com/repos/tensorflow/addons/statuses/b262357ba32c8c6b14bfb14a0914a7e69661736e","head":{"label":"howl-anderson:feature/crf_layers","ref":"feature/crf_layers","sha":"b262357ba32c8c6b14bfb14a0914a7e69661736e","user":{"login":"howl-anderson","id":1263428,"node_id":"MDQ6VXNlcjEyNjM0Mjg=","avatar_url":"https://avatars2.githubusercontent.com/u/1263428?v=4","gravatar_id":"","url":"https://api.github.com/users/howl-anderson","html_url":"https://github.com/howl-anderson","followers_url":"https://api.github.com/users/howl-anderson/followers","following_url":"https://api.github.com/users/howl-anderson/following{/other_user}","gists_url":"https://api.github.com/users/howl-anderson/gists{/gist_id}","starred_url":"https://api.github.com/users/howl-anderson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/howl-anderson/subscriptions","organizations_url":"https://api.github.com/users/howl-anderson/orgs","repos_url":"https://api.github.com/users/howl-anderson/repos","events_url":"https://api.github.com/users/howl-anderson/events{/privacy}","received_events_url":"https://api.github.com/users/howl-anderson/received_events","type":"User","site_admin":false},"repo":{"id":176221748,"node_id":"MDEwOlJlcG9zaXRvcnkxNzYyMjE3NDg=","name":"addons","full_name":"howl-anderson/addons","private":false,"owner":{"login":"howl-anderson","id":1263428,"node_id":"MDQ6VXNlcjEyNjM0Mjg=","avatar_url":"https://avatars2.githubusercontent.com/u/1263428?v=4","gravatar_id":"","url":"https://api.github.com/users/howl-anderson","html_url":"https://github.com/howl-anderson","followers_url":"https://api.github.com/users/howl-anderson/followers","following_url":"https://api.github.com/users/howl-anderson/following{/other_user}","gists_url":"https://api.github.com/users/howl-anderson/gists{/gist_id}","starred_url":"https://api.github.com/users/howl-anderson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/howl-anderson/subscriptions","organizations_url":"https://api.github.com/users/howl-anderson/orgs","repos_url":"https://api.github.com/users/howl-anderson/repos","events_url":"https://api.github.com/users/howl-anderson/events{/privacy}","received_events_url":"https://api.github.com/users/howl-anderson/received_events","type":"User","site_admin":false},"html_url":"https://github.com/howl-anderson/addons","description":"Useful extra functionality for TensorFlow maintained by SIG-addons","fork":true,"url":"https://api.github.com/repos/howl-anderson/addons","forks_url":"https://api.github.com/repos/howl-anderson/addons/forks","keys_url":"https://api.github.com/repos/howl-anderson/addons/keys{/key_id}","collaborators_url":"https://api.github.com/repos/howl-anderson/addons/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/howl-anderson/addons/teams","hooks_url":"https://api.github.com/repos/howl-anderson/addons/hooks","issue_events_url":"https://api.github.com/repos/howl-anderson/addons/issues/events{/number}","events_url":"https://api.github.com/repos/howl-anderson/addons/events","assignees_url":"https://api.github.com/repos/howl-anderson/addons/assignees{/user}","branches_url":"https://api.github.com/repos/howl-anderson/addons/branches{/branch}","tags_url":"https://api.github.com/repos/howl-anderson/addons/tags","blobs_url":"https://api.github.com/repos/howl-anderson/addons/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/howl-anderson/addons/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/howl-anderson/addons/git/refs{/sha}","trees_url":"https://api.github.com/repos/howl-anderson/addons/git/trees{/sha}","statuses_url":"https://api.github.com/repos/howl-anderson/addons/statuses/{sha}","languages_url":"https://api.github.com/repos/howl-anderson/addons/languages","stargazers_url":"https://api.github.com/repos/howl-anderson/addons/stargazers","contributors_url":"https://api.github.com/repos/howl-anderson/addons/contributors","subscribers_url":"https://api.github.com/repos/howl-anderson/addons/subscribers","subscription_url":"https://api.github.com/repos/howl-anderson/addons/subscription","commits_url":"https://api.github.com/repos/howl-anderson/addons/commits{/sha}","git_commits_url":"https://api.github.com/repos/howl-anderson/addons/git/commits{/sha}","comments_url":"https://api.github.com/repos/howl-anderson/addons/comments{/number}","issue_comment_url":"https://api.github.com/repos/howl-anderson/addons/issues/comments{/number}","contents_url":"https://api.github.com/repos/howl-anderson/addons/contents/{+path}","compare_url":"https://api.github.com/repos/howl-anderson/addons/compare/{base}...{head}","merges_url":"https://api.github.com/repos/howl-anderson/addons/merges","archive_url":"https://api.github.com/repos/howl-anderson/addons/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/howl-anderson/addons/downloads","issues_url":"https://api.github.com/repos/howl-anderson/addons/issues{/number}","pulls_url":"https://api.github.com/repos/howl-anderson/addons/pulls{/number}","milestones_url":"https://api.github.com/repos/howl-anderson/addons/milestones{/number}","notifications_url":"https://api.github.com/repos/howl-anderson/addons/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/howl-anderson/addons/labels{/name}","releases_url":"https://api.github.com/repos/howl-anderson/addons/releases{/id}","deployments_url":"https://api.github.com/repos/howl-anderson/addons/deployments","created_at":"2019-03-18T06:52:25Z","updated_at":"2019-04-02T03:13:55Z","pushed_at":"2019-12-23T09:48:40Z","git_url":"git://github.com/howl-anderson/addons.git","ssh_url":"git@github.com:howl-anderson/addons.git","clone_url":"https://github.com/howl-anderson/addons.git","svn_url":"https://github.com/howl-anderson/addons","homepage":null,"size":2127,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"disabled":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":2,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"tensorflow:master","ref":"master","sha":"41a286cc7e2d46913b9e7e1b9f2392d50ea417e3","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":159249114,"node_id":"MDEwOlJlcG9zaXRvcnkxNTkyNDkxMTQ=","name":"addons","full_name":"tensorflow/addons","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/addons","description":"Useful extra functionality for TensorFlow 2.0 maintained by SIG-addons","fork":false,"url":"https://api.github.com/repos/tensorflow/addons","forks_url":"https://api.github.com/repos/tensorflow/addons/forks","keys_url":"https://api.github.com/repos/tensorflow/addons/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tensorflow/addons/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tensorflow/addons/teams","hooks_url":"https://api.github.com/repos/tensorflow/addons/hooks","issue_events_url":"https://api.github.com/repos/tensorflow/addons/issues/events{/number}","events_url":"https://api.github.com/repos/tensorflow/addons/events","assignees_url":"https://api.github.com/repos/tensorflow/addons/assignees{/user}","branches_url":"https://api.github.com/repos/tensorflow/addons/branches{/branch}","tags_url":"https://api.github.com/repos/tensorflow/addons/tags","blobs_url":"https://api.github.com/repos/tensorflow/addons/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tensorflow/addons/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tensorflow/addons/git/refs{/sha}","trees_url":"https://api.github.com/repos/tensorflow/addons/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tensorflow/addons/statuses/{sha}","languages_url":"https://api.github.com/repos/tensorflow/addons/languages","stargazers_url":"https://api.github.com/repos/tensorflow/addons/stargazers","contributors_url":"https://api.github.com/repos/tensorflow/addons/contributors","subscribers_url":"https://api.github.com/repos/tensorflow/addons/subscribers","subscription_url":"https://api.github.com/repos/tensorflow/addons/subscription","commits_url":"https://api.github.com/repos/tensorflow/addons/commits{/sha}","git_commits_url":"https://api.github.com/repos/tensorflow/addons/git/commits{/sha}","comments_url":"https://api.github.com/repos/tensorflow/addons/comments{/number}","issue_comment_url":"https://api.github.com/repos/tensorflow/addons/issues/comments{/number}","contents_url":"https://api.github.com/repos/tensorflow/addons/contents/{+path}","compare_url":"https://api.github.com/repos/tensorflow/addons/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tensorflow/addons/merges","archive_url":"https://api.github.com/repos/tensorflow/addons/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tensorflow/addons/downloads","issues_url":"https://api.github.com/repos/tensorflow/addons/issues{/number}","pulls_url":"https://api.github.com/repos/tensorflow/addons/pulls{/number}","milestones_url":"https://api.github.com/repos/tensorflow/addons/milestones{/number}","notifications_url":"https://api.github.com/repos/tensorflow/addons/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tensorflow/addons/labels{/name}","releases_url":"https://api.github.com/repos/tensorflow/addons/releases{/id}","deployments_url":"https://api.github.com/repos/tensorflow/addons/deployments","created_at":"2018-11-26T23:57:17Z","updated_at":"2019-12-23T00:51:10Z","pushed_at":"2019-12-23T11:35:03Z","git_url":"git://github.com/tensorflow/addons.git","ssh_url":"git@github.com:tensorflow/addons.git","clone_url":"https://github.com/tensorflow/addons.git","svn_url":"https://github.com/tensorflow/addons","homepage":"","size":2408,"stargazers_count":573,"watchers_count":573,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":161,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":87,"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":161,"open_issues":87,"watchers":573,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/tensorflow/addons/pulls/377"},"html":{"href":"https://github.com/tensorflow/addons/pull/377"},"issue":{"href":"https://api.github.com/repos/tensorflow/addons/issues/377"},"comments":{"href":"https://api.github.com/repos/tensorflow/addons/issues/377/comments"},"review_comments":{"href":"https://api.github.com/repos/tensorflow/addons/pulls/377/comments"},"review_comment":{"href":"https://api.github.com/repos/tensorflow/addons/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/tensorflow/addons/pulls/377/commits"},"statuses":{"href":"https://api.github.com/repos/tensorflow/addons/statuses/b262357ba32c8c6b14bfb14a0914a7e69661736e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Squadrick"}}