diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml new file mode 100644 index 00000000000..0ca76b0677e --- /dev/null +++ b/.github/workflows/stale.yaml @@ -0,0 +1,49 @@ +# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. +# +# You can adjust the behavior by modifying this file. +# For more information, see: +# https://github.com/actions/stale +name: Mark stale issues and pull requests + +on: + schedule: + # Scheduled to run at 1.30 UTC everyday + - cron: '30 1 * * *' + workflow_dispatch: + +jobs: + stale: + + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + + steps: + - uses: actions/stale@v9 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + days-before-issue-stale: 14 + days-before-issue-close: 14 + stale-issue-label: "status:stale" + close-issue-reason: not_planned + any-of-labels: "awaiting-contributor-response,cla:no" + stale-issue-message: > + Marking this issue as stale since it has been open for 14 days with no activity. + This issue will be closed if no further activity occurs. + close-issue-message: > + This issue was closed because it has been inactive for 28 days. + Please post a new issue if you need further assistance. Thanks! + days-before-pr-stale: 14 + days-before-pr-close: 14 + stale-pr-label: "status:stale" + stale-pr-message: > + Marking this pull request as stale since it has been open for 14 days with no activity. + This PR will be closed if no further activity occurs. + close-pr-message: > + This pull request was closed because it has been inactive for 28 days. + Please open a new pull request if you need further assistance. Thanks! + # Label that can be assigned to issues to exclude them from being marked as stale + exempt-issue-labels: 'override-stale' + # Label that can be assigned to PRs to exclude them from being marked as stale + exempt-pr-labels: "override-stale" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1559b721f51..6f301eab782 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,9 +6,7 @@ This guide shows how to make contributions to [tensorflow.org](https://www.tenso See the [TensorFlow docs contributor guide](https://www.tensorflow.org/community/contribute/docs) -for guidance. For questions, the -[docs@tensorflow.org](https://groups.google.com/a/tensorflow.org/forum/#!forum/docs) -mailing list is available. +for guidance. For questions, check out [TensorFlow Forum](https://discuss.tensorflow.org/). Questions about TensorFlow usage are better addressed on [Stack Overflow](https://stackoverflow.com/questions/tagged/tensorflow) or the diff --git a/README.md b/README.md index 7b94ce5f90f..66b6d3fb065 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ To file a docs issue, use the issue tracker in the [tensorflow/tensorflow](https://github.com/tensorflow/tensorflow/issues/new?template=20-documentation-issue.md) repo. And join the TensorFlow documentation contributors on the -[docs@tensorflow.org mailing list](https://groups.google.com/a/tensorflow.org/forum/#!forum/docs). +[TensorFlow Forum](https://discuss.tensorflow.org/). ## Community translations diff --git a/site/en/community/contribute/docs.md b/site/en/community/contribute/docs.md index 29b2b5c9550..34b1619ca5d 100644 --- a/site/en/community/contribute/docs.md +++ b/site/en/community/contribute/docs.md @@ -32,7 +32,7 @@ To participate in the TensorFlow docs community: For details, use the [TensorFlow API docs contributor guide](docs_ref.md). This shows you how to find the -[source file](https://www.tensorflow.org/code/tensorflow/python/) +[source file](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/) and edit the symbol's docstring. Many API reference pages on tensorflow.org include a link to the source file @@ -53,9 +53,9 @@ main tensorflow/tensorflow repo. The reference documentation is generated from code comments and docstrings in the source code for -Python, -C++, and -Java. +Python, +C++, and +Java. Previous versions of the TensorFlow documentation are available as [rX.x branches](https://github.com/tensorflow/docs/branches) in the TensorFlow diff --git a/site/en/community/contribute/docs_ref.md b/site/en/community/contribute/docs_ref.md index fbf207a47f1..41fce4dde40 100644 --- a/site/en/community/contribute/docs_ref.md +++ b/site/en/community/contribute/docs_ref.md @@ -8,7 +8,7 @@ TensorFlow uses [DocTest](https://docs.python.org/3/library/doctest.html) to test code snippets in Python docstrings. The snippet must be executable Python code. To enable testing, prepend the line with `>>>` (three left-angle brackets). For example, here's a excerpt from the `tf.concat` function in the -[array_ops.py](https://www.tensorflow.org/code/tensorflow/python/ops/array_ops.py) +[array_ops.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/array_ops.py) source file: ``` @@ -178,7 +178,7 @@ There are two ways to test the code in the docstring locally: * If you are only changing the docstring of a class/function/method, then you can test it by passing that file's path to - [tf_doctest.py](https://www.tensorflow.org/code/tensorflow/tools/docs/tf_doctest.py). + [tf_doctest.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docs/tf_doctest.py). For example:
diff --git a/site/en/community/contribute/docs_style.md b/site/en/community/contribute/docs_style.md
index eba78afa896..10f18e52699 100644
--- a/site/en/community/contribute/docs_style.md
+++ b/site/en/community/contribute/docs_style.md
@@ -63,10 +63,10 @@ repository like this:
 * \[Basics\]\(../../guide/basics.ipynb\) produces
 [Basics](../../guide/basics.ipynb).
 
-This is the prefered approach because this way the links on
+This is the preferred approach because this way the links on
 [tensorflow.org](https://www.tensorflow.org),
-[GitHub](https://github.com/tensorflow/docs){:.external} and
-[Colab](https://github.com/tensorflow/docs/tree/master/site/en/guide/bazics.ipynb){:.external}
+[GitHub](https://github.com/tensorflow/docs) and
+[Colab](https://github.com/tensorflow/docs/tree/master/site/en/guide/bazics.ipynb)
 all work. Also, the reader stays in the same site when they click a link.
 
 Note: You should include the file extension—such as `.ipynb` or `.md`—for
@@ -83,10 +83,10 @@ To link to source code, use a link starting with
 by the file name starting at the GitHub root.
 
 When linking off of [tensorflow.org](https://www.tensorflow.org), include a
-`{:.external}` on the Markdown link so that the "external link" symbol is shown.
+`` on the Markdown link so that the "external link" symbol is shown.
 
-* `[GitHub](https://github.com/tensorflow/docs){:.external}` produces
-  [GitHub](https://github.com/tensorflow/docs){:.external}
+* `[GitHub](https://github.com/tensorflow/docs)` produces
+  [GitHub](https://github.com/tensorflow/docs)
 
 Do not include URI query parameters in the link:
 
diff --git a/site/en/guide/core/logistic_regression_core.ipynb b/site/en/guide/core/logistic_regression_core.ipynb
index 60e433c9759..5a9af324ad5 100644
--- a/site/en/guide/core/logistic_regression_core.ipynb
+++ b/site/en/guide/core/logistic_regression_core.ipynb
@@ -68,9 +68,9 @@
         "id": "DauaqJ7WhIhO"
       },
       "source": [
-        "This guide demonstrates how to use the [TensorFlow Core low-level APIs](https://www.tensorflow.org/guide/core) to perform [binary classification](https://developers.google.com/machine-learning/glossary#binary_classification){:.external} with [logistic regression](https://developers.google.com/machine-learning/crash-course/logistic-regression/){:.external}. It uses the [Wisconsin Breast Cancer Dataset](https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)){:.external} for tumor classification.\n",
+        "This guide demonstrates how to use the [TensorFlow Core low-level APIs](https://www.tensorflow.org/guide/core) to perform [binary classification](https://developers.google.com/machine-learning/glossary#binary_classification) with [logistic regression](https://developers.google.com/machine-learning/crash-course/logistic-regression/). It uses the [Wisconsin Breast Cancer Dataset](https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)) for tumor classification.\n",
         "\n",
-        "[Logistic regression](https://developers.google.com/machine-learning/crash-course/logistic-regression/){:.external} is one of the most popular algorithms for binary classification. Given a set of examples with features, the goal of logistic regression is to output values between 0 and 1, which can be interpreted as the probabilities of each example belonging to a particular  class. "
+        "[Logistic regression](https://developers.google.com/machine-learning/crash-course/logistic-regression/) is one of the most popular algorithms for binary classification. Given a set of examples with features, the goal of logistic regression is to output values between 0 and 1, which can be interpreted as the probabilities of each example belonging to a particular  class. "
       ]
     },
     {
@@ -81,7 +81,7 @@
       "source": [
         "## Setup\n",
         "\n",
-        "This tutorial uses [pandas](https://pandas.pydata.org){:.external} for reading a CSV file into a [DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html){:.external}, [seaborn](https://seaborn.pydata.org){:.external} for plotting a pairwise relationship in a dataset, [Scikit-learn](https://scikit-learn.org/){:.external} for computing a confusion matrix, and [matplotlib](https://matplotlib.org/){:.external} for creating visualizations."
+        "This tutorial uses [pandas](https://pandas.pydata.org) for reading a CSV file into a [DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html), [seaborn](https://seaborn.pydata.org) for plotting a pairwise relationship in a dataset, [Scikit-learn](https://scikit-learn.org/) for computing a confusion matrix, and [matplotlib](https://matplotlib.org/) for creating visualizations."
       ]
     },
     {
@@ -128,7 +128,7 @@
       "source": [
         "## Load the data\n",
         "\n",
-        "Next, load the [Wisconsin Breast Cancer Dataset](https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)){:.external} from the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/){:.external}. This dataset contains various features such as a tumor's radius, texture, and concavity."
+        "Next, load the [Wisconsin Breast Cancer Dataset](https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(original)) from the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/). This dataset contains various features such as a tumor's radius, texture, and concavity."
       ]
     },
     {
@@ -156,7 +156,7 @@
         "id": "A3VR1aTP92nV"
       },
       "source": [
-        "Read the dataset into a pandas [DataFrame](){:.external} using [`pandas.read_csv`](https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html){:.external}:"
+        "Read the dataset into a pandas [DataFrame]() using [`pandas.read_csv`](https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html):"
       ]
     },
     {
@@ -207,7 +207,7 @@
         "id": "s4-Wn2jzVC1W"
       },
       "source": [
-        "Split the dataset into training and test sets using [`pandas.DataFrame.sample`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sample.html){:.external}, [`pandas.DataFrame.drop`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop.html){:.external} and [`pandas.DataFrame.iloc`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.iloc.html){:.external}. Make sure to split the features from the target labels. The test set is used to evaluate your model's generalizability to unseen data."
+        "Split the dataset into training and test sets using [`pandas.DataFrame.sample`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sample.html), [`pandas.DataFrame.drop`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop.html) and [`pandas.DataFrame.iloc`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.iloc.html). Make sure to split the features from the target labels. The test set is used to evaluate your model's generalizability to unseen data."
       ]
     },
     {
@@ -277,7 +277,7 @@
         "\n",
         "This dataset contains the mean, standard error, and largest values for each of the 10 tumor measurements collected per example. The `\"diagnosis\"` target column is a categorical variable with `'M'` indicating a malignant tumor and `'B'` indicating a benign tumor diagnosis. This column needs to be converted into a numerical binary format for model training.\n",
         "\n",
-        "The [`pandas.Series.map`](https://pandas.pydata.org/docs/reference/api/pandas.Series.map.html){:.external} function is useful for mapping binary values to the categories.\n",
+        "The [`pandas.Series.map`](https://pandas.pydata.org/docs/reference/api/pandas.Series.map.html) function is useful for mapping binary values to the categories.\n",
         "\n",
         "The dataset should also be converted to a tensor with the `tf.convert_to_tensor` function after the preprocessing is complete."
       ]
@@ -301,7 +301,7 @@
         "id": "J4ubs136WLNp"
       },
       "source": [
-        "Use [`seaborn.pairplot`](https://seaborn.pydata.org/generated/seaborn.pairplot.html){:.external} to review the joint distribution of a few pairs of mean-based features from the training set and observe how they relate to the target:"
+        "Use [`seaborn.pairplot`](https://seaborn.pydata.org/generated/seaborn.pairplot.html) to review the joint distribution of a few pairs of mean-based features from the training set and observe how they relate to the target:"
       ]
     },
     {
@@ -343,7 +343,7 @@
         "id": "_8pDCIFjMla8"
       },
       "source": [
-        "Given the inconsistent ranges, it is beneficial to standardize the data such that each feature has a zero mean and unit variance. This process is called [normalization](https://developers.google.com/machine-learning/glossary#normalization){:.external}."
+        "Given the inconsistent ranges, it is beneficial to standardize the data such that each feature has a zero mean and unit variance. This process is called [normalization](https://developers.google.com/machine-learning/glossary#normalization)."
       ]
     },
     {
@@ -384,11 +384,11 @@
         "\n",
         "### Logistic regression fundamentals\n",
         "\n",
-        "Linear regression returns a linear combination of its inputs; this output is unbounded. The output of a [logistic regression](https://developers.google.com/machine-learning/glossary#logistic_regression){:.external} is in the `(0, 1)` range. For each example, it represents the probability that the example belongs to the _positive_ class.\n",
+        "Linear regression returns a linear combination of its inputs; this output is unbounded. The output of a [logistic regression](https://developers.google.com/machine-learning/glossary#logistic_regression) is in the `(0, 1)` range. For each example, it represents the probability that the example belongs to the _positive_ class.\n",
         "\n",
         "Logistic regression maps the continuous outputs of traditional linear regression, `(-∞, ∞)`, to probabilities, `(0, 1)`. This transformation is also symmetric so that flipping the sign of the linear output results in the inverse of the original probability.\n",
         "\n",
-        "Let $Y$ denote the probability of being in class `1` (the tumor is malignant). The desired mapping can be achieved by interpreting the linear regression output as the [log odds](https://developers.google.com/machine-learning/glossary#log-odds){:.external} ratio of being in class `1` as opposed to class `0`:\n",
+        "Let $Y$ denote the probability of being in class `1` (the tumor is malignant). The desired mapping can be achieved by interpreting the linear regression output as the [log odds](https://developers.google.com/machine-learning/glossary#log-odds) ratio of being in class `1` as opposed to class `0`:\n",
         "\n",
         "$$\\ln(\\frac{Y}{1-Y}) = wX + b$$\n",
         "\n",
@@ -396,7 +396,7 @@
         "\n",
         "$$Y = \\frac{e^{z}}{1 + e^{z}} = \\frac{1}{1 + e^{-z}}$$\n",
         "\n",
-        "The expression $\\frac{1}{1 + e^{-z}}$ is known as the [sigmoid function](https://developers.google.com/machine-learning/glossary#sigmoid_function){:.external} $\\sigma(z)$. Hence, the equation for logistic regression can be written as $Y = \\sigma(wX + b)$.\n",
+        "The expression $\\frac{1}{1 + e^{-z}}$ is known as the [sigmoid function](https://developers.google.com/machine-learning/glossary#sigmoid_function) $\\sigma(z)$. Hence, the equation for logistic regression can be written as $Y = \\sigma(wX + b)$.\n",
         "\n",
         "The dataset in this tutorial deals with a high-dimensional feature matrix. Therefore, the above equation must be rewritten in a matrix vector form as follows:\n",
         "\n",
@@ -437,7 +437,7 @@
       "source": [
         "### The log loss function\n",
         "\n",
-        "The  [log loss](https://developers.google.com/machine-learning/glossary#Log_Loss){:.external}, or binary cross-entropy loss, is the ideal loss function for a binary classification problem with logistic regression. For each example, the log loss quantifies the similarity between a predicted probability and the example's true value. It is determined by the following equation:\n",
+        "The  [log loss](https://developers.google.com/machine-learning/glossary#Log_Loss), or binary cross-entropy loss, is the ideal loss function for a binary classification problem with logistic regression. For each example, the log loss quantifies the similarity between a predicted probability and the example's true value. It is determined by the following equation:\n",
         "\n",
         "$$L = -\\frac{1}{m}\\sum_{i=1}^{m}y_i\\cdot\\log(\\hat{y}_i) + (1- y_i)\\cdot\\log(1 - \\hat{y}_i)$$\n",
         "\n",
@@ -471,7 +471,7 @@
       "source": [
         "### The gradient descent update rule\n",
         "\n",
-        "The TensorFlow Core APIs support automatic differentiation with `tf.GradientTape`. If you are curious about the mathematics behind the logistic regression [gradient updates](https://developers.google.com/machine-learning/glossary#gradient_descent){:.external}, here is a short explanation:\n",
+        "The TensorFlow Core APIs support automatic differentiation with `tf.GradientTape`. If you are curious about the mathematics behind the logistic regression [gradient updates](https://developers.google.com/machine-learning/glossary#gradient_descent), here is a short explanation:\n",
         "\n",
         "In the above equation for the log loss, recall that each $\\hat{y}_i$ can be rewritten in terms of the inputs as $\\sigma({\\mathrm{X_i}}w + b)$.\n",
         "\n",
@@ -754,7 +754,7 @@
         "\n",
         "For this problem, the FPR is the proportion of malignant tumor predictions amongst tumors that are actually benign. Conversely, the FNR is the proportion of benign tumor predictions among tumors that are actually malignant.\n",
         "\n",
-        "Compute a confusion matrix using [`sklearn.metrics.confusion_matrix`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html#sklearn.metrics.confusion_matrix){:.external}, which evaluates the accuracy of the classification, and use matplotlib to display the matrix:"
+        "Compute a confusion matrix using [`sklearn.metrics.confusion_matrix`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html#sklearn.metrics.confusion_matrix), which evaluates the accuracy of the classification, and use matplotlib to display the matrix:"
       ]
     },
     {
diff --git a/site/en/guide/core/quickstart_core.ipynb b/site/en/guide/core/quickstart_core.ipynb
index 6e7d824f548..70586fd3f0c 100644
--- a/site/en/guide/core/quickstart_core.ipynb
+++ b/site/en/guide/core/quickstart_core.ipynb
@@ -68,13 +68,13 @@
         "id": "04QgGZc9bF5D"
       },
       "source": [
-        "This quickstart tutorial demonstrates how you can use the [TensorFlow Core low-level APIs](https://www.tensorflow.org/guide/core) to build and train a multiple linear regression model that predicts fuel efficiency. It uses the [Auto MPG](https://archive.ics.uci.edu/ml/datasets/auto+mpg){:.external} dataset which contains fuel efficiency data for late-1970s and early 1980s automobiles.\n",
+        "This quickstart tutorial demonstrates how you can use the [TensorFlow Core low-level APIs](https://www.tensorflow.org/guide/core) to build and train a multiple linear regression model that predicts fuel efficiency. It uses the [Auto MPG](https://archive.ics.uci.edu/ml/datasets/auto+mpg) dataset which contains fuel efficiency data for late-1970s and early 1980s automobiles.\n",
         "\n",
         "You will follow the typical stages of a machine learning process:\n",
         "\n",
         "1. Load the dataset.\n",
         "2. Build an [input pipeline](../data.ipynb).\n",
-        "3. Build a multiple [linear regression](https://developers.google.com/machine-learning/glossary#linear-regression){:.external} model.\n",
+        "3. Build a multiple [linear regression](https://developers.google.com/machine-learning/glossary#linear-regression) model.\n",
         "4. Evaluate the performance of the model."
       ]
     },
@@ -114,7 +114,7 @@
       "source": [
         "## Load and preprocess the dataset\n",
         "\n",
-        "Next, you need to load and preprocess the [Auto MPG dataset](https://archive.ics.uci.edu/ml/datasets/auto+mpg){:.external} from the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/){:.external}. This dataset uses a variety of quantitative and categorical features such as cylinders, displacement, horsepower and weight to predict the fuel efficiencies of automobiles in the late-1970s and early 1980s.\n",
+        "Next, you need to load and preprocess the [Auto MPG dataset](https://archive.ics.uci.edu/ml/datasets/auto+mpg) from the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/). This dataset uses a variety of quantitative and categorical features such as cylinders, displacement, horsepower and weight to predict the fuel efficiencies of automobiles in the late-1970s and early 1980s.\n",
         "\n",
         "The dataset contains a few unknown values. Make sure to drop any missing values with `pandas.DataFrame.dropna`, and convert the dataset to a `tf.float32` tensor type with the `tf.convert_to_tensor` and `tf.cast` functions."
       ]
@@ -376,7 +376,7 @@
       "source": [
         "Next, write a training loop to iteratively update your model's parameters by making use of the MSE loss function and its gradients with respect to the input parameters.\n",
         "\n",
-        "This iterative method is referred to as [gradient descent](https://developers.google.com/machine-learning/glossary#gradient-descent){:.external}. At each iteration, the model's parameters are updated by taking a step in the opposite direction of their computed gradients. The size of this step is determined by the learning rate, which is a configurable hyperparameter. Recall that the gradient of a function indicates the direction of its steepest ascent; therefore, taking a step in the opposite direction indicates the direction of steepest descent, which ultimately helps to minimize the MSE loss function."
+        "This iterative method is referred to as [gradient descent](https://developers.google.com/machine-learning/glossary#gradient-descent). At each iteration, the model's parameters are updated by taking a step in the opposite direction of their computed gradients. The size of this step is determined by the learning rate, which is a configurable hyperparameter. Recall that the gradient of a function indicates the direction of its steepest ascent; therefore, taking a step in the opposite direction indicates the direction of steepest descent, which ultimately helps to minimize the MSE loss function."
       ]
     },
     {
@@ -434,7 +434,7 @@
         "id": "4mDAAPFqVVgn"
       },
       "source": [
-        "Plot the changes in MSE loss over time. Calculating performance metrics on a designated [validation set](https://developers.google.com/machine-learning/glossary#validation-set){:.external} or [test set](https://developers.google.com/machine-learning/glossary#test-set){:.external} ensures the model does not overfit to the training dataset and can generalize well to unseen data."
+        "Plot the changes in MSE loss over time. Calculating performance metrics on a designated [validation set](https://developers.google.com/machine-learning/glossary#validation-set) or [test set](https://developers.google.com/machine-learning/glossary#test-set) ensures the model does not overfit to the training dataset and can generalize well to unseen data."
       ]
     },
     {
diff --git a/site/en/guide/create_op.md b/site/en/guide/create_op.md
index 3c84204844c..fa4f573fa32 100644
--- a/site/en/guide/create_op.md
+++ b/site/en/guide/create_op.md
@@ -152,17 +152,17 @@ REGISTER_KERNEL_BUILDER(Name("ZeroOut").Device(DEVICE_CPU), ZeroOutOp);
 >   Important: Instances of your OpKernel may be accessed concurrently.
 >   Your `Compute` method must be thread-safe. Guard any access to class
 >   members with a mutex. Or better yet, don't share state via class members!
->   Consider using a [`ResourceMgr`](https://www.tensorflow.org/code/tensorflow/core/framework/resource_mgr.h)
+>   Consider using a [`ResourceMgr`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/resource_mgr.h)
 >   to keep track of op state.
 
 ### Multi-threaded CPU kernels
 
 To write a multi-threaded CPU kernel, the Shard function in
-[`work_sharder.h`](https://www.tensorflow.org/code/tensorflow/core/util/work_sharder.h)
+[`work_sharder.h`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/util/work_sharder.h)
 can be used. This function shards a computation function across the
 threads configured to be used for intra-op threading (see
 intra_op_parallelism_threads in
-[`config.proto`](https://www.tensorflow.org/code/tensorflow/core/protobuf/config.proto)).
+[`config.proto`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/protobuf/config.proto)).
 
 ### GPU kernels
 
@@ -519,13 +519,13 @@ This asserts that the input is a vector, and returns having set the
 
 *   The `context`, which can either be an `OpKernelContext` or
     `OpKernelConstruction` pointer (see
-    [`tensorflow/core/framework/op_kernel.h`](https://www.tensorflow.org/code/tensorflow/core/framework/op_kernel.h)),
+    [`tensorflow/core/framework/op_kernel.h`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/op_kernel.h)),
     for its `SetStatus()` method.
 *   The condition.  For example, there are functions for validating the shape
     of a tensor in
-    [`tensorflow/core/framework/tensor_shape.h`](https://www.tensorflow.org/code/tensorflow/core/framework/tensor_shape.h)
+    [`tensorflow/core/framework/tensor_shape.h`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/tensor_shape.h)
 *   The error itself, which is represented by a `Status` object, see
-    [`tensorflow/core/platform/status.h`](https://www.tensorflow.org/code/tensorflow/core/platform/status.h). A
+    [`tensorflow/core/platform/status.h`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/status.h). A
     `Status` has both a type (frequently `InvalidArgument`, but see the list of
     types) and a message.  Functions for constructing an error may be found in
     [`tensorflow/core/platform/errors.h`][validation-macros].
@@ -668,7 +668,7 @@ There are shortcuts for common type constraints:
 
 The specific lists of types allowed by these are defined by the functions (like
 `NumberTypes()`) in
-[`tensorflow/core/framework/types.h`](https://www.tensorflow.org/code/tensorflow/core/framework/types.h).
+[`tensorflow/core/framework/types.h`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/types.h).
 In this example the attr `t` must be one of the numeric types:
 
 ```c++
@@ -1226,7 +1226,7 @@ There are several ways to preserve backwards-compatibility.
     type into a list of varying types).
 
 The full list of safe and unsafe changes can be found in
-[`tensorflow/core/framework/op_compatibility_test.cc`](https://www.tensorflow.org/code/tensorflow/core/framework/op_compatibility_test.cc).
+[`tensorflow/core/framework/op_compatibility_test.cc`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/op_compatibility_test.cc).
 If you cannot make your change to an operation backwards compatible, then create
 a new operation with a new name with the new semantics.
 
@@ -1243,16 +1243,16 @@ made when TensorFlow changes major versions, and must conform to the
 You can implement different OpKernels and register one for CPU and another for
 GPU, just like you can [register kernels for different types](#polymorphism).
 There are several examples of kernels with GPU support in
-[`tensorflow/core/kernels/`](https://www.tensorflow.org/code/tensorflow/core/kernels/).
+[`tensorflow/core/kernels/`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/).
 Notice some kernels have a CPU version in a `.cc` file, a GPU version in a file
 ending in `_gpu.cu.cc`, and some code shared in common in a `.h` file.
 
 For example, the `tf.pad` has
 everything but the GPU kernel in [`tensorflow/core/kernels/pad_op.cc`][pad_op].
 The GPU kernel is in
-[`tensorflow/core/kernels/pad_op_gpu.cu.cc`](https://www.tensorflow.org/code/tensorflow/core/kernels/pad_op_gpu.cu.cc),
+[`tensorflow/core/kernels/pad_op_gpu.cu.cc`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/pad_op_gpu.cu.cc),
 and the shared code is a templated class defined in
-[`tensorflow/core/kernels/pad_op.h`](https://www.tensorflow.org/code/tensorflow/core/kernels/pad_op.h).
+[`tensorflow/core/kernels/pad_op.h`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/pad_op.h).
 We organize the code this way for two reasons: it allows you to share common
 code among the CPU and GPU implementations, and it puts the GPU implementation
 into a separate file so that it can be compiled only by the GPU compiler.
@@ -1273,16 +1273,16 @@ kept on the CPU, add a `HostMemory()` call to the kernel registration, e.g.:
 #### Compiling the kernel for the GPU device
 
 Look at
-[cuda_op_kernel.cu.cc](https://www.tensorflow.org/code/tensorflow/examples/adding_an_op/cuda_op_kernel.cu.cc)
+[cuda_op_kernel.cu.cc](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/adding_an_op/cuda_op_kernel.cu.cc)
 for an example that uses a CUDA kernel to implement an op. The
 `tf_custom_op_library` accepts a `gpu_srcs` argument in which the list of source
 files containing the CUDA kernels (`*.cu.cc` files) can be specified. For use
 with a binary installation of TensorFlow, the CUDA kernels have to be compiled
 with NVIDIA's `nvcc` compiler. Here is the sequence of commands you can use to
 compile the
-[cuda_op_kernel.cu.cc](https://www.tensorflow.org/code/tensorflow/examples/adding_an_op/cuda_op_kernel.cu.cc)
+[cuda_op_kernel.cu.cc](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/adding_an_op/cuda_op_kernel.cu.cc)
 and
-[cuda_op_kernel.cc](https://www.tensorflow.org/code/tensorflow/examples/adding_an_op/cuda_op_kernel.cc)
+[cuda_op_kernel.cc](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/adding_an_op/cuda_op_kernel.cc)
 into a single dynamically loadable library:
 
 ```bash
@@ -1412,7 +1412,7 @@ be set to the first input's shape. If the output is selected by its index as in
 
 There are a number of common shape functions
 that apply to many ops, such as `shape_inference::UnchangedShape` which can be
-found in [common_shape_fns.h](https://www.tensorflow.org/code/tensorflow/core/framework/common_shape_fns.h) and used as follows:
+found in [common_shape_fns.h](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/common_shape_fns.h) and used as follows:
 
 ```c++
 REGISTER_OP("ZeroOut")
@@ -1459,7 +1459,7 @@ provides access to the attributes of the op).
 
 Since shape inference is an optional feature, and the shapes of tensors may vary
 dynamically, shape functions must be robust to incomplete shape information for
-any of the inputs. The `Merge` method in [`InferenceContext`](https://www.tensorflow.org/code/tensorflow/core/framework/shape_inference.h)
+any of the inputs. The `Merge` method in [`InferenceContext`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/shape_inference.h)
 allows the caller to assert that two shapes are the same, even if either
 or both of them do not have complete information. Shape functions are defined
 for all of the core TensorFlow ops and provide many different usage examples.
@@ -1484,7 +1484,7 @@ If you have a complicated shape function, you should consider adding a test for
 validating that various input shape combinations produce the expected output
 shape combinations.  You can see examples of how to write these tests in some
 our
-[core ops tests](https://www.tensorflow.org/code/tensorflow/core/ops/array_ops_test.cc).
+[core ops tests](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/ops/array_ops_test.cc).
 (The syntax of `INFER_OK` and `INFER_ERROR` are a little cryptic, but try to be
 compact in representing input and output shape specifications in tests.  For
 now, see the surrounding comments in those tests to get a sense of the shape
@@ -1497,20 +1497,20 @@ To build a `pip` package for your op, see the
 guide shows how to build custom ops from the TensorFlow pip package instead
 of building TensorFlow from source.
 
-[core-array_ops]:https://www.tensorflow.org/code/tensorflow/core/ops/array_ops.cc
-[python-user_ops]:https://www.tensorflow.org/code/tensorflow/python/user_ops/user_ops.py
-[tf-kernels]:https://www.tensorflow.org/code/tensorflow/core/kernels/
-[user_ops]:https://www.tensorflow.org/code/tensorflow/core/user_ops/
-[pad_op]:https://www.tensorflow.org/code/tensorflow/core/kernels/pad_op.cc
-[standard_ops-py]:https://www.tensorflow.org/code/tensorflow/python/ops/standard_ops.py
-[standard_ops-cc]:https://www.tensorflow.org/code/tensorflow/cc/ops/standard_ops.h
-[python-BUILD]:https://www.tensorflow.org/code/tensorflow/python/BUILD
-[validation-macros]:https://www.tensorflow.org/code/tensorflow/core/platform/errors.h
-[op_def_builder]:https://www.tensorflow.org/code/tensorflow/core/framework/op_def_builder.h
-[register_types]:https://www.tensorflow.org/code/tensorflow/core/framework/register_types.h
-[FinalizeAttr]:https://www.tensorflow.org/code/tensorflow/core/framework/op_def_builder.cc
-[DataTypeString]:https://www.tensorflow.org/code/tensorflow/core/framework/types.cc
-[python-BUILD]:https://www.tensorflow.org/code/tensorflow/python/BUILD
-[types-proto]:https://www.tensorflow.org/code/tensorflow/core/framework/types.proto
-[TensorShapeProto]:https://www.tensorflow.org/code/tensorflow/core/framework/tensor_shape.proto
-[TensorProto]:https://www.tensorflow.org/code/tensorflow/core/framework/tensor.proto
+[core-array_ops]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/ops/array_ops.cc
+[python-user_ops]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/user_ops/user_ops.py
+[tf-kernels]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/
+[user_ops]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/user_ops/
+[pad_op]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/pad_op.cc
+[standard_ops-py]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/standard_ops.py
+[standard_ops-cc]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/cc/ops/standard_ops.h
+[python-BUILD]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/BUILD
+[validation-macros]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/errors.h
+[op_def_builder]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/op_def_builder.h
+[register_types]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/register_types.h
+[FinalizeAttr]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/op_def_builder.cc
+[DataTypeString]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/types.cc
+[python-BUILD]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/BUILD
+[types-proto]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/types.proto
+[TensorShapeProto]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/tensor_shape.proto
+[TensorProto]:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/tensor.proto
diff --git a/site/en/guide/data.ipynb b/site/en/guide/data.ipynb
index d9c8fff8982..739ef131005 100644
--- a/site/en/guide/data.ipynb
+++ b/site/en/guide/data.ipynb
@@ -1385,7 +1385,7 @@
         "The simplest form of batching stacks `n` consecutive elements of a dataset into\n",
         "a single element. The `Dataset.batch()` transformation does exactly this, with\n",
         "the same constraints as the `tf.stack()` operator, applied to each component\n",
-        "of the elements: i.e. for each component *i*, all elements must have a tensor\n",
+        "of the elements: i.e., for each component *i*, all elements must have a tensor\n",
         "of the exact same shape."
       ]
     },
diff --git a/site/en/guide/dtensor_overview.ipynb b/site/en/guide/dtensor_overview.ipynb
index 95a50f3465f..1b55ee0283f 100644
--- a/site/en/guide/dtensor_overview.ipynb
+++ b/site/en/guide/dtensor_overview.ipynb
@@ -281,7 +281,7 @@
         "id": "Eyp_qOSyvieo"
       },
       "source": [
-        "\"A\n"
+        "\"A\n"
       ]
     },
     {
@@ -303,7 +303,7 @@
       "source": [
         "For the same `mesh_2d`, the layout `Layout([\"x\", dtensor.UNSHARDED], mesh_2d)` is a layout for a rank-2 `Tensor` that is replicated across `\"y\"`, and whose first axis is sharded on mesh dimension `x`.\n",
         "\n",
-        "\"A\n"
+        "\"A\n"
       ]
     },
     {
diff --git a/site/en/guide/estimator.ipynb b/site/en/guide/estimator.ipynb
index e58ef46cf86..05e8fb4012a 100644
--- a/site/en/guide/estimator.ipynb
+++ b/site/en/guide/estimator.ipynb
@@ -68,7 +68,7 @@
         "id": "rILQuAiiRlI7"
       },
       "source": [
-        "> Warning: Estimators are not recommended for new code.  Estimators run `v1.Session`-style code which is more difficult to write correctly, and can behave unexpectedly, especially when combined with TF 2 code. Estimators do fall under our [compatibility guarantees](https://tensorflow.org/guide/versions), but will receive no fixes other than security vulnerabilities. See the [migration guide](https://tensorflow.org/guide/migrate) for details."
+        "> Warning: TensorFlow 2.15 included the final release of the `tf-estimator` package. Estimators will not be available in TensorFlow 2.16 or after. See the [migration guide](https://www.tensorflow.org/guide/migrate/migrating_estimator) for more information about how to convert off of Estimators."
       ]
     },
     {
diff --git a/site/en/guide/extension_type.ipynb b/site/en/guide/extension_type.ipynb
index 76e20e8d283..7e8edeea7c9 100644
--- a/site/en/guide/extension_type.ipynb
+++ b/site/en/guide/extension_type.ipynb
@@ -1822,13 +1822,17 @@
         "                  transpose_a=False, transpose_b=False,\n",
         "                  adjoint_a=False, adjoint_b=False,\n",
         "                  a_is_sparse=False, b_is_sparse=False,\n",
-        "                  output_type=None):\n",
+        "                  output_type=None,\n",
+        "                  grad_a=False, grad_b=False,\n",
+        "                  name=None,\n",
+        "                  ):\n",
         "  if isinstance(a, MaskedTensor):\n",
         "    a = a.with_default(0)\n",
         "  if isinstance(b, MaskedTensor):\n",
         "    b = b.with_default(0)\n",
         "  return tf.matmul(a, b, transpose_a, transpose_b, adjoint_a,\n",
-        "                   adjoint_b, a_is_sparse, b_is_sparse, output_type)"
+        "                   adjoint_b, a_is_sparse, b_is_sparse,\n",
+        "                   output_type)"
       ]
     },
     {
diff --git a/site/en/guide/function.ipynb b/site/en/guide/function.ipynb
index 9f3d93db057..f4677f21eb8 100644
--- a/site/en/guide/function.ipynb
+++ b/site/en/guide/function.ipynb
@@ -146,7 +146,7 @@
       "source": [
         "### Usage\n",
         "\n",
-        "A `Function` you define (for example by applying the `@tf.function` decorator) is just like a core TensorFlow operation: You can execute it eagerly; you can compute gradients; and so on."
+        "A `tf.function` that you define (for example by applying the `@tf.function` decorator) is just like a core TensorFlow operation: You can execute it eagerly; you can compute gradients; and so on."
       ]
     },
     {
@@ -157,7 +157,7 @@
       },
       "outputs": [],
       "source": [
-        "@tf.function  # The decorator converts `add` into a `Function`.\n",
+        "@tf.function  # The decorator converts `add` into a `PolymorphicFunction`.\n",
         "def add(a, b):\n",
         "  return a + b\n",
         "\n",
@@ -184,7 +184,7 @@
         "id": "ocWZvqrmHnmX"
       },
       "source": [
-        "You can use `Function`s inside other `Function`s."
+        "You can use `tf.function`s inside other `tf.function`s."
       ]
     },
     {
@@ -208,7 +208,7 @@
         "id": "piBhz7gYsHqU"
       },
       "source": [
-        "`Function`s can be faster than eager code, especially for graphs with many small ops. But for graphs with a few expensive ops (like convolutions), you may not see much speedup.\n"
+        "`tf.function`s can be faster than eager code, especially for graphs with many small ops. But for graphs with a few expensive ops (like convolutions), you may not see much speedup.\n"
       ]
     },
     {
@@ -242,7 +242,7 @@
       "source": [
         "### Tracing\n",
         "\n",
-        "This section exposes how `Function` works under the hood, including implementation details *which may change in the future*. However, once you understand why and when tracing happens, it's much easier to use `tf.function` effectively!"
+        "This section exposes how `tf.function` works under the hood, including implementation details *which may change in the future*. However, once you understand why and when tracing happens, it's much easier to use `tf.function` effectively!"
       ]
     },
     {
@@ -253,17 +253,17 @@
       "source": [
         "#### What is \"tracing\"?\n",
         "\n",
-        "A `Function` runs your program in a [TensorFlow Graph](https://www.tensorflow.org/guide/intro_to_graphs#what_are_graphs). However, a `tf.Graph` cannot represent all the things that you'd write in an eager TensorFlow program. For instance, Python supports polymorphism, but `tf.Graph` requires its inputs to have a specified data type and dimension. Or you may perform side tasks like reading command-line arguments, raising an error, or working with a more complex Python object; none of these things can run in a `tf.Graph`.\n",
+        "A `tf.function` runs your program in a [TensorFlow Graph](https://www.tensorflow.org/guide/intro_to_graphs#what_are_graphs). However, a `tf.Graph` cannot represent all the things that you'd write in an eager TensorFlow program. For instance, Python supports polymorphism, but `tf.Graph` requires its inputs to have a specified data type and dimension. Or you may perform side tasks like reading command-line arguments, raising an error, or working with a more complex Python object; none of these things can run in a `tf.Graph`.\n",
         "\n",
-        "`Function` bridges this gap by separating your code in two stages:\n",
+        "`tf.function` bridges this gap by separating your code in two stages:\n",
         "\n",
-        "  1)  In the first stage, referred to as \"**tracing**\", `Function` creates a new `tf.Graph`. Python code runs normally, but all TensorFlow operations (like adding two Tensors) are *deferred*: they are captured by the `tf.Graph` and not run.\n",
+        "  1)  In the first stage, referred to as \"**tracing**\", `tf.function` creates a new `tf.Graph`. Python code runs normally, but all TensorFlow operations (like adding two Tensors) are *deferred*: they are captured by the `tf.Graph` and not run.\n",
         "\n",
         "  2) In the second stage, a `tf.Graph` which contains everything that was deferred in the first stage is run. This stage is much faster than the tracing stage.\n",
         "\n",
-        "Depending on its inputs, `Function` will not always run the first stage when it is called.  See [\"Rules of tracing\"](#rules_of_tracing) below to get a better sense of how it makes that determination. Skipping the first stage and only executing the second stage is what gives you TensorFlow's high performance.\n",
+        "Depending on its inputs, `tf.function` will not always run the first stage when it is called.  See [\"Rules of tracing\"](#rules_of_tracing) below to get a better sense of how it makes that determination. Skipping the first stage and only executing the second stage is what gives you TensorFlow's high performance.\n",
         "\n",
-        "When `Function` does decide to trace, the tracing stage is immediately followed by the second stage, so calling the `Function` both creates and runs the `tf.Graph`. Later you will see how you can run only the tracing stage with [`get_concrete_function`](#obtaining_concrete_functions)."
+        "When `tf.function` does decide to trace, the tracing stage is immediately followed by the second stage, so calling the `tf.function` both creates and runs the `tf.Graph`. Later you will see how you can run only the tracing stage with [`get_concrete_function`](#obtaining_concrete_functions)."
       ]
     },
     {
@@ -272,7 +272,7 @@
         "id": "K7scSzLx662f"
       },
       "source": [
-        "When you pass arguments of different types into a `Function`, both stages are run:\n"
+        "When you pass arguments of different types into a `tf.function`, both stages are run:\n"
       ]
     },
     {
@@ -302,7 +302,7 @@
         "id": "QPfouGUQrcNb"
       },
       "source": [
-        "Note that if you repeatedly call a `Function` with the same argument type, TensorFlow will skip the tracing stage and reuse a previously traced graph, as the generated graph would be identical."
+        "Note that if you repeatedly call a `tf.function` with the same argument type, TensorFlow will skip the tracing stage and reuse a previously traced graph, as the generated graph would be identical."
       ]
     },
     {
@@ -346,10 +346,11 @@
         "So far, you've seen that `tf.function` creates a cached, dynamic dispatch layer over TensorFlow's graph tracing logic. To be more specific about the terminology:\n",
         "\n",
         "- A `tf.Graph` is the raw, language-agnostic, portable representation of a TensorFlow computation.\n",
-        "- A `ConcreteFunction` wraps a `tf.Graph`.\n",
-        "- A `Function` manages a cache of `ConcreteFunction`s and picks the right one for your inputs.\n",
-        "- `tf.function` wraps a Python function, returning a `Function` object.\n",
-        "- **Tracing** creates a `tf.Graph` and wraps it in a `ConcreteFunction`, also known as a **trace.**\n"
+        "- Tracing is the process through which new `tf.Graph`s are generated from Python code.\n",
+        "- An instance of `tf.Graph` is specialized to the specific input types it was traced with. Differing types require retracing.\n",
+        "- Each traced `tf.Graph` has a corresponding `ConcreteFunction`.\n",
+        "- A `tf.function` manages a cache of `ConcreteFunction`s and picks the right one for your inputs.\n",
+        "- `tf.function` wraps the Python function that will be traced, returning a `tf.types.experimental.PolymorphicFunction` object.\n"
       ]
     },
     {
@@ -360,7 +361,7 @@
       "source": [
         "#### Rules of tracing\n",
         "\n",
-        "When called, a `Function` matches the call arguments to existing `ConcreteFunction`s using `tf.types.experimental.TraceType` of each argument. If a matching `ConcreteFunction` is found, the call is dispatched to it. If no match is found, a new `ConcreteFunction` is traced.\n",
+        "When called, a `tf.function` first evaluates the type of each input argument using the `tf.types.experimental.TraceType` of each argument. This is used to construct a `tf.types.experimental.FunctionType` describing the signature of the desired `ConcreteFunction`. We compare this `FunctionType` to the `FunctionType`s of existing `ConcreteFunction`s. If a matching `ConcreteFunction` is found, the call is dispatched to it. If no match is found, a new `ConcreteFunction` is traced for the desired `FunctionType`.\n",
         "\n",
         "If multiple matches are found, the most specific signature is chosen. Matching is done by [subtyping](https://en.wikipedia.org/wiki/Subtyping), much like normal function calls in C++ or Java, for instance. For example, `TensorShape([1, 2])` is a subtype of `TensorShape([None, None])` and so a call to the tf.function with `TensorShape([1, 2])` can be dispatched to the `ConcreteFunction` produced with `TensorShape([None, None])` but if a `ConcreteFunction` with `TensorShape([1, None])` also exists then it will be prioritized since it is more specific.\n",
         "\n",
@@ -369,13 +370,13 @@
         "* For `Variable`, the type is similar to `Tensor`, but also includes a unique resource ID of the variable, necessary to correctly wire control dependencies\n",
         "* For Python primitive values, the type corresponds to the **value** itself. For example, the `TraceType` of the value `3` is `LiteralTraceType<3>`, not `int`.\n",
         "* For Python ordered containers such as `list` and `tuple`, etc., the type is parameterized by the types of their elements; for example, the type of `[1, 2]` is `ListTraceType, LiteralTraceType<2>>` and the type for   `[2, 1]` is `ListTraceType, LiteralTraceType<1>>` which is different.\n",
-        "* For Python mappings such as `dict`, the type is also a mapping from the same keys but to the types of values instead the actual values. For example, the type of `{1: 2, 3: 4}`, is `MappingTraceType<>>, >>>`. However, unlike ordered containers, `{1: 2, 3: 4}` and `{3: 4, 1: 2}` have equivalent types.\n",
-        "* For Python objects which implement the `__tf_tracing_type__` method, the type is whatever that method returns\n",
-        "* For any other Python objects, the type is a generic `TraceType`, its matching precedure is:\n",
-        "  * First it checks if the object is the same object used in the previous trace (using python `id()` or `is`). Note that this will still match if the object has changed, so if you use python objects as `tf.function` arguments it's best to use *immutable* ones.\n",
-        "  * Next it checks if the object is equal to the object used in the previous trace (using python `==`).\n",
+        "* For Python mappings such as `dict`, the type is also a mapping from the same keys but to the types of values instead of the actual values. For example, the type of `{1: 2, 3: 4}`, is `MappingTraceType<>>, >>>`. However, unlike ordered containers, `{1: 2, 3: 4}` and `{3: 4, 1: 2}` have equivalent types.\n",
+        "* For Python objects which implement the `__tf_tracing_type__` method, the type is whatever that method returns.\n",
+        "* For any other Python objects, the type is a generic `TraceType`, and the matching precedure is:\n",
+        "  * First it checks if the object is the same object used in the previous trace (using Python `id()` or `is`). Note that this will still match if the object has changed, so if you use Python objects as `tf.function` arguments it's best to use *immutable* ones.\n",
+        "  * Next it checks if the object is equal to the object used in the previous trace (using Python `==`).\n",
         "      \n",
-        "  Note that this procedure only keeps a [weakref](https://docs.python.org/3/library/weakref.html) to the object and hence only works as long as the object is in scope/not deleted.)\n"
+        "  Note that this procedure only keeps a [weakref](https://docs.python.org/3/library/weakref.html) to the object and hence only works as long as the object is in scope/not deleted.\n"
       ]
     },
     {
@@ -384,7 +385,7 @@
         "id": "GNNN4lgRzpIs"
       },
       "source": [
-        "Note: `TraceType` is based on the `Function` input parameters so changes to global and [free variables](https://docs.python.org/3/reference/executionmodel.html#binding-of-names) alone will not create a new trace. See [this section](#depending_on_python_global_and_free_variables) for recommended practices when dealing with Python global and free variables."
+        "Note: `TraceType` is based on the `tf.function` input parameters so changes to global and [free variables](https://docs.python.org/3/reference/executionmodel.html#binding-of-names) alone will not create a new trace. See [this section](#depending_on_python_global_and_free_variables) for recommended practices when dealing with Python global and free variables."
       ]
     },
     {
@@ -395,7 +396,7 @@
       "source": [
         "### Controlling retracing\n",
         "\n",
-        "Retracing, which is when your `Function` creates more than one trace, helps ensure that TensorFlow generates correct graphs for each set of inputs. However, tracing is an expensive operation! If your `Function` retraces a new graph for every call, you'll find that your code executes more slowly than if you didn't use `tf.function`.\n",
+        "Retracing, which is when your `tf.function` creates more than one trace, helps ensure that TensorFlow generates correct graphs for each set of inputs. However, tracing is an expensive operation! If your `tf.function` retraces a new graph for every call, you'll find that your code executes more slowly than if you didn't use `tf.function`.\n",
         "\n",
         "To control the tracing behavior, you can use the following techniques:"
       ]
@@ -406,7 +407,9 @@
         "id": "EUtycWJa34TT"
       },
       "source": [
-        "#### Pass a fixed `input_signature` to `tf.function`"
+        "#### Pass a fixed `input_signature` to `tf.function`\n",
+        "\n",
+        "This forces `tf.function` to constrain itself to only one `tf.types.experimental.FunctionType` composed of the types enumerated by the `input_signature`. Calls that cannot be dispatched to this `FunctionType` will throw an error."
       ]
     },
     {
@@ -440,7 +443,7 @@
       "source": [
         "#### Use unknown dimensions for flexibility\n",
         "\n",
-        "  Since TensorFlow matches tensors based on their shape, using a `None` dimension as a wildcard will allow `Function`s to reuse traces for variably-sized input. Variably-sized input can occur if you have sequences of different length, or images of different sizes for each batch. You can check out the [Transformer](https://www.tensorflow.org/text/tutorials/transformer) and [Deep Dream](../tutorials/generative/deepdream.ipynb) tutorials for examples."
+        "  Since TensorFlow matches tensors based on their shape, using a `None` dimension as a wildcard will allow `tf.function`s to reuse traces for variably-sized input. Variably-sized input can occur if you have sequences of different length, or images of different sizes for each batch. You can check out the [Transformer](https://www.tensorflow.org/text/tutorials/transformer) and [Deep Dream](../tutorials/generative/deepdream.ipynb) tutorials for examples."
       ]
     },
     {
@@ -461,6 +464,41 @@
         "print(g(tf.constant([1, 2, 3, 4, 5])))\n"
       ]
     },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "37cc12f93cbd"
+      },
+      "source": [
+        "#### Use `reduce_retracing` for automatic flexibility\n",
+        "\n",
+        "When `reduce_retracing` is enabled, `tf.function` automatically identifies supertypes of the input types it is observing and chooses to trace more generalized graphs automatically. It is less efficient than setting the `input_signature` directly but useful when many types need to be supported."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "0403fae03a1f"
+      },
+      "outputs": [],
+      "source": [
+        "@tf.function(reduce_retracing=True)\n",
+        "def g(x):\n",
+        "  print('Tracing with', x)\n",
+        "  return x\n",
+        "\n",
+        "# Traces once.\n",
+        "print(g(tf.constant([1, 2, 3])))\n",
+        "\n",
+        "# Traces again, but more generalized this time.\n",
+        "print(g(tf.constant([1, 2, 3, 4, 5])))\n",
+        "\n",
+        "# No more tracing!\n",
+        "print(g(tf.constant([1, 2, 3, 4, 5, 6, 7])))\n",
+        "print(g(tf.constant([1, 2, 3, 4, 5, 6, 7, 8, 9])))"
+      ]
+    },
     {
       "cell_type": "markdown",
       "metadata": {
@@ -508,7 +546,7 @@
         "id": "4pJqkDR_Q2wz"
       },
       "source": [
-        "If you need to force retracing, create a new `Function`. Separate `Function` objects are guaranteed not to share traces."
+        "If you need to force retracing, create a new `tf.function`. Separate `tf.function` objects are guaranteed not to share traces."
       ]
     },
     {
@@ -537,7 +575,7 @@
         "\n",
         "Where possible, you should prefer converting the Python type into a `tf.experimental.ExtensionType` instead. Moreover, the `TraceType` of an `ExtensionType` is the `tf.TypeSpec` associated with it. Therefore, if needed, you can simply override the default `tf.TypeSpec` to take control of an `ExtensionType`'s `Tracing Protocol`. Refer to the _Customizing the ExtensionType's TypeSpec_ section in the [Extension types](extension_type.ipynb) guide for details.\n",
         "\n",
-        "Otherwise, for direct control over when `Function` should retrace in regards to a particular Python type, you can implement the `Tracing Protocol` for it yourself."
+        "Otherwise, for direct control over when `tf.function` should retrace in regards to a particular Python type, you can implement the `Tracing Protocol` for it yourself."
       ]
     },
     {
@@ -689,8 +727,7 @@
       },
       "outputs": [],
       "source": [
-        "print(double_strings.structured_input_signature)\n",
-        "print(double_strings.structured_outputs)"
+        "print(double_strings.function_type)"
       ]
     },
     {
@@ -761,7 +798,7 @@
       "source": [
         "### Obtaining graphs\n",
         "\n",
-        "Each concrete function is a callable wrapper around a `tf.Graph`. Although retrieving the actual `tf.Graph` object is not something you'll normally need to do, you can obtain it easily from any concrete function."
+        "Although retrieving the actual `tf.Graph` object is not something you'll normally need to do, you can obtain it easily from any concrete function."
       ]
     },
     {
@@ -777,6 +814,36 @@
         "  print(f'{node.input} -> {node.name}')\n"
       ]
     },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "2d49c486ccd4"
+      },
+      "source": [
+        "In reality, `tf.Graph`s are not directly callable. We actually use an `tf.types.experimental.AtomicFunction` to perform the computations described by the `tf.Graph`. You can access the `AtomicFunction` describing the traced `tf.Graph` and call it directly instead of the `ConcreteFunction`:"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "4c3879aa0be0"
+      },
+      "outputs": [],
+      "source": [
+        "atomic_fn = double_strings.inference_fn\n",
+        "atomic_fn(tf.constant(\"a\"))"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "c3bd1036c18c"
+      },
+      "source": [
+        "This has the advantage of having lower Python overhead for high-performance scenarios. But it should only be used for forward inference (no gradient support), and captured tensor values (if any) would need to be explicitly supplied."
+      ]
+    },
     {
       "cell_type": "markdown",
       "metadata": {
@@ -833,7 +900,7 @@
         "id": "KxwJ8znPI0Cg"
       },
       "source": [
-        "If you're curious you can inspect the code autograph generates."
+        "If you're curious you can inspect the code AutoGraph generates."
       ]
     },
     {
@@ -1029,7 +1096,7 @@
       "source": [
         "## Limitations\n",
         "\n",
-        "TensorFlow `Function` has a few limitations by design that you should be aware of when converting a Python function to a `Function`."
+        "`tf.function` has a few limitations by design that you should be aware of when converting a Python function to a `tf.function`."
       ]
     },
     {
@@ -1040,7 +1107,7 @@
       "source": [
         "### Executing Python side effects\n",
         "\n",
-        "Side effects, like printing, appending to lists, and mutating globals, can behave unexpectedly inside a `Function`, sometimes executing twice or not all. They only happen the first time you call a `Function` with a set of inputs.  Afterwards, the traced `tf.Graph` is reexecuted, without executing the Python code.\n",
+        "Side effects, like printing, appending to lists, and mutating globals, can behave unexpectedly inside a `tf.function`, sometimes executing twice or not all. They only happen the first time you call a `tf.function` with a set of inputs. Afterwards, the traced `tf.Graph` is reexecuted, without executing the Python code.\n",
         "\n",
         "The general rule of thumb is to avoid relying on Python side effects in your logic and only use them to debug your traces. Otherwise, TensorFlow APIs like `tf.data`, `tf.print`, `tf.summary`, `tf.Variable.assign`, and `tf.TensorArray` are the best way to ensure your code will be executed by the TensorFlow runtime with each call."
       ]
@@ -1069,7 +1136,7 @@
         "id": "e1I0dPiqTV8H"
       },
       "source": [
-        "If you would like to execute Python code during each invocation of a `Function`, `tf. py_function` is an exit hatch. The drawbacks of `tf.py_function` are that it's not portable or particularly performant, cannot be saved with SavedModel, and does not work well in distributed (multi-GPU, TPU) setups. Also, since `tf.py_function` has to be wired into the graph, it casts all inputs/outputs to tensors."
+        "If you would like to execute Python code during each invocation of a `tf.function`, `tf. py_function` is an exit hatch. The drawbacks of `tf.py_function` are that it's not portable or particularly performant, cannot be saved with `SavedModel`, and does not work well in distributed (multi-GPU, TPU) setups. Also, since `tf.py_function` has to be wired into the graph, it casts all inputs/outputs to tensors."
       ]
     },
     {
@@ -1170,7 +1237,7 @@
         "id": "5eZTFRv_k_nR"
       },
       "source": [
-        "Sometimes unexpected behaviors are very hard to notice. In the example below, the `counter` is intended to safeguard the increment of a variable. However because it is a python integer and not a TensorFlow object, it's value is captured during the first trace. When the `tf.function` is used, the `assign_add` will be recorded unconditionally in the underlying graph. Therefore `v` will increase by 1, every time the `tf.function` is called. This issue is common among users that try to migrate their Grpah-mode Tensorflow code to Tensorflow 2 using `tf.function` decorators, when python side-effects (the `counter` in the example) are used to determine what ops to run (`assign_add` in the example). Usually, users realize this only after seeing suspicious numerical results, or significantly lower performance than expected (e.g. if the guarded operation is very costly)."
+        "Sometimes unexpected behaviors are very hard to notice. In the example below, the `counter` is intended to safeguard the increment of a variable. However because it is a python integer and not a TensorFlow object, it's value is captured during the first trace. When the `tf.function` is used, the `assign_add` will be recorded unconditionally in the underlying graph. Therefore `v` will increase by 1, every time the `tf.function` is called. This issue is common among users that try to migrate their Graph-mode Tensorflow code to Tensorflow 2 using `tf.function` decorators, when python side-effects (the `counter` in the example) are used to determine what ops to run (`assign_add` in the example). Usually, users realize this only after seeing suspicious numerical results, or significantly lower performance than expected (e.g. if the guarded operation is very costly)."
       ]
     },
     {
@@ -1243,7 +1310,7 @@
         "id": "pbFG5CX4LwQA"
       },
       "source": [
-        "In summary, as a rule of thumb, you should avoid mutating python objects such as integers or containers like lists that live outside the `Function`. Instead, use arguments and TF objects. For example, the section [\"Accumulating values in a loop\"](#accumulating_values_in_a_loop) has one example of how list-like operations can be implemented.\n",
+        "In summary, as a rule of thumb, you should avoid mutating python objects such as integers or containers like lists that live outside the `tf.function`. Instead, use arguments and TF objects. For example, the section [\"Accumulating values in a loop\"](#accumulating_values_in_a_loop) has one example of how list-like operations can be implemented.\n",
         "\n",
         "You can, in some cases, capture and manipulate state if it is a [`tf.Variable`](https://www.tensorflow.org/guide/variable). This is how the weights of Keras models are updated with repeated calls to the same `ConcreteFunction`."
       ]
@@ -1437,7 +1504,7 @@
       "source": [
         "### Recursive tf.functions are not supported\n",
         "\n",
-        "Recursive `Function`s are not supported and could cause infinite loops. For example,"
+        "Recursive `tf.function`s are not supported and could cause infinite loops. For example,"
       ]
     },
     {
@@ -1465,7 +1532,7 @@
         "id": "LyRyooKGUxNV"
       },
       "source": [
-        "Even if a recursive `Function` seems to work, the python function will be traced multiple times and could have performance implication. For example,"
+        "Even if a recursive `tf.function` seems to work, the Python function will be traced multiple times and could have performance implications. For example,"
       ]
     },
     {
@@ -1495,7 +1562,7 @@
       "source": [
         "## Known Issues\n",
         "\n",
-        "If your `Function` is not evaluating correctly, the error may be explained by these known issues which are planned to be fixed in the future."
+        "If your `tf.function` is not evaluating correctly, the error may be explained by these known issues which are planned to be fixed in the future."
       ]
     },
     {
@@ -1506,7 +1573,7 @@
       "source": [
         "### Depending on Python global and free variables\n",
         "\n",
-        "`Function` creates a new `ConcreteFunction` when called with a new value of a Python argument. However, it does not do that for the Python closure, globals, or nonlocals of that `Function`. If their value changes in between calls to the `Function`, the `Function` will still use the values they had when it was traced. This is different from how regular Python functions work.\n",
+        "`tf.function` creates a new `ConcreteFunction` when called with a new value of a Python argument. However, it does not do that for the Python closure, globals, or nonlocals of that `tf.function`. If their value changes in between calls to the `tf.function`, the `tf.function` will still use the values they had when it was traced. This is different from how regular Python functions work.\n",
         "\n",
         "For that reason, you should follow a functional programming style that uses arguments instead of closing over outer names."
       ]
@@ -1552,7 +1619,7 @@
         "id": "ZoPg5w1Pjqnb"
       },
       "source": [
-        "Another way to update a global value, is to make it a `tf.Variable` and use the `Variable.assign` method instead.\n"
+        "Another way to update a global value is to make it a `tf.Variable` and use the `Variable.assign` method instead.\n"
       ]
     },
     {
@@ -1648,11 +1715,11 @@
         "id": "Ytcgg2qFWaBF"
       },
       "source": [
-        "Using the same `Function` to evaluate the modified instance of the model will be buggy since it still has the [same instance-based TraceType](#rules_of_tracing) as the original model.\n",
+        "Using the same `tf.function` to evaluate the modified instance of the model will be buggy since it still has the [same instance-based TraceType](#rules_of_tracing) as the original model.\n",
         "\n",
-        "For that reason, you're recommended to write your `Function` to avoid depending on mutable object attributes or implement the [Tracing Protocol](#use_the_tracing_protocol) for the objects to inform `Function` about such attributes.\n",
+        "For that reason, you're recommended to write your `tf.function` to avoid depending on mutable object attributes or implement the [Tracing Protocol](#use_the_tracing_protocol) for the objects to inform `tf.function` about such attributes.\n",
         "\n",
-        "If that is not possible, one workaround is to make new `Function`s each time you modify your object to force retracing:"
+        "If that is not possible, one workaround is to make new `tf.function`s each time you modify your object to force retracing:"
       ]
     },
     {
@@ -1668,7 +1735,7 @@
         "\n",
         "new_model = SimpleModel()\n",
         "evaluate_no_bias = tf.function(evaluate).get_concrete_function(new_model, x)\n",
-        "# Don't pass in `new_model`, `Function` already captured its state during tracing.\n",
+        "# Don't pass in `new_model`. `tf.function` already captured its state during tracing.\n",
         "print(evaluate_no_bias(x))"
       ]
     },
@@ -1682,7 +1749,7 @@
       "source": [
         "print(\"Adding bias!\")\n",
         "new_model.bias += 5.0\n",
-        "# Create new Function and ConcreteFunction since you modified new_model.\n",
+        "# Create new `tf.function` and `ConcreteFunction` since you modified `new_model`.\n",
         "evaluate_with_bias = tf.function(evaluate).get_concrete_function(new_model, x)\n",
         "print(evaluate_with_bias(x)) # Don't pass in `new_model`."
       ]
@@ -1739,7 +1806,7 @@
       "source": [
         "### Creating tf.Variables\n",
         "\n",
-        "`Function` only supports singleton `tf.Variable`s created once on the first call, and reused across subsequent function calls. The code snippet below would create a new `tf.Variable` in every function call, which results in a `ValueError` exception.\n",
+        "`tf.function` only supports singleton `tf.Variable`s created once on the first call, and reused across subsequent function calls. The code snippet below would create a new `tf.Variable` in every function call, which results in a `ValueError` exception.\n",
         "\n",
         "Example:"
       ]
@@ -1800,7 +1867,7 @@
       },
       "source": [
         "#### Using with multiple Keras optimizers\n",
-        "You may encounter `ValueError: tf.function only supports singleton tf.Variables created on the first call.` when using more than one Keras optimizer with a `tf.function`. This error occurs because optimizers internally create `tf.Variables` when they apply gradients for the first time."
+        "You may encounter `ValueError: tf.function only supports singleton tf.Variables created on the first call.` when using more than one Keras optimizer with a `tf.function`. This error occurs because optimizers internally create `tf.Variable`s when they apply gradients for the first time."
       ]
     },
     {
@@ -1901,7 +1968,7 @@
         "x = tf.constant([-1.])\n",
         "y = tf.constant([2.])\n",
         "\n",
-        "# Make a new Function and ConcreteFunction for each optimizer.\n",
+        "# Make a new tf.function and ConcreteFunction for each optimizer.\n",
         "train_step_1 = tf.function(train_step)\n",
         "train_step_2 = tf.function(train_step)\n",
         "for i in range(10):\n",
@@ -1919,9 +1986,9 @@
       "source": [
         "#### Using with multiple Keras models\n",
         "\n",
-        "You may also encounter `ValueError: tf.function only supports singleton tf.Variables created on the first call.` when passing different model instances to the same `Function`.\n",
+        "You may also encounter `ValueError: tf.function only supports singleton tf.Variables created on the first call.` when passing different model instances to the same `tf.function`.\n",
         "\n",
-        "This error occurs because Keras models (which [do not have their input shape defined](https://www.tensorflow.org/guide/keras/custom_layers_and_models#best_practice_deferring_weight_creation_until_the_shape_of_the_inputs_is_known)) and Keras layers create `tf.Variables`s when they are first called. You may be attempting to initialize those variables inside a `Function`, which has already been called. To avoid this error, try calling `model.build(input_shape)` to initialize all the weights before training the model.\n"
+        "This error occurs because Keras models (which [do not have their input shape defined](https://www.tensorflow.org/guide/keras/custom_layers_and_models#best_practice_deferring_weight_creation_until_the_shape_of_the_inputs_is_known)) and Keras layers create `tf.Variable`s when they are first called. You may be attempting to initialize those variables inside a `tf.function`, which has already been called. To avoid this error, try calling `model.build(input_shape)` to initialize all the weights before training the model.\n"
       ]
     },
     {
@@ -1932,7 +1999,7 @@
       "source": [
         "## Further reading\n",
         "\n",
-        "To learn about how to export and load a `Function`, see the [SavedModel guide](../../guide/saved_model). To learn more about graph optimizations that are performed after tracing, see the [Grappler guide](../../guide/graph_optimization). To learn how to optimize your data pipeline and profile your model, see the [Profiler guide](../../guide/profiler.md)."
+        "To learn about how to export and load a `tf.function`, see the [SavedModel guide](../../guide/saved_model). To learn more about graph optimizations that are performed after tracing, see the [Grappler guide](../../guide/graph_optimization). To learn how to optimize your data pipeline and profile your model, see the [Profiler guide](../../guide/profiler.md)."
       ]
     }
   ],
diff --git a/site/en/guide/intro_to_graphs.ipynb b/site/en/guide/intro_to_graphs.ipynb
index 0392a160d55..4fe442632ba 100644
--- a/site/en/guide/intro_to_graphs.ipynb
+++ b/site/en/guide/intro_to_graphs.ipynb
@@ -87,7 +87,7 @@
       "source": [
         "### What are graphs?\n",
         "\n",
-        "In the previous three guides, you ran TensorFlow **eagerly**. This means TensorFlow operations are executed by Python, operation by operation, and returning results back to Python.\n",
+        "In the previous three guides, you ran TensorFlow **eagerly**. This means TensorFlow operations are executed by Python, operation by operation, and return results back to Python.\n",
         "\n",
         "While eager execution has several unique advantages, graph execution enables portability outside Python and tends to offer better performance. **Graph execution** means that tensor computations are executed as a *TensorFlow graph*, sometimes referred to as a `tf.Graph` or simply a \"graph.\"\n",
         "\n",
@@ -174,7 +174,7 @@
       "source": [
         "## Taking advantage of graphs\n",
         "\n",
-        "You create and run a graph in TensorFlow by using `tf.function`, either as a direct call or as a decorator. `tf.function` takes a regular function as input and returns a `Function`. **A `Function` is a Python callable that builds TensorFlow graphs from the Python function. You use a `Function` in the same way as its Python equivalent.**\n"
+        "You create and run a graph in TensorFlow by using `tf.function`, either as a direct call or as a decorator. `tf.function` takes a regular function as input and returns a `tf.types.experimental.PolymorphicFunction`. **A `PolymorphicFunction` is a Python callable that builds TensorFlow graphs from the Python function. You use a `tf.function` in the same way as its Python equivalent.**\n"
       ]
     },
     {
@@ -191,7 +191,8 @@
         "  x = x + b\n",
         "  return x\n",
         "\n",
-        "# `a_function_that_uses_a_graph` is a TensorFlow `Function`.\n",
+        "# The Python type of `a_function_that_uses_a_graph` will now be a\n",
+        "# `PolymorphicFunction`.\n",
         "a_function_that_uses_a_graph = tf.function(a_regular_function)\n",
         "\n",
         "# Make some tensors.\n",
@@ -200,7 +201,7 @@
         "b1 = tf.constant(4.0)\n",
         "\n",
         "orig_value = a_regular_function(x1, y1, b1).numpy()\n",
-        "# Call a `Function` like a Python function.\n",
+        "# Call a `tf.function` like a Python function.\n",
         "tf_function_value = a_function_that_uses_a_graph(x1, y1, b1).numpy()\n",
         "assert(orig_value == tf_function_value)"
       ]
@@ -211,7 +212,7 @@
         "id": "PNvuAYpdrTOf"
       },
       "source": [
-        "On the outside, a `Function` looks like a regular function you write using TensorFlow operations. [Underneath](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/eager/def_function.py), however, it is *very different*. A `Function` **encapsulates several `tf.Graph`s behind one API** (learn more in the _Polymorphism_ section). That is how a `Function` is able to give you the benefits of graph execution, like speed and deployability (refer to _The benefits of graphs_ above)."
+        "On the outside, a `tf.function` looks like a regular function you write using TensorFlow operations. [Underneath](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/eager/polymorphic_function/polymorphic_function.py), however, it is *very different*. The underlying `PolymorphicFunction` **encapsulates several `tf.Graph`s behind one API** (learn more in the _Polymorphism_ section). That is how a `tf.function` is able to give you the benefits of graph execution, like speed and deployability (refer to _The benefits of graphs_ above)."
       ]
     },
     {
@@ -236,7 +237,8 @@
         "  x = x + b\n",
         "  return x\n",
         "\n",
-        "# Use the decorator to make `outer_function` a `Function`.\n",
+        "# Using the `tf.function` decorator makes `outer_function` into a\n",
+        "# `PolymorphicFunction`.\n",
         "@tf.function\n",
         "def outer_function(x):\n",
         "  y = tf.constant([[2.0], [3.0]])\n",
@@ -283,7 +285,8 @@
         "  else:\n",
         "    return 0\n",
         "\n",
-        "# `tf_simple_relu` is a TensorFlow `Function` that wraps `simple_relu`.\n",
+        "# Using `tf.function` makes `tf_simple_relu` a `PolymorphicFunction` that wraps\n",
+        "# `simple_relu`.\n",
         "tf_simple_relu = tf.function(simple_relu)\n",
         "\n",
         "print(\"First branch, with graph:\", tf_simple_relu(tf.constant(1)).numpy())\n",
@@ -338,13 +341,13 @@
         "id": "sIpc_jfjEZEg"
       },
       "source": [
-        "### Polymorphism: one `Function`, many graphs\n",
+        "### Polymorphism: one `tf.function`, many graphs\n",
         "\n",
         "A `tf.Graph` is specialized to a specific type of inputs (for example, tensors with a specific [`dtype`](https://www.tensorflow.org/api_docs/python/tf/dtypes/DType) or objects with the same [`id()`](https://docs.python.org/3/library/functions.html#id)).\n",
         "\n",
-        "Each time you invoke a `Function` with a set of arguments that can't be handled by any of its existing graphs (such as arguments with new `dtypes` or incompatible shapes), `Function` creates a new `tf.Graph` specialized to those new arguments. The type specification of a `tf.Graph`'s inputs is known as its **input signature** or just a **signature**. For more information regarding when a new `tf.Graph` is generated and how that can be controlled, go to the _Rules of tracing_ section of the [Better performance with `tf.function`](./function.ipynb) guide.\n",
+        "Each time you invoke a `tf.function` with a set of arguments that can't be handled by any of its existing graphs (such as arguments with new `dtypes` or incompatible shapes), it creates a new `tf.Graph` specialized to those new arguments. The type specification of a `tf.Graph`'s inputs is represented by `tf.types.experimental.FunctionType`, also referred to as the **signature**. For more information regarding when a new `tf.Graph` is generated, how that can be controlled, and how `FunctionType` can be useful, go to the _Rules of tracing_ section of the [Better performance with `tf.function`](./function.ipynb) guide.\n",
         "\n",
-        "The `Function` stores the `tf.Graph` corresponding to that signature in a `ConcreteFunction`. **A `ConcreteFunction` is a wrapper around a `tf.Graph`.**\n"
+        "The `tf.function` stores the `tf.Graph` corresponding to that signature in a `ConcreteFunction`. **A `ConcreteFunction` can be thought of as a wrapper around a `tf.Graph`.**\n"
       ]
     },
     {
@@ -359,7 +362,7 @@
         "def my_relu(x):\n",
         "  return tf.maximum(0., x)\n",
         "\n",
-        "# `my_relu` creates new graphs as it observes more signatures.\n",
+        "# `my_relu` creates new graphs as it observes different input types.\n",
         "print(my_relu(tf.constant(5.5)))\n",
         "print(my_relu([1, -1]))\n",
         "print(my_relu(tf.constant([3., -3.])))"
@@ -371,7 +374,7 @@
         "id": "1qRtw7R4KL9X"
       },
       "source": [
-        "If the `Function` has already been called with that signature, `Function` does not create a new `tf.Graph`."
+        "If the `tf.function` has already been called with the same input types, it does not create a new `tf.Graph`."
       ]
     },
     {
@@ -383,8 +386,8 @@
       "outputs": [],
       "source": [
         "# These two calls do *not* create new graphs.\n",
-        "print(my_relu(tf.constant(-2.5))) # Signature matches `tf.constant(5.5)`.\n",
-        "print(my_relu(tf.constant([-1., 1.]))) # Signature matches `tf.constant([3., -3.])`."
+        "print(my_relu(tf.constant(-2.5))) # Input type matches `tf.constant(5.5)`.\n",
+        "print(my_relu(tf.constant([-1., 1.]))) # Input type matches `tf.constant([3., -3.])`."
       ]
     },
     {
@@ -393,7 +396,7 @@
         "id": "UohRmexhIpvQ"
       },
       "source": [
-        "Because it's backed by multiple graphs, a `Function` is **polymorphic**. That enables it to support more input types than a single `tf.Graph` could represent, and to optimize each `tf.Graph` for better performance."
+        "Because it's backed by multiple graphs, a `tf.function` is (as the name \"PolymorphicFunction\" suggests) **polymorphic**. That enables it to support more input types than a single `tf.Graph` could represent, and to optimize each `tf.Graph` for better performance."
       ]
     },
     {
@@ -428,7 +431,7 @@
       "source": [
         "### Graph execution vs. eager execution\n",
         "\n",
-        "The code in a `Function` can be executed both eagerly and as a graph. By default, `Function` executes its code as a graph:\n"
+        "The code in a `tf.function` can be executed both eagerly and as a graph. By default, `tf.function` executes its code as a graph:\n"
       ]
     },
     {
@@ -476,7 +479,7 @@
         "id": "cyZNCRcQorGO"
       },
       "source": [
-        "To verify that your `Function`'s graph is doing the same computation as its equivalent Python function, you can make it execute eagerly with `tf.config.run_functions_eagerly(True)`. This is a switch that **turns off `Function`'s ability to create and run graphs**, instead of executing the code normally."
+        "To verify that your `tf.function`'s graph is doing the same computation as its equivalent Python function, you can make it execute eagerly with `tf.config.run_functions_eagerly(True)`. This is a switch that **turns off `tf.function`'s ability to create and run graphs**, instead of executing the code normally."
       ]
     },
     {
@@ -519,7 +522,7 @@
         "id": "DKT3YBsqy0x4"
       },
       "source": [
-        "However, `Function` can behave differently under graph and eager execution. The Python [`print`](https://docs.python.org/3/library/functions.html#print) function is one example of how these two modes differ. Let's check out what happens when you insert a `print` statement to your function and call it repeatedly."
+        "However, `tf.function` can behave differently under graph and eager execution. The Python [`print`](https://docs.python.org/3/library/functions.html#print) function is one example of how these two modes differ. Let's check out what happens when you insert a `print` statement to your function and call it repeatedly."
       ]
     },
     {
@@ -567,7 +570,7 @@
       "source": [
         "Is the output surprising? **`get_MSE` only printed once even though it was called *three* times.**\n",
         "\n",
-        "To explain, the `print` statement is executed when `Function` runs the original code in order to create the graph in a process known as \"tracing\" (refer to the _Tracing_ section of the [`tf.function` guide](./function.ipynb). **Tracing captures the TensorFlow operations into a graph, and `print` is not captured in the graph.**  That graph is then executed for all three calls **without ever running the Python code again**.\n",
+        "To explain, the `print` statement is executed when `tf.function` runs the original code in order to create the graph in a process known as \"tracing\" (refer to the _Tracing_ section of the [`tf.function` guide](./function.ipynb). **Tracing captures the TensorFlow operations into a graph, and `print` is not captured in the graph.**  That graph is then executed for all three calls **without ever running the Python code again**.\n",
         "\n",
         "As a sanity check, let's turn off graph execution to compare:"
       ]
@@ -615,7 +618,7 @@
         "id": "PUR7qC_bquCn"
       },
       "source": [
-        "`print` is a *Python side effect*, and there are other differences that you should be aware of when converting a function into a `Function`. Learn more in the _Limitations_ section of the [Better performance with `tf.function`](./function.ipynb) guide."
+        "`print` is a *Python side effect*, and there are other differences that you should be aware of when converting a function into a `tf.function`. Learn more in the _Limitations_ section of the [Better performance with `tf.function`](./function.ipynb) guide."
       ]
     },
     {
@@ -637,7 +640,7 @@
         "\n",
         "\n",
         "\n",
-        "Graph execution only executes the operations necessary to produce the observable effects, which includes:\n",
+        "Graph execution only executes the operations necessary to produce the observable effects, which include:\n",
         "\n",
         "- The return value of the function\n",
         "- Documented well-known side-effects such as:\n",
@@ -697,7 +700,7 @@
       "source": [
         "### `tf.function` best practices\n",
         "\n",
-        "It may take some time to get used to the behavior of `Function`.  To get started quickly, first-time users should play around with decorating toy functions with `@tf.function` to get experience with going from eager to graph execution.\n",
+        "It may take some time to get used to the behavior of `tf.function`.  To get started quickly, first-time users should play around with decorating toy functions with `@tf.function` to get experience with going from eager to graph execution.\n",
         "\n",
         "*Designing for `tf.function`* may be your best bet for writing graph-compatible TensorFlow programs. Here are some tips:\n",
         "-  Toggle between eager and graph execution early and often with `tf.config.run_functions_eagerly` to pinpoint if/ when the two modes diverge.\n",
@@ -787,7 +790,7 @@
         "\n",
         "Graphs can speed up your code, but the process of creating them has some overhead. For some functions, the creation of the graph takes more time than the execution of the graph. **This investment is usually quickly paid back with the performance boost of subsequent executions, but it's important to be aware that the first few  steps of any large model training can be slower due to tracing.**\n",
         "\n",
-        "No matter how large your model, you want to avoid tracing frequently. The [`tf.function` guide](./function.ipynb) discusses how to set input specifications and use tensor arguments to avoid retracing in the _Controlling retracing_ section. If you find you are getting unusually poor performance, it's a good idea to check if you are retracing accidentally."
+        "No matter how large your model, you want to avoid tracing frequently. In the _Controlling retracing_ section, the [`tf.function` guide](./function.ipynb) discusses how to set input specifications and use tensor arguments to avoid retracing. If you find you are getting unusually poor performance, it's a good idea to check if you are retracing accidentally."
       ]
     },
     {
@@ -796,9 +799,9 @@
         "id": "F4InDaTjwmBA"
       },
       "source": [
-        "## When is a `Function` tracing?\n",
+        "## When is a `tf.function` tracing?\n",
         "\n",
-        "To figure out when your `Function` is tracing, add a `print` statement to its code. As a rule of thumb, `Function` will execute the `print` statement every time it traces."
+        "To figure out when your `tf.function` is tracing, add a `print` statement to its code. As a rule of thumb, `tf.function` will execute the `print` statement every time it traces."
       ]
     },
     {
diff --git a/site/en/guide/migrate/evaluator.ipynb b/site/en/guide/migrate/evaluator.ipynb
index fd8bd12d1e1..c8f848e4406 100644
--- a/site/en/guide/migrate/evaluator.ipynb
+++ b/site/en/guide/migrate/evaluator.ipynb
@@ -122,7 +122,7 @@
         "\n",
         "In TensorFlow 1, you can configure a `tf.estimator` to evaluate the estimator using `tf.estimator.train_and_evaluate`.\n",
         "\n",
-        "In this example, start by defining the `tf.estimator.Estimator` and speciyfing training and evaluation specifications:"
+        "In this example, start by defining the `tf.estimator.Estimator` and specifying training and evaluation specifications:"
       ]
     },
     {
diff --git a/site/en/guide/migrate/migrating_feature_columns.ipynb b/site/en/guide/migrate/migrating_feature_columns.ipynb
index ea12a5ef391..b2dbc5fe7c0 100644
--- a/site/en/guide/migrate/migrating_feature_columns.ipynb
+++ b/site/en/guide/migrate/migrating_feature_columns.ipynb
@@ -654,17 +654,17 @@
       "source": [
         "categorical_col = tf1.feature_column.categorical_column_with_identity(\n",
         "    'type', num_buckets=one_hot_dims)\n",
-        "# Convert index to one-hot; e.g. [2] -> [0,0,1].\n",
+        "# Convert index to one-hot; e.g., [2] -> [0,0,1].\n",
         "indicator_col = tf1.feature_column.indicator_column(categorical_col)\n",
         "\n",
-        "# Convert strings to indices; e.g. ['small'] -> [1].\n",
+        "# Convert strings to indices; e.g., ['small'] -> [1].\n",
         "vocab_col = tf1.feature_column.categorical_column_with_vocabulary_list(\n",
         "    'size', vocabulary_list=vocab, num_oov_buckets=1)\n",
         "# Embed the indices.\n",
         "embedding_col = tf1.feature_column.embedding_column(vocab_col, embedding_dims)\n",
         "\n",
         "normalizer_fn = lambda x: (x - weight_mean) / math.sqrt(weight_variance)\n",
-        "# Normalize the numeric inputs; e.g. [2.0] -> [0.0].\n",
+        "# Normalize the numeric inputs; e.g., [2.0] -> [0.0].\n",
         "numeric_col = tf1.feature_column.numeric_column(\n",
         "    'weight', normalizer_fn=normalizer_fn)\n",
         "\n",
@@ -727,12 +727,12 @@
         "  'size': tf.keras.Input(shape=(), dtype='string'),\n",
         "  'weight': tf.keras.Input(shape=(), dtype='float32'),\n",
         "}\n",
-        "# Convert index to one-hot; e.g. [2] -> [0,0,1].\n",
+        "# Convert index to one-hot; e.g., [2] -> [0,0,1].\n",
         "type_output = tf.keras.layers.CategoryEncoding(\n",
         "      one_hot_dims, output_mode='one_hot')(inputs['type'])\n",
-        "# Convert size strings to indices; e.g. ['small'] -> [1].\n",
+        "# Convert size strings to indices; e.g., ['small'] -> [1].\n",
         "size_output = tf.keras.layers.StringLookup(vocabulary=vocab)(inputs['size'])\n",
-        "# Normalize the numeric inputs; e.g. [2.0] -> [0.0].\n",
+        "# Normalize the numeric inputs; e.g., [2.0] -> [0.0].\n",
         "weight_output = tf.keras.layers.Normalization(\n",
         "      axis=None, mean=weight_mean, variance=weight_variance)(inputs['weight'])\n",
         "outputs = {\n",
diff --git a/site/en/guide/migrate/migration_debugging.ipynb b/site/en/guide/migrate/migration_debugging.ipynb
index 86c86680dc9..25cb7f9065f 100644
--- a/site/en/guide/migrate/migration_debugging.ipynb
+++ b/site/en/guide/migrate/migration_debugging.ipynb
@@ -128,7 +128,7 @@
         "\n",
         "    a. Check training behaviors with TensorBoard\n",
         "\n",
-        "    *   use simple optimizers e.g. SGD and simple distribution strategies e.g.\n",
+        "    *   use simple optimizers e.g., SGD and simple distribution strategies e.g.\n",
         "        `tf.distribute.OneDeviceStrategy` first\n",
         "    *   training metrics\n",
         "    *   evaluation metrics\n",
diff --git a/site/en/guide/profiler.md b/site/en/guide/profiler.md
index 1cd19c109fe..dee8a5a84af 100644
--- a/site/en/guide/profiler.md
+++ b/site/en/guide/profiler.md
@@ -55,7 +55,7 @@ found.
 When you run profiling with CUDA® Toolkit in a Docker environment or on Linux,
 you may encounter issues related to insufficient CUPTI privileges
 (`CUPTI_ERROR_INSUFFICIENT_PRIVILEGES`). Go to the
-[NVIDIA Developer Docs](https://developer.nvidia.com/nvidia-development-tools-solutions-ERR_NVGPUCTRPERM-permission-issue-performance-counters){:.external}
+[NVIDIA Developer Docs](https://developer.nvidia.com/nvidia-development-tools-solutions-ERR_NVGPUCTRPERM-permission-issue-performance-counters)
 to learn more about how you can resolve these issues on Linux.
 
 To resolve CUPTI privilege issues in a Docker environment, run
@@ -694,7 +694,7 @@ first few batches to avoid inaccuracies due to initialization overhead.
     An example for profiling multiple workers:
 
     ```python
-    # E.g. your worker IP addresses are 10.0.0.2, 10.0.0.3, 10.0.0.4, and you
+    # E.g., your worker IP addresses are 10.0.0.2, 10.0.0.3, 10.0.0.4, and you
     # would like to profile for a duration of 2 seconds.
     tf.profiler.experimental.client.trace(
         'grpc://10.0.0.2:8466,grpc://10.0.0.3:8466,grpc://10.0.0.4:8466',
@@ -845,7 +845,7 @@ more efficient by casting to different data types after applying
 spatial transformations, such as flipping, cropping, rotating, etc.
 
 Note: Some ops like `tf.image.resize` transparently change the `dtype` to
-`fp32`. Make sure you normalize your data to lie between `0` and `1` if its not
+`fp32`. Make sure you normalize your data to lie between `0` and `1` if it's not
 done automatically. Skipping this step could lead to `NaN` errors if you have
 enabled [AMP](https://developer.nvidia.com/automatic-mixed-precision).
 
diff --git a/site/en/guide/ragged_tensor.ipynb b/site/en/guide/ragged_tensor.ipynb
index d36010699db..ba0be2928ce 100644
--- a/site/en/guide/ragged_tensor.ipynb
+++ b/site/en/guide/ragged_tensor.ipynb
@@ -674,14 +674,14 @@
       "source": [
         "### Keras\n",
         "\n",
-        "[tf.keras](https://www.tensorflow.org/guide/keras) is TensorFlow's high-level API for building and training deep learning models. Ragged tensors may be passed as inputs to a Keras model by setting `ragged=True` on `tf.keras.Input` or `tf.keras.layers.InputLayer`.  Ragged tensors may also be passed between Keras layers, and returned by Keras models.  The following example shows a toy LSTM model that is trained using ragged tensors."
+        "[tf.keras](https://www.tensorflow.org/guide/keras) is TensorFlow's high-level API for building and training deep learning models. It doesn't have ragged support. But it does support masked tensors. So the easiest way to use a ragged tensor in a Keras model  is to convert the ragged tensor to a dense tensor, using `.to_tensor()` and then using Keras's builtin masking:"
       ]
     },
     {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {
-        "id": "pHls7hQVJlk5"
+        "id": "ucYf2sSzTvQo"
       },
       "outputs": [],
       "source": [
@@ -691,26 +691,77 @@
         "     'She turned me into a newt.',\n",
         "     'A newt?',\n",
         "     'Well, I got better.'])\n",
-        "is_question = tf.constant([True, False, True, False])\n",
-        "\n",
+        "is_question = tf.constant([True, False, True, False])"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "MGYKmizJTw8B"
+      },
+      "outputs": [],
+      "source": [
         "# Preprocess the input strings.\n",
         "hash_buckets = 1000\n",
         "words = tf.strings.split(sentences, ' ')\n",
         "hashed_words = tf.strings.to_hash_bucket_fast(words, hash_buckets)\n",
-        "\n",
+        "hashed_words.to_list()"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "7FTujwOlUT8J"
+      },
+      "outputs": [],
+      "source": [
+        "hashed_words.to_tensor()"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "vzWudaESUBOZ"
+      },
+      "outputs": [],
+      "source": [
+        "tf.keras.Input?"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "pHls7hQVJlk5"
+      },
+      "outputs": [],
+      "source": [
         "# Build the Keras model.\n",
         "keras_model = tf.keras.Sequential([\n",
-        "    tf.keras.layers.Input(shape=[None], dtype=tf.int64, ragged=True),\n",
-        "    tf.keras.layers.Embedding(hash_buckets, 16),\n",
-        "    tf.keras.layers.LSTM(32, use_bias=False),\n",
+        "    tf.keras.layers.Embedding(hash_buckets, 16, mask_zero=True),\n",
+        "    tf.keras.layers.LSTM(32, return_sequences=True, use_bias=False),\n",
+        "    tf.keras.layers.GlobalAveragePooling1D(),\n",
         "    tf.keras.layers.Dense(32),\n",
         "    tf.keras.layers.Activation(tf.nn.relu),\n",
         "    tf.keras.layers.Dense(1)\n",
         "])\n",
         "\n",
         "keras_model.compile(loss='binary_crossentropy', optimizer='rmsprop')\n",
-        "keras_model.fit(hashed_words, is_question, epochs=5)\n",
-        "print(keras_model.predict(hashed_words))"
+        "keras_model.fit(hashed_words.to_tensor(), is_question, epochs=5)\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "1IAjjmdTU9OU"
+      },
+      "outputs": [],
+      "source": [
+        "print(keras_model.predict(hashed_words.to_tensor()))"
       ]
     },
     {
@@ -799,7 +850,7 @@
       "source": [
         "### Datasets\n",
         "\n",
-        "[tf.data](https://www.tensorflow.org/guide/data) is an API that enables you to build complex input pipelines from simple, reusable pieces.  Its core data structure is `tf.data.Dataset`, which represents a sequence of elements, in which each element consists of one or more components. "
+        "[tf.data](https://www.tensorflow.org/guide/data) is an API that enables you to build complex input pipelines from simple, reusable pieces.  Its core data structure is `tf.data.Dataset`, which represents a sequence of elements, in which each element consists of one or more components."
       ]
     },
     {
@@ -1078,9 +1129,11 @@
         "import tempfile\n",
         "\n",
         "keras_module_path = tempfile.mkdtemp()\n",
-        "tf.saved_model.save(keras_model, keras_module_path)\n",
-        "imported_model = tf.saved_model.load(keras_module_path)\n",
-        "imported_model(hashed_words)"
+        "keras_model.save(keras_module_path+\"/my_model.keras\")\n",
+        "\n",
+        "imported_model = tf.keras.models.load_model(keras_module_path+\"/my_model.keras\")\n",
+        "\n",
+        "imported_model(hashed_words.to_tensor())"
       ]
     },
     {
@@ -2125,7 +2178,6 @@
   ],
   "metadata": {
     "colab": {
-      "collapsed_sections": [],
       "name": "ragged_tensor.ipynb",
       "toc_visible": true
     },
diff --git a/site/en/guide/random_numbers.ipynb b/site/en/guide/random_numbers.ipynb
index 5212a10a49a..f8b824ad906 100644
--- a/site/en/guide/random_numbers.ipynb
+++ b/site/en/guide/random_numbers.ipynb
@@ -166,7 +166,7 @@
       "source": [
         "See the *Algorithms* section below for more information about it.\n",
         "\n",
-        "Another way to create a generator is with `Generator.from_non_deterministic_state`. A generator created this way will start from a non-deterministic state, depending on e.g. time and OS."
+        "Another way to create a generator is with `Generator.from_non_deterministic_state`. A generator created this way will start from a non-deterministic state, depending on e.g., time and OS."
       ]
     },
     {
diff --git a/site/en/guide/sparse_tensor.ipynb b/site/en/guide/sparse_tensor.ipynb
index cd38fdf55ab..45f1e3fd3c3 100644
--- a/site/en/guide/sparse_tensor.ipynb
+++ b/site/en/guide/sparse_tensor.ipynb
@@ -620,7 +620,7 @@
         "\n",
         "However, there are a few cases where it can be useful to distinguish zero values from missing values. In particular, this allows for one way to encode missing/unknown data in your training data. For example, consider a use case where you have a tensor of scores (that can have any floating point value from -Inf to +Inf), with some missing scores. You can encode this tensor using a sparse tensor where the explicit zeros are known zero scores but the implicit zero values actually represent missing data and not zero. \n",
         "\n",
-        "Note: This is generally not the intended usage of `tf.sparse.SparseTensor`s; and you might want to also consier other techniques for encoding this such as for example using a separate mask tensor that identifies the locations of known/unknown values. However, exercise caution while using this approach, since most sparse operations will treat explicit and implicit zero values identically."
+        "Note: This is generally not the intended usage of `tf.sparse.SparseTensor`s; and you might want to also consider other techniques for encoding this such as for example using a separate mask tensor that identifies the locations of known/unknown values. However, exercise caution while using this approach, since most sparse operations will treat explicit and implicit zero values identically."
       ]
     },
     {
diff --git a/site/en/guide/tensor.ipynb b/site/en/guide/tensor.ipynb
index b9b72973db1..2eb261aad75 100644
--- a/site/en/guide/tensor.ipynb
+++ b/site/en/guide/tensor.ipynb
@@ -82,7 +82,7 @@
       "source": [
         "Tensors are multi-dimensional arrays with a uniform type (called a `dtype`).  You can see all supported `dtypes` at `tf.dtypes`.\n",
         "\n",
-        "If you're familiar with [NumPy](https://numpy.org/devdocs/user/quickstart.html){:.external}, tensors are (kind of) like `np.arrays`.\n",
+        "If you're familiar with [NumPy](https://numpy.org/devdocs/user/quickstart.html), tensors are (kind of) like `np.arrays`.\n",
         "\n",
         "All tensors are immutable like Python numbers and strings: you can never update the contents of a tensor, only create a new one.\n"
       ]
@@ -571,7 +571,7 @@
       "source": [
         "### Single-axis indexing\n",
         "\n",
-        "TensorFlow follows standard Python indexing rules, similar to [indexing a list or a string in Python](https://docs.python.org/3/tutorial/introduction.html#strings){:.external}, and the basic rules for NumPy indexing.\n",
+        "TensorFlow follows standard Python indexing rules, similar to [indexing a list or a string in Python](https://docs.python.org/3/tutorial/introduction.html#strings), and the basic rules for NumPy indexing.\n",
         "\n",
         "* indexes start at `0`\n",
         "* negative indices count backwards from the end\n",
@@ -1035,7 +1035,7 @@
       "source": [
         "## Broadcasting\n",
         "\n",
-        "Broadcasting is a concept borrowed from the [equivalent feature in NumPy](https://numpy.org/doc/stable/user/basics.broadcasting.html){:.external}.  In short, under certain conditions, smaller tensors are \"stretched\" automatically to fit larger tensors when running combined operations on them.\n",
+        "Broadcasting is a concept borrowed from the [equivalent feature in NumPy](https://numpy.org/doc/stable/user/basics.broadcasting.html).  In short, under certain conditions, smaller tensors are \"stretched\" automatically to fit larger tensors when running combined operations on them.\n",
         "\n",
         "The simplest and most common case is when you attempt to multiply or add a tensor to a scalar.  In that case, the scalar is broadcast to be the same shape as the other argument. "
       ]
@@ -1161,7 +1161,7 @@
       "source": [
         "Unlike a mathematical op, for example, `broadcast_to` does nothing special to save memory.  Here, you are materializing the tensor.\n",
         "\n",
-        "It can get even more complicated.  [This section](https://jakevdp.github.io/PythonDataScienceHandbook/02.05-computation-on-arrays-broadcasting.html){:.external} of Jake VanderPlas's book _Python Data Science Handbook_ shows more broadcasting tricks (again in NumPy)."
+        "It can get even more complicated.  [This section](https://jakevdp.github.io/PythonDataScienceHandbook/02.05-computation-on-arrays-broadcasting.html) of Jake VanderPlas's book _Python Data Science Handbook_ shows more broadcasting tricks (again in NumPy)."
       ]
     },
     {
diff --git a/site/en/guide/tf_numpy_type_promotion.ipynb b/site/en/guide/tf_numpy_type_promotion.ipynb
index a9e176c5db6..f984310822a 100644
--- a/site/en/guide/tf_numpy_type_promotion.ipynb
+++ b/site/en/guide/tf_numpy_type_promotion.ipynb
@@ -178,7 +178,7 @@
         "*   `f32*` means Python `float` or weakly-typed `f32`\n",
         "*   `c128*` means Python `complex` or weakly-typed `c128`\n",
         "\n",
-        "The asterik (*) denotes that the corresponding type is “weak” - such a dtype is temporarily inferred by the system, and could defer to other dtypes. This concept is explained more in detail [here](#weak_tensor)."
+        "The asterisk (*) denotes that the corresponding type is “weak” - such a dtype is temporarily inferred by the system, and could defer to other dtypes. This concept is explained more in detail [here](#weak_tensor)."
       ]
     },
     {
@@ -449,13 +449,13 @@
       "source": [
         "### WeakTensor Construction\n",
         "\n",
-        "WeakTensors are created if you create a tensor without specifing a dtype the result is a WeakTensor. You can check whether a Tensor is \"weak\" or not by checking the weak attribute at the end of the Tensor's string representation."
+        "WeakTensors are created if you create a tensor without specifying a dtype the result is a WeakTensor. You can check whether a Tensor is \"weak\" or not by checking the weak attribute at the end of the Tensor's string representation."
       ]
     },
     {
       "cell_type": "markdown",
       "metadata": {
-        "id": "7UmunnJ8Tru3"
+        "id": "7UmunnJ8True3"
       },
       "source": [
         "**First Case**: When `tf.constant` is called with an input with no user-specified dtype."
diff --git a/site/en/guide/tpu.ipynb b/site/en/guide/tpu.ipynb
index c37b9af576e..49eee544bec 100644
--- a/site/en/guide/tpu.ipynb
+++ b/site/en/guide/tpu.ipynb
@@ -6,7 +6,7 @@
         "id": "Tce3stUlHN0L"
       },
       "source": [
-        "##### Copyright 2018 The TensorFlow Authors.\n"
+        "##### Copyright 2024 The TensorFlow Authors.\n"
       ]
     },
     {
@@ -81,7 +81,7 @@
         "id": "ebf7f8489bb7"
       },
       "source": [
-        "Before you run this Colab notebook, make sure that your hardware accelerator is a TPU by checking your notebook settings: **Runtime** > **Change runtime type** > **Hardware accelerator** > **TPU**.\n",
+        "Before you run this Colab notebook, make sure that your hardware accelerator is a TPU by checking your notebook settings: **Runtime** > **Change runtime type** > **Hardware accelerator** > **TPU v2**.\n",
         "\n",
         "Import some necessary libraries, including TensorFlow Datasets:"
       ]
@@ -128,7 +128,7 @@
       },
       "outputs": [],
       "source": [
-        "resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='')\n",
+        "resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='local')\n",
         "tf.config.experimental_connect_to_cluster(resolver)\n",
         "# This is the TPU initialization code that has to be at the beginning.\n",
         "tf.tpu.experimental.initialize_tpu_system(resolver)\n",
@@ -416,7 +416,7 @@
       "source": [
         "### Train the model using a custom training loop\n",
         "\n",
-        "You can also create and train your model using `tf.function` and `tf.distribute` APIs directly. You can use the `Strategy.experimental_distribute_datasets_from_function` API to distribute the `tf.data.Dataset` given a dataset function. Note that in the example below the batch size passed into the `Dataset` is the per-replica batch size instead of the global batch size. To learn more, check out the [Custom training with `tf.distribute.Strategy`](../tutorials/distribute/custom_training.ipynb) tutorial.\n"
+        "You can also create and train your model using `tf.function` and `tf.distribute` APIs directly. You can use the `Strategy.distribute_datasets_from_function` API to distribute the `tf.data.Dataset` given a dataset function. Note that in the example below the batch size passed into the `Dataset` is the per-replica batch size instead of the global batch size. To learn more, check out the [Custom training with `tf.distribute.Strategy`](../tutorials/distribute/custom_training.ipynb) tutorial.\n"
       ]
     },
     {
@@ -590,7 +590,8 @@
     "colab": {
       "name": "tpu.ipynb",
       "toc_visible": true,
-      "provenance": []
+      "machine_shape": "hm",
+      "gpuType": "V28"
     },
     "kernelspec": {
       "display_name": "Python 3",
diff --git a/site/en/guide/versions.md b/site/en/guide/versions.md
index df0d75114ef..8443e549f42 100644
--- a/site/en/guide/versions.md
+++ b/site/en/guide/versions.md
@@ -59,7 +59,7 @@ patch versions.  The public APIs consist of
 
 *   The TensorFlow C API:
 
-    *   [tensorflow/c/c_api.h](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/c/c_api.h))
+    *   [tensorflow/c/c_api.h](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/c/c_api.h)
 
 *   The following protocol buffer files:
 
@@ -171,12 +171,10 @@ incrementing the major version number for TensorFlow Lite, or vice versa.
 The API surface that is covered by the TensorFlow Lite Extension APIs version
 number is comprised of the following public APIs:
 
-```
 *   [tensorflow/lite/c/c_api_opaque.h](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/c/c_api_opaque.h)
 *   [tensorflow/lite/c/common.h](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/c/common.h)
 *   [tensorflow/lite/c/builtin_op_data.h](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/c/builtin_op_data.h)
 *   [tensorflow/lite/builtin_ops.h](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/builtin_ops.h)
-```
 
 Again, experimental symbols are not covered; see [below](#not_covered) for
 details.
@@ -203,7 +201,7 @@ These include:
     such as:
 
     -   [C++](../install/lang_c.ipynb) (exposed through header files in
-        [`tensorflow/cc`](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/cc)).
+        [`tensorflow/cc/`](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/cc)).
     -   [Java](../install/lang_java_legacy.md),
     -   [Go](https://github.com/tensorflow/build/blob/master/golang_install_guide/README.md)
     -   [JavaScript](https://www.tensorflow.org/js)
@@ -212,7 +210,7 @@ These include:
     Objective-C, and Swift, in particular
 
     -   **C++** (exposed through header files in
-        [`tensorflow/lite/`]\(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/\))
+        [`tensorflow/lite/`](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/))
 
 *   **Details of composite ops:** Many public functions in Python expand to
     several primitive ops in the graph, and these details will be part of any
@@ -471,7 +469,7 @@ existing producer scripts will not suddenly use the new functionality.
 1.  Add a new similar op named `SomethingV2` or similar and go through the
     process of adding it and switching existing Python wrappers to use it.
     To ensure forward compatibility use the checks suggested in
-    [compat.py](https://www.tensorflow.org/code/tensorflow/python/compat/compat.py)
+    [compat.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/compat/compat.py)
     when changing the Python wrappers.
 2.  Remove the old op (Can only take place with a major version change due to
     backward compatibility).
diff --git a/site/en/hub/common_saved_model_apis/images.md b/site/en/hub/common_saved_model_apis/images.md
index 9754d52feed..5413f0adc07 100644
--- a/site/en/hub/common_saved_model_apis/images.md
+++ b/site/en/hub/common_saved_model_apis/images.md
@@ -70,7 +70,7 @@ consumer. The SavedModel itself should not perform dropout on the actual outputs
 Reusable SavedModels for image feature vectors are used in
 
 *   the Colab tutorial
-    [Retraining an Image Classifier](https://colab.research.google.com/github/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/tf2_image_retraining.ipynb),
+    [Retraining an Image Classifier](https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/hub/tutorials/tf2_image_retraining.ipynb),
 
 
 
diff --git a/site/en/hub/common_saved_model_apis/text.md b/site/en/hub/common_saved_model_apis/text.md
index 1c45b8ea026..209319f27a9 100644
--- a/site/en/hub/common_saved_model_apis/text.md
+++ b/site/en/hub/common_saved_model_apis/text.md
@@ -94,7 +94,7 @@ distributed way. For example
 ### Examples
 
 *   Colab tutorial
-    [Text Classification with Movie Reviews](https://colab.research.google.com/github/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/tf2_text_classification.ipynb).
+    [Text Classification with Movie Reviews](https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/hub/tutorials/tf2_text_classification.ipynb).
 
 
 
@@ -132,8 +132,8 @@ preprocessor = hub.load("path/to/preprocessor")  # Must match `encoder`.
 encoder_inputs = preprocessor(text_input)
 
 encoder = hub.load("path/to/encoder")
-enocder_outputs = encoder(encoder_inputs)
-embeddings = enocder_outputs["default"]
+encoder_outputs = encoder(encoder_inputs)
+embeddings = encoder_outputs["default"]
 ```
 
 Recall from the [Reusable SavedModel API](../reusable_saved_models.md) that
@@ -304,8 +304,8 @@ provisions from the [Reusable SavedModel API](../reusable_saved_models.md).
 #### Usage synopsis
 
 ```python
-enocder = hub.load("path/to/encoder")
-enocder_outputs = encoder(encoder_inputs)
+encoder = hub.load("path/to/encoder")
+encoder_outputs = encoder(encoder_inputs)
 ```
 
 or equivalently in Keras:
diff --git a/site/en/hub/installation.md b/site/en/hub/installation.md
index 33594cd3079..2381fbea614 100644
--- a/site/en/hub/installation.md
+++ b/site/en/hub/installation.md
@@ -50,8 +50,8 @@ $ pip install --upgrade tf-hub-nightly
 
 -   [Library overview](lib_overview.md)
 -   Tutorials:
-    -   [Text classification](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/tf2_text_classification.ipynb)
-    -   [Image classification](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/tf2_image_retraining.ipynb)
+    -   [Text classification](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/tf2_text_classification.ipynb)
+    -   [Image classification](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/tf2_image_retraining.ipynb)
     -   Additional examples
         [on GitHub](https://github.com/tensorflow/hub/blob/master/examples/README.md)
 -   Find models on [tfhub.dev](https://tfhub.dev).
\ No newline at end of file
diff --git a/site/en/hub/migration_tf2.md b/site/en/hub/migration_tf2.md
index 24c1bf14c4d..c2cc4b50759 100644
--- a/site/en/hub/migration_tf2.md
+++ b/site/en/hub/migration_tf2.md
@@ -46,10 +46,10 @@ model = tf.keras.Sequential([
     ...])
 ```
 
-Many tutorials show these APIs in action. See in particular
+Many tutorials show these APIs in action. Here are some examples:
 
-*   [Text classification example notebook](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/tf2_text_classification.ipynb)
-*   [Image classification example notebook](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/tf2_image_retraining.ipynb)
+*   [Text classification example notebook](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/tf2_text_classification.ipynb)
+*   [Image classification example notebook](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/tf2_image_retraining.ipynb)
 
 ### Using the new API in Estimator training
 
diff --git a/site/en/hub/portability_and_deletion.md b/site/en/hub/portability_and_deletion.md
index 30341306bea..67fa401d161 100644
--- a/site/en/hub/portability_and_deletion.md
+++ b/site/en/hub/portability_and_deletion.md
@@ -1,14 +1,14 @@
 
 ## I want to see what I’ve uploaded to TensorFlow Hub. Can I get a copy of my data?
 
-Yes. If you’d like the TensorFlow Hub team to **send you a copy** of all of the
-data you have uploaded, please send us an email at [hi-tf-hub@google.com](mailto:hi-tf-hub@google.com)
+Yes. If you’d like the Kaggle Team to **send you a copy** of all of the
+data you have uploaded, please send us an email at [support@kaggle.com](mailto:support@kaggle.com)
 and we’ll respond as soon as possible.
 
 ## How do I delete what I’ve uploaded to TensorFlow Hub?
 
 Similarly, if you’d like us to **delete or remove content**, please send us an
-email at [hi-tf-hub@google.com](mailto:hi-tf-hub@google.com) and we’ll delete
+email at [support@kaggle.com](mailto:support@kaggle.com) and we’ll delete
 all copies that we have and stop serving it on tfhub.dev. Please note:
 
 *   Because TensorFlow Hub is an open-source platform, copies of your assets may
diff --git a/site/en/hub/tf2_saved_model.md b/site/en/hub/tf2_saved_model.md
index 7a7220d0a2e..e41337b2548 100644
--- a/site/en/hub/tf2_saved_model.md
+++ b/site/en/hub/tf2_saved_model.md
@@ -51,7 +51,7 @@ model = tf.keras.Sequential([
 ```
 
 The [Text classification
-colab](https://colab.research.google.com/github/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/tf2_text_classification.ipynb)
+colab](https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/hub/tutorials/tf2_text_classification.ipynb)
 is a complete example how to train and evaluate such a classifier.
 
 The model weights in a `hub.KerasLayer` are set to non-trainable by default.
@@ -82,7 +82,7 @@ and uncompressed SavedModels. For details, see [Caching](caching.md).
 SavedModels can be loaded from a specified `handle`, where the `handle` is a
 filesystem path, valid TFhub.dev model URL (e.g. "https://tfhub.dev/...").
 Kaggle Models URLs mirror TFhub.dev handles in accordance with our Terms and the
-license associated with the model assets, e.g. "https://www.kaggle.com/...".
+license associated with the model assets, e.g., "https://www.kaggle.com/...".
 Handles from Kaggle Models are equivalent to their corresponding TFhub.dev
 handle.
 
@@ -244,7 +244,7 @@ to the Keras model, and runs the SavedModel's computation in training
 mode (think of dropout etc.).
 
 The [image classification
-colab](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/tf2_image_retraining.ipynb)
+colab](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/tf2_image_retraining.ipynb)
 contains an end-to-end example with optional fine-tuning.
 
 #### Re-exporting the fine-tuning result
diff --git a/site/en/hub/tutorials/action_recognition_with_tf_hub.ipynb b/site/en/hub/tutorials/action_recognition_with_tf_hub.ipynb
index b4a1e439621..3f586991ba9 100644
--- a/site/en/hub/tutorials/action_recognition_with_tf_hub.ipynb
+++ b/site/en/hub/tutorials/action_recognition_with_tf_hub.ipynb
@@ -184,7 +184,7 @@
         "  return list(_VIDEO_LIST)\n",
         "\n",
         "def fetch_ucf_video(video):\n",
-        "  \"\"\"Fetchs a video and cache into local filesystem.\"\"\"\n",
+        "  \"\"\"Fetches a video and cache into local filesystem.\"\"\"\n",
         "  cache_path = os.path.join(_CACHE_DIR, video)\n",
         "  if not os.path.exists(cache_path):\n",
         "    urlpath = request.urljoin(UCF_ROOT, video)\n",
diff --git a/site/en/hub/tutorials/boundless.ipynb b/site/en/hub/tutorials/boundless.ipynb
index 570e9413362..f53fc5bb004 100644
--- a/site/en/hub/tutorials/boundless.ipynb
+++ b/site/en/hub/tutorials/boundless.ipynb
@@ -82,9 +82,9 @@
         "id": "hDKbpAEZf8Lt"
       },
       "source": [
-        "## Imports and Setup\n",
+        "## Imports and setup\n",
         "\n",
-        "Lets start with the base imports."
+        "Start with the base imports:"
       ]
     },
     {
@@ -110,9 +110,9 @@
         "id": "pigUDIXtciQO"
       },
       "source": [
-        "## Reading image for input\n",
+        "## Create a function for reading an image\n",
         "\n",
-        "Lets create a util method to help load the image and format it for the model (257x257x3). This method will also crop the image to a square to avoid distortion and you can use with local images or from the internet."
+        "Create a utility function to help load an image and format it for the model (257x257x3). This method will also crop the image to a square to avoid distortion and you can use it with local images or from the internet."
       ]
     },
     {
@@ -147,9 +147,9 @@
         "id": "lonrLxuKcsL0"
       },
       "source": [
-        "## Visualization method\n",
+        "## Create a visualization function\n",
         "\n",
-        "We will also create a visuzalization method to show the original image side by side with the masked version and the \"filled\" version, both generated by the model."
+        "Create a visualization function to show the original image side-by-side with the masked version and the \"filled\" version, both generated by the model."
       ]
     },
     {
@@ -183,9 +183,9 @@
         "id": "8rwaCWmxdJGH"
       },
       "source": [
-        "## Loading an Image\n",
+        "## Load an image\n",
         "\n",
-        "We will load a sample image but fell free to upload your own image to the colab and try with it. Remember that the model have some limitations regarding human images."
+        "Now you can load a sample image. Feel free to use your own image by uploading it to the Colab notebook. Remember that the model may have some limitations regarding human images."
       ]
     },
     {
@@ -210,10 +210,10 @@
         "id": "4lIkmZL_dtyX"
       },
       "source": [
-        "## Selecting a model from TensorFlow Hub\n",
+        "## Select a model from TensorFlow Hub\n",
         "\n",
-        "On TensorFlow Hub we have 3 versions of the Boundless model: Half, Quarter and Three Quarters.\n",
-        "In the following cell you can chose any of them and try on your image. If you want to try with another one, just chose it and execute the following cells."
+        "On TensorFlow Hub there are three versions of the Boundless model: Half, Quarter and Three Quarters.\n",
+        "In the following cell you can choose any of the models and apply them on your image. If you want to pick another model, select it below and then run the following cells."
       ]
     },
     {
@@ -241,9 +241,9 @@
         "id": "aSJFeNNSeOn8"
       },
       "source": [
-        "Now that we've chosen the model we want, lets load it from TensorFlow Hub.\n",
+        "After choosing your model, you can load it from TensorFlow Hub.\n",
         "\n",
-        "**Note**: You can point your browser to the model handle to read the model's documentation."
+        "**Note**: You can point to a model handle to read the model's documentation."
       ]
     },
     {
@@ -264,14 +264,14 @@
         "id": "L4G7CPOaeuQb"
       },
       "source": [
-        "## Doing Inference\n",
+        "## Perform inference\n",
         "\n",
-        "The boundless model have two outputs:\n",
+        "The boundless model has two outputs:\n",
         "\n",
         "*   The input image with a mask applied\n",
         "*   The masked image with the extrapolation to complete it\n",
         "\n",
-        "we can use these two images to show a comparisson visualization."
+        "You can compare these two images with a visualization as follows:"
       ]
     },
     {
diff --git a/site/en/hub/tutorials/cropnet_cassava.ipynb b/site/en/hub/tutorials/cropnet_cassava.ipynb
index 18f41c00da1..926b5395e41 100644
--- a/site/en/hub/tutorials/cropnet_cassava.ipynb
+++ b/site/en/hub/tutorials/cropnet_cassava.ipynb
@@ -199,7 +199,7 @@
         "id": "QT3XWAtR6BRy"
       },
       "source": [
-        "The *cassava* dataset has images of cassava leaves with 4 distinct diseases as well as healthy cassava leaves. The model can predict all of these classes as well as sixth class for \"unknown\" when the model is not confident in it's prediction."
+        "The *cassava* dataset has images of cassava leaves with 4 distinct diseases as well as healthy cassava leaves. The model can predict all of these classes as well as sixth class for \"unknown\" when the model is not confident in its prediction."
       ]
     },
     {
diff --git a/site/en/hub/tutorials/cross_lingual_similarity_with_tf_hub_multilingual_universal_encoder.ipynb b/site/en/hub/tutorials/cross_lingual_similarity_with_tf_hub_multilingual_universal_encoder.ipynb
index 31fc037dfe7..920d197811e 100644
--- a/site/en/hub/tutorials/cross_lingual_similarity_with_tf_hub_multilingual_universal_encoder.ipynb
+++ b/site/en/hub/tutorials/cross_lingual_similarity_with_tf_hub_multilingual_universal_encoder.ipynb
@@ -271,7 +271,7 @@
         "spanish_sentences = ['perro', 'Los cachorros son agradables.', 'Disfruto de dar largos paseos por la playa con mi perro.']\n",
         "\n",
         "# Multilingual example\n",
-        "multilingual_example = [\"Willkommen zu einfachen, aber\", \"verrassend krachtige\", \"multilingüe\", \"compréhension du langage naturel\", \"модели.\", \"大家是什么意思\" , \"보다 중요한\", \".اللغة التي يتحدثونها\"]\n",
+        "multilingual_example = [\"Willkommen zu einfachen, aber\", \"verrassend krachtige\", \"multilingüe\", \"compréhension du language naturel\", \"модели.\", \"大家是什么意思\" , \"보다 중요한\", \".اللغة التي يتحدثونها\"]\n",
         "multilingual_example_in_en =  [\"Welcome to simple yet\", \"surprisingly powerful\", \"multilingual\", \"natural language understanding\", \"models.\", \"What people mean\", \"matters more than\", \"the language they speak.\"]\n"
       ]
     },
@@ -4174,7 +4174,7 @@
         "id": "Dxu66S8wJIG9"
       },
       "source": [
-        "### Semantic-search crosss-lingual capabilities\n",
+        "### Semantic-search cross-lingual capabilities\n",
         "\n",
         "In this section we show how to retrieve sentences related to a set of sample English sentences. Things to try:\n",
         "\n",
diff --git a/site/en/hub/tutorials/image_enhancing.ipynb b/site/en/hub/tutorials/image_enhancing.ipynb
index 4c9496b79ae..3710ebd6d66 100644
--- a/site/en/hub/tutorials/image_enhancing.ipynb
+++ b/site/en/hub/tutorials/image_enhancing.ipynb
@@ -346,7 +346,7 @@
       "cell_type": "code",
       "execution_count": null,
       "metadata": {
-        "id": "r_dautO6qbTV"
+        "id": "r_defaultO6qbTV"
       },
       "outputs": [],
       "source": [
diff --git a/site/en/hub/tutorials/image_feature_vector.ipynb b/site/en/hub/tutorials/image_feature_vector.ipynb
index 29ac0c97ddd..b5283c45b3d 100644
--- a/site/en/hub/tutorials/image_feature_vector.ipynb
+++ b/site/en/hub/tutorials/image_feature_vector.ipynb
@@ -357,7 +357,7 @@
       "source": [
         "## Train the network\n",
         "\n",
-        "Now that our model is built, let's train it and see how it perfoms on our test set."
+        "Now that our model is built, let's train it and see how it performs on our test set."
       ]
     },
     {
diff --git a/site/en/hub/tutorials/movenet.ipynb b/site/en/hub/tutorials/movenet.ipynb
index 2b6ffc6eb54..f7955a5253b 100644
--- a/site/en/hub/tutorials/movenet.ipynb
+++ b/site/en/hub/tutorials/movenet.ipynb
@@ -450,7 +450,7 @@
         "id": "ymTVR2I9x22I"
       },
       "source": [
-        "This session demonstrates the minumum working example of running the model on a **single image** to predict the 17 human keypoints."
+        "This session demonstrates the minimum working example of running the model on a **single image** to predict the 17 human keypoints."
       ]
     },
     {
@@ -697,7 +697,7 @@
         "  return output_image\n",
         "\n",
         "def run_inference(movenet, image, crop_region, crop_size):\n",
-        "  \"\"\"Runs model inferece on the cropped region.\n",
+        "  \"\"\"Runs model inference on the cropped region.\n",
         "\n",
         "  The function runs the model inference on the cropped region and updates the\n",
         "  model output to the original image coordinate system.\n",
diff --git a/site/en/hub/tutorials/movinet.ipynb b/site/en/hub/tutorials/movinet.ipynb
index 61609dbf72a..24600256cf9 100644
--- a/site/en/hub/tutorials/movinet.ipynb
+++ b/site/en/hub/tutorials/movinet.ipynb
@@ -890,7 +890,7 @@
         "  steps = video.shape[0]\n",
         "  # estimate duration of the video (in seconds)\n",
         "  duration = steps / video_fps\n",
-        "  # estiamte top_k probabilities and corresponding labels\n",
+        "  # estimate top_k probabilities and corresponding labels\n",
         "  top_probs, top_labels, _ = get_top_k_streaming_labels(probs, k=top_k)\n",
         "\n",
         "  images = []\n",
@@ -950,7 +950,7 @@
         "  logits, states = model({**states, 'image': image})\n",
         "  all_logits.append(logits)\n",
         "\n",
-        "# concatinating all the logits\n",
+        "# concatenating all the logits\n",
         "logits = tf.concat(all_logits, 0)\n",
         "# estimating probabilities\n",
         "probs = tf.nn.softmax(logits, axis=-1)"
diff --git a/site/en/hub/tutorials/s3gan_generation_with_tf_hub.ipynb b/site/en/hub/tutorials/s3gan_generation_with_tf_hub.ipynb
index d8efd802ae0..bd73cffebdf 100644
--- a/site/en/hub/tutorials/s3gan_generation_with_tf_hub.ipynb
+++ b/site/en/hub/tutorials/s3gan_generation_with_tf_hub.ipynb
@@ -86,7 +86,7 @@
         "2. Click **Runtime > Run all** to run each cell in order.\n",
         "  * Afterwards, the interactive visualizations should update automatically when you modify the settings using the sliders and dropdown menus.\n",
         "\n",
-        "Note: if you run into any issues, youn can try restarting the runtime and rerunning all cells from scratch by clicking **Runtime > Restart and run all...**.\n",
+        "Note: if you run into any issues, you can try restarting the runtime and rerunning all cells from scratch by clicking **Runtime > Restart and run all...**.\n",
         "\n",
         "[1] Mario Lucic\\*, Michael Tschannen\\*, Marvin Ritter\\*, Xiaohua Zhai, Olivier\n",
         "    Bachem, Sylvain Gelly, [High-Fidelity Image Generation With Fewer Labels](https://arxiv.org/abs/1903.02271), ICML 2019."
diff --git a/site/en/hub/tutorials/senteval_for_universal_sentence_encoder_cmlm.ipynb b/site/en/hub/tutorials/senteval_for_universal_sentence_encoder_cmlm.ipynb
index b152d3deee8..c33dce64c92 100644
--- a/site/en/hub/tutorials/senteval_for_universal_sentence_encoder_cmlm.ipynb
+++ b/site/en/hub/tutorials/senteval_for_universal_sentence_encoder_cmlm.ipynb
@@ -117,7 +117,7 @@
         "id": "7a2ohPn8vMe2"
       },
       "source": [
-        "#Execute a SentEval evaulation task\n",
+        "#Execute a SentEval evaluation task\n",
         "The following code block executes a SentEval task and output the results, choose one of the following tasks to evaluate the USE CMLM model:\n",
         "\n",
         "```\n",
diff --git a/site/en/hub/tutorials/spice.ipynb b/site/en/hub/tutorials/spice.ipynb
index b58d07e46da..9ff6cd3bd62 100644
--- a/site/en/hub/tutorials/spice.ipynb
+++ b/site/en/hub/tutorials/spice.ipynb
@@ -658,7 +658,7 @@
       "cell_type": "code",
       "execution_count": null,
       "metadata": {
-        "id": "eMUTI4L52ZHA"
+        "id": "eMULTI4L52ZHA"
       },
       "outputs": [],
       "source": [
diff --git a/site/en/hub/tutorials/text_cookbook.md b/site/en/hub/tutorials/text_cookbook.md
index 0ac9c6d6df3..dee9c1cf466 100644
--- a/site/en/hub/tutorials/text_cookbook.md
+++ b/site/en/hub/tutorials/text_cookbook.md
@@ -34,7 +34,7 @@ library for tokenization and preprocessing.
 
 ### Kaggle
 
-[IMDB classification on Kaggle](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/text_classification_with_tf_hub_on_kaggle.ipynb) -
+[IMDB classification on Kaggle](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/text_classification_with_tf_hub_on_kaggle.ipynb) -
 shows how to easily interact with a Kaggle competition from a Colab, including
 downloading the data and submitting the results.
 
@@ -43,14 +43,14 @@ downloading the data and submitting the results.
 [Text classification](https://www.tensorflow.org/hub/tutorials/text_classification_with_tf_hub)                                                                                          | ![done](https://www.gstatic.com/images/icons/material/system_gm/1x/bigtop_done_googblue_18dp.png) |                                                                                                   |                                                                                                   |                                                                                                   |                                                                                                   |
 [Text classification with Keras](https://www.tensorflow.org/tutorials/keras/text_classification_with_hub)                                                                                |                                                                                                   | ![done](https://www.gstatic.com/images/icons/material/system_gm/1x/bigtop_done_googblue_18dp.png) | ![done](https://www.gstatic.com/images/icons/material/system_gm/1x/bigtop_done_googblue_18dp.png) | ![done](https://www.gstatic.com/images/icons/material/system_gm/1x/bigtop_done_googblue_18dp.png) |                                                                                                   |
 [Predicting Movie Review Sentiment with BERT on TF Hub](https://github.com/google-research/bert/blob/master/predicting_movie_reviews_with_bert_on_tf_hub.ipynb)                          | ![done](https://www.gstatic.com/images/icons/material/system_gm/1x/bigtop_done_googblue_18dp.png) |                                                                                                   |                                                                                                   |                                                                                                   | ![done](https://www.gstatic.com/images/icons/material/system_gm/1x/bigtop_done_googblue_18dp.png) |
-[IMDB classification on Kaggle](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/text_classification_with_tf_hub_on_kaggle.ipynb) | ![done](https://www.gstatic.com/images/icons/material/system_gm/1x/bigtop_done_googblue_18dp.png) |                                                                                                   |                                                                                                   |                                                                                                   |                                                                                                   | ![done](https://www.gstatic.com/images/icons/material/system_gm/1x/bigtop_done_googblue_18dp.png)
+[IMDB classification on Kaggle](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/text_classification_with_tf_hub_on_kaggle.ipynb) | ![done](https://www.gstatic.com/images/icons/material/system_gm/1x/bigtop_done_googblue_18dp.png) |                                                                                                   |                                                                                                   |                                                                                                   |                                                                                                   | ![done](https://www.gstatic.com/images/icons/material/system_gm/1x/bigtop_done_googblue_18dp.png)
 
 ### Bangla task with FastText embeddings
 TensorFlow Hub does not currently offer a module in every language. The
 following tutorial shows how to leverage TensorFlow Hub for fast experimentation
 and modular ML development.
 
-[Bangla Article Classifier](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/bangla_article_classifier.ipynb) -
+[Bangla Article Classifier](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/bangla_article_classifier.ipynb) -
 demonstrates how to create a reusable TensorFlow Hub text embedding, and use it
 to train a Keras classifier for
 [BARD Bangla Article dataset](https://github.com/tanvirfahim15/BARD-Bangla-Article-Classifier).
@@ -64,24 +64,24 @@ setup (no training examples).
 
 ### Basic
 
-[Semantic similarity](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/semantic_similarity_with_tf_hub_universal_encoder.ipynb) -
+[Semantic similarity](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/semantic_similarity_with_tf_hub_universal_encoder.ipynb) -
 shows how to use the sentence encoder module to compute sentence similarity.
 
 ### Cross-lingual
 
-[Cross-lingual semantic similarity](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/cross_lingual_similarity_with_tf_hub_multilingual_universal_encoder.ipynb) -
+[Cross-lingual semantic similarity](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/cross_lingual_similarity_with_tf_hub_multilingual_universal_encoder.ipynb) -
 shows how to use one of the cross-lingual sentence encoders to compute sentence
 similarity across languages.
 
 ### Semantic retrieval
 
-[Semantic retrieval](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/retrieval_with_tf_hub_universal_encoder_qa.ipynb) -
+[Semantic retrieval](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/retrieval_with_tf_hub_universal_encoder_qa.ipynb) -
 shows how to use Q/A sentence encoder to index a collection of documents for
 retrieval based on semantic similarity.
 
 ### SentencePiece input
 
-[Semantic similarity with universal encoder lite](https://github.com/tensorflow/docs/blob/master/g3doc/en/hub/tutorials/semantic_similarity_with_tf_hub_universal_encoder_lite.ipynb) -
+[Semantic similarity with universal encoder lite](https://github.com/tensorflow/docs/blob/master/site/en/hub/tutorials/semantic_similarity_with_tf_hub_universal_encoder_lite.ipynb) -
 shows how to use sentence encoder modules that accept
 [SentencePiece](https://github.com/google/sentencepiece) ids on input instead of
 text.
diff --git a/site/en/hub/tutorials/tf2_object_detection.ipynb b/site/en/hub/tutorials/tf2_object_detection.ipynb
index 38b162068d9..d06ad401824 100644
--- a/site/en/hub/tutorials/tf2_object_detection.ipynb
+++ b/site/en/hub/tutorials/tf2_object_detection.ipynb
@@ -291,7 +291,7 @@
         "id": "yX3pb_pXDjYA"
       },
       "source": [
-        "Intalling the Object Detection API"
+        "Installing the Object Detection API"
       ]
     },
     {
@@ -554,7 +554,7 @@
         "\n",
         "Among the available object detection models there's Mask R-CNN and the output of this model allows instance segmentation.\n",
         "\n",
-        "To visualize it we will use the same method we did before but adding an aditional parameter: `instance_masks=output_dict.get('detection_masks_reframed', None)`\n"
+        "To visualize it we will use the same method we did before but adding an additional parameter: `instance_masks=output_dict.get('detection_masks_reframed', None)`\n"
       ]
     },
     {
diff --git a/site/en/hub/tutorials/tf_hub_generative_image_module.ipynb b/site/en/hub/tutorials/tf_hub_generative_image_module.ipynb
index 4669f3b2dc3..4937bc2eb22 100644
--- a/site/en/hub/tutorials/tf_hub_generative_image_module.ipynb
+++ b/site/en/hub/tutorials/tf_hub_generative_image_module.ipynb
@@ -421,7 +421,7 @@
         "If image is from the module space, the descent is quick and converges to a reasonable sample. Try out descending to an image that is **not from the module space**. The descent will only converge if the image is reasonably close to the space of training images.\n",
         "\n",
         "How to make it descend faster and to a more realistic image? One can try:\n",
-        "* using different loss on the image difference, e.g. quadratic,\n",
+        "* using different loss on the image difference, e.g., quadratic,\n",
         "* using different regularizer on the latent vector,\n",
         "* initializing from a random vector in multiple runs,\n",
         "* etc.\n"
diff --git a/site/en/hub/tutorials/wiki40b_lm.ipynb b/site/en/hub/tutorials/wiki40b_lm.ipynb
index e696160faca..ad94ce0aab8 100644
--- a/site/en/hub/tutorials/wiki40b_lm.ipynb
+++ b/site/en/hub/tutorials/wiki40b_lm.ipynb
@@ -214,7 +214,7 @@
         "  # Generate the tokens from the language model\n",
         "  generation_outputs = module(generation_input_dict, signature=\"prediction\", as_dict=True)\n",
         "\n",
-        "  # Get the probablities and the inputs for the next steps\n",
+        "  # Get the probabilities and the inputs for the next steps\n",
         "  probs = generation_outputs[\"probs\"]\n",
         "  new_mems = [generation_outputs[\"new_mem_{}\".format(i)] for i in range(n_layer)]\n",
         "\n",
diff --git a/site/en/install/docker.md b/site/en/install/docker.md
index 8a2b1347668..836d771c31e 100644
--- a/site/en/install/docker.md
+++ b/site/en/install/docker.md
@@ -1,36 +1,36 @@
 # Docker
 
-[Docker](https://docs.docker.com/install/){:.external} uses *containers* to
+[Docker](https://docs.docker.com/install/) uses *containers* to
 create virtual environments that isolate a TensorFlow installation from the rest
 of the system. TensorFlow programs are run *within* this virtual environment that
 can share resources with its host machine (access directories, use the GPU,
 connect to the Internet, etc.). The
-[TensorFlow Docker images](https://hub.docker.com/r/tensorflow/tensorflow/){:.external}
+[TensorFlow Docker images](https://hub.docker.com/r/tensorflow/tensorflow/)
 are tested for each release.
 
 Docker is the easiest way to enable TensorFlow [GPU support](./pip.md) on Linux since only the
-[NVIDIA® GPU driver](https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#how-do-i-install-the-nvidia-driver){:.external}
+[NVIDIA® GPU driver](https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#how-do-i-install-the-nvidia-driver)
 is required on the *host* machine (the *NVIDIA® CUDA® Toolkit* does not need to
 be installed).
 
 
 ## TensorFlow Docker requirements
 
-1. [Install Docker](https://docs.docker.com/install/){:.external} on
+1. [Install Docker](https://docs.docker.com/install/) on
    your local *host* machine.
-2. For GPU support on Linux, [install NVIDIA Docker support](https://github.com/NVIDIA/nvidia-docker){:.external}.
+2. For GPU support on Linux, [install NVIDIA Docker support](https://github.com/NVIDIA/nvidia-docker).
    * Take note of your Docker version with `docker -v`. Versions __earlier than__ 19.03 require nvidia-docker2 and the `--runtime=nvidia` flag. On versions __including and after__ 19.03, you will use the `nvidia-container-toolkit` package and the `--gpus all` flag. Both options are documented on the page linked above.
 
 Note: To run the `docker` command without `sudo`, create the `docker` group and
 add your user. For details, see the
-[post-installation steps for Linux](https://docs.docker.com/install/linux/linux-postinstall/){:.external}.
+[post-installation steps for Linux](https://docs.docker.com/install/linux/linux-postinstall/).
 
 
 ## Download a TensorFlow Docker image
 
 The official TensorFlow Docker images are located in the 
-[tensorflow/tensorflow](https://hub.docker.com/r/tensorflow/tensorflow/){:.external}
-Docker Hub repository. Image releases [are tagged](https://hub.docker.com/r/tensorflow/tensorflow/tags/){:.external}
+[tensorflow/tensorflow](https://hub.docker.com/r/tensorflow/tensorflow/)
+Docker Hub repository. Image releases [are tagged](https://hub.docker.com/r/tensorflow/tensorflow/tags/)
 using the following format:
 
 | Tag         | Description                                                                                                          |
@@ -64,7 +64,7 @@ To start a TensorFlow-configured container, use the following command form:
 docker run [-it] [--rm] [-p hostPort:containerPort] tensorflow/tensorflow[:tag] [command]
 
-For details, see the [docker run reference](https://docs.docker.com/engine/reference/run/){:.external}. +For details, see the [docker run reference](https://docs.docker.com/engine/reference/run/). ### Examples using CPU-only images @@ -98,7 +98,7 @@ docker run -it --rm -v $PWD:/tmp -w /tmp tensorflow/tensorflow python ./script.p Permission issues can arise when files created within a container are exposed to the host. It's usually best to edit files on the host system. -Start a [Jupyter Notebook](https://jupyter.org/){:.external} server using +Start a [Jupyter Notebook](https://jupyter.org/) server using TensorFlow's nightly build:
@@ -112,13 +112,13 @@ Follow the instructions and open the URL in your host web browser:
 ## GPU support
 
 Docker is the easiest way to run TensorFlow on a GPU since the *host* machine
-only requires the [NVIDIA® driver](https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#how-do-i-install-the-nvidia-driver){:.external}
+only requires the [NVIDIA® driver](https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#how-do-i-install-the-nvidia-driver)
 (the *NVIDIA® CUDA® Toolkit* is not required).
 
-Install the [Nvidia Container Toolkit](https://github.com/NVIDIA/nvidia-docker/blob/master/README.md#quickstart){:.external} 
+Install the [Nvidia Container Toolkit](https://github.com/NVIDIA/nvidia-docker/blob/master/README.md#quickstart) 
 to add NVIDIA® GPU support to Docker. `nvidia-container-runtime` is only
 available for Linux. See the `nvidia-container-runtime` 
-[platform support FAQ](https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#platform-support){:.external}
+[platform support FAQ](https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#platform-support)
 for details.
 
 Check if a GPU is available:
diff --git a/site/en/install/errors.md b/site/en/install/errors.md
index d1ad9e50af5..938ba8b454f 100644
--- a/site/en/install/errors.md
+++ b/site/en/install/errors.md
@@ -1,8 +1,8 @@
 # Build and install error messages
 
-TensorFlow uses [GitHub issues](https://github.com/tensorflow/tensorflow/issues){:.external},
-[Stack Overflow](https://stackoverflow.com/questions/tagged/tensorflow){:.external} and
-[TensorFlow Forum](https://discuss.tensorflow.org/c/general-discussion/6){:.external}
+TensorFlow uses [GitHub issues](https://github.com/tensorflow/tensorflow/issues),
+[Stack Overflow](https://stackoverflow.com/questions/tagged/tensorflow) and
+[TensorFlow Forum](https://discuss.tensorflow.org/c/general-discussion/6)
 to track, document, and discuss build and installation problems.
 
 The following list links error messages to a solution or discussion. If you find
diff --git a/site/en/install/gpu_plugins.md b/site/en/install/gpu_plugins.md
index 5abfbc1ef03..39e3cf09b29 100644
--- a/site/en/install/gpu_plugins.md
+++ b/site/en/install/gpu_plugins.md
@@ -4,7 +4,7 @@ Note: This page is for non-NVIDIA® GPU devices. For NVIDIA® GPU support, go to
 the [Install TensorFlow with pip](./pip.md) guide.
 
 TensorFlow's
-[pluggable device](https://github.com/tensorflow/community/blob/master/rfcs/20200624-pluggable-device-for-tensorflow.md){:.external}
+[pluggable device](https://github.com/tensorflow/community/blob/master/rfcs/20200624-pluggable-device-for-tensorflow.md)
 architecture adds new device support as separate plug-in packages that are
 installed alongside the official TensorFlow package.
 
@@ -58,23 +58,23 @@ run()  # PluggableDevices also work with tf.function and graph mode.
 Metal `PluggableDevice` for macOS GPUs:
 
 *   Works with TF 2.5 or later.
-*   [Getting started guide](https://developer.apple.com/metal/tensorflow-plugin/){:.external}.
+*   [Getting started guide](https://developer.apple.com/metal/tensorflow-plugin/).
 *   For questions and feedback, please visit the
-    [Apple Developer Forum](https://developer.apple.com/forums/tags/tensorflow-metal){:.external}.
+    [Apple Developer Forum](https://developer.apple.com/forums/tags/tensorflow-metal).
 
 DirectML `PluggableDevice` for Windows and WSL (preview):
 
 *   Works with `tensorflow-cpu` package, version 2.10 or later.
-*   [PyPI wheel](https://pypi.org/project/tensorflow-directml-plugin/){:.external}.
-*   [GitHub repo](https://github.com/microsoft/tensorflow-directml-plugin){:.external}.
+*   [PyPI wheel](https://pypi.org/project/tensorflow-directml-plugin/).
+*   [GitHub repo](https://github.com/microsoft/tensorflow-directml-plugin).
 *   For questions, feedback or to raise issues, please visit the
-    [Issues page of `tensorflow-directml-plugin` on GitHub](https://github.com/microsoft/tensorflow-directml-plugin/issues){:.external}.
+    [Issues page of `tensorflow-directml-plugin` on GitHub](https://github.com/microsoft/tensorflow-directml-plugin/issues).
 
 Intel® Extension for TensorFlow `PluggableDevice` for Linux and WSL:
 
 *   Works with TF 2.10 or later.
 *   [Getting started guide](https://intel.github.io/intel-extension-for-tensorflow/latest/get_started.html)
-*   [PyPI wheel](https://pypi.org/project/intel-extension-for-tensorflow/){:.external}.
-*   [GitHub repo](https://github.com/intel/intel-extension-for-tensorflow){:.external}.
+*   [PyPI wheel](https://pypi.org/project/intel-extension-for-tensorflow/).
+*   [GitHub repo](https://github.com/intel/intel-extension-for-tensorflow).
 *   For questions, feedback, or to raise issues, please visit the
-    [Issues page of `intel-extension-for-tensorflow` on GitHub](https://github.com/intel/intel-extension-for-tensorflow/issues){:.external}.
+    [Issues page of `intel-extension-for-tensorflow` on GitHub](https://github.com/intel/intel-extension-for-tensorflow/issues).
diff --git a/site/en/install/lang_c.ipynb b/site/en/install/lang_c.ipynb
index cfff20db10b..240cfc29865 100644
--- a/site/en/install/lang_c.ipynb
+++ b/site/en/install/lang_c.ipynb
@@ -130,16 +130,23 @@
         "  Linux\n",
         "  \n",
         "    Linux CPU only\n",
-        "    https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-2.15.0.tar.gz\n",
+        "    https://storage.googleapis.com/tensorflow/versions/2.17.0/libtensorflow-cpu-linux-x86_64.tar.gz\n",
         "  \n",
         "  \n",
         "    Linux GPU support\n",
-        "    https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-2.15.0.tar.gz\n",
+        "    https://storage.googleapis.com/tensorflow/versions/2.17.0/libtensorflow-gpu-linux-x86_64.tar.gz\n",
         "  \n",
-        "  macOS\n",
+        "  macOS\n",
+        "    \n",
+        "  \n",
         "  \n",
         "    macOS CPU only\n",
-        "    https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-2.15.0.tar.gz\n",
+        "    https://storage.googleapis.com/tensorflow/versions/2.16.2/libtensorflow-cpu-darwin-x86_64.tar.gz\n",
+        "  \n",
+        "    macOS ARM64 CPU only\n",
+        "    https://storage.googleapis.com/tensorflow/versions/2.17.0/libtensorflow-cpu-darwin-arm64.tar.gz\n",
         "  \n",
         "  Windows\n",
         "