{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "uAttKaKmT435" }, "source": [ "
\n", "\n", "\n", "\n", "\n", "
\n", "View on TensorFlow.org\n", "Run in Google Colab\n", "View source on GitHub\n", "Download notebook
" ] }, { "cell_type": "markdown", "metadata": { "id": "tghWegsjhpkt" }, "source": [ "##### Copyright 2020 The TensorFlow Authors." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "cellView": "form", "execution": { "iopub.execute_input": "2024-04-30T10:48:49.028109Z", "iopub.status.busy": "2024-04-30T10:48:49.027861Z", "iopub.status.idle": "2024-04-30T10:48:49.031680Z", "shell.execute_reply": "2024-04-30T10:48:49.031027Z" }, "id": "rSGJWC5biBiG" }, "outputs": [], "source": [ "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", "# you may not use this file except in compliance with the License.\n", "# You may obtain a copy of the License at\n", "#\n", "# https://www.apache.org/licenses/LICENSE-2.0\n", "#\n", "# Unless required by applicable law or agreed to in writing, software\n", "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "# See the License for the specific language governing permissions and\n", "# limitations under the License." ] }, { "cell_type": "markdown", "metadata": { "id": "mPt5BHTwy_0F" }, "source": [ "# Preprocessing data with TensorFlow Transform\n", "***The Feature Engineering Component of TensorFlow Extended (TFX)***\n", "\n", "This example colab notebook provides a somewhat more advanced example of how TensorFlow Transform (`tf.Transform`) can be used to preprocess data using exactly the same code for both training a model and serving inferences in production.\n", "\n", "TensorFlow Transform is a library for preprocessing input data for TensorFlow, including creating features that require a full pass over the training dataset. For example, using TensorFlow Transform you could:\n", "\n", "* Normalize an input value by using the mean and standard deviation\n", "* Convert strings to integers by generating a vocabulary over all of the input values\n", "* Convert floats to integers by assigning them to buckets, based on the observed data distribution\n", "\n", "TensorFlow has built-in support for manipulations on a single example or a batch of examples. `tf.Transform` extends these capabilities to support full passes over the entire training dataset.\n", "\n", "The output of `tf.Transform` is exported as a TensorFlow graph which you can use for both training and serving. Using the same graph for both training and serving can prevent skew, since the same transformations are applied in both stages.\n", "\n", "Key Point: In order to understand `tf.Transform` and how it works with Apache Beam, you'll need to know a little bit about Apache Beam itself. The Beam Programming Guide is a great place to start." ] }, { "cell_type": "markdown", "metadata": { "id": "_tQUubddMvnP" }, "source": [ "##What we're doing in this example\n", "\n", "In this example we'll be processing a widely used dataset containing census data, and training a model to do classification. Along the way we'll be transforming the data using `tf.Transform`.\n", "\n", "Key Point: As a modeler and developer, think about how this data is used and the potential benefits and harm a model's predictions can cause. A model like this could reinforce societal biases and disparities. Is a feature relevant to the problem you want to solve or will it introduce bias? For more information, read about ML fairness.\n", "\n", "Note: TensorFlow Model Analysis is a powerful tool for understanding how well your model predicts for various segments of your data, including understanding how your model may reinforce societal biases and disparities." ] }, { "cell_type": "markdown", "metadata": { "id": "OeonII4omTr1" }, "source": [ "### Install TensorFlow Transform\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:49.035379Z", "iopub.status.busy": "2024-04-30T10:48:49.034949Z", "iopub.status.idle": "2024-04-30T10:48:54.329126Z", "shell.execute_reply": "2024-04-30T10:48:54.328190Z" }, "id": "9Ak6XDO5mT3m" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: tensorflow-transform in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (1.15.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: absl-py<2.0.0,>=0.9 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-transform) (1.4.0)\r\n", "Requirement already satisfied: numpy>=1.22.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-transform) (1.26.4)\r\n", "Requirement already satisfied: pyarrow<11,>=10 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-transform) (10.0.1)\r\n", "Requirement already satisfied: pydot<2,>=1.2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-transform) (1.4.2)\r\n", "Requirement already satisfied: tensorflow<2.16,>=2.15 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-transform) (2.15.1)\r\n", "Requirement already satisfied: tensorflow-metadata<1.16.0,>=1.15.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-transform) (1.15.0)\r\n", "Requirement already satisfied: tfx-bsl<1.16.0,>=1.15.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-transform) (1.15.1)\r\n", "Requirement already satisfied: apache-beam<3,>=2.47 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.55.1)\r\n", "Requirement already satisfied: protobuf<5,>=3.20.3 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-transform) (3.20.3)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: crcmod<2.0,>=1.7 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.7)\r\n", "Requirement already satisfied: orjson<4,>=3.9.7 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (3.10.1)\r\n", "Requirement already satisfied: dill<0.3.2,>=0.3.1.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.3.1.1)\r\n", "Requirement already satisfied: cloudpickle~=2.2.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.2.1)\r\n", "Requirement already satisfied: fastavro<2,>=0.23.6 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.9.4)\r\n", "Requirement already satisfied: fasteners<1.0,>=0.3 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.19)\r\n", "Requirement already satisfied: grpcio!=1.48.0,<2,>=1.33.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.63.0rc2)\r\n", "Requirement already satisfied: hdfs<3.0.0,>=2.1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.7.3)\r\n", "Requirement already satisfied: httplib2<0.23.0,>=0.8 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.22.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: js2py<1,>=0.74 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.74)\r\n", "Requirement already satisfied: jsonschema<5.0.0,>=4.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (4.21.1)\r\n", "Requirement already satisfied: jsonpickle<4.0.0,>=3.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (3.0.4)\r\n", "Requirement already satisfied: objsize<0.8.0,>=0.6.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.7.0)\r\n", "Requirement already satisfied: packaging>=22.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (24.0)\r\n", "Requirement already satisfied: pymongo<5.0.0,>=3.8.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (4.7.0)\r\n", "Requirement already satisfied: proto-plus<2,>=1.7.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.23.0)\r\n", "Requirement already satisfied: python-dateutil<3,>=2.8.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.9.0.post0)\r\n", "Requirement already satisfied: pytz>=2018.3 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2024.1)\r\n", "Requirement already satisfied: regex>=2020.6.8 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2024.4.28)\r\n", "Requirement already satisfied: requests<3.0.0,>=2.24.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.31.0)\r\n", "Requirement already satisfied: typing-extensions>=3.7.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (4.11.0)\r\n", "Requirement already satisfied: zstandard<1,>=0.18.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.22.0)\r\n", "Requirement already satisfied: pyarrow-hotfix<1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.6)\r\n", "Requirement already satisfied: cachetools<6,>=3.1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (5.3.3)\r\n", "Requirement already satisfied: google-api-core<3,>=2.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.18.0)\r\n", "Requirement already satisfied: google-apitools<0.5.32,>=0.5.31 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.5.31)\r\n", "Requirement already satisfied: google-auth<3,>=1.18.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.29.0)\r\n", "Requirement already satisfied: google-auth-httplib2<0.2.0,>=0.1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.1.1)\r\n", "Requirement already satisfied: google-cloud-datastore<3,>=2.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.19.0)\r\n", "Requirement already satisfied: google-cloud-pubsub<3,>=2.1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.21.1)\r\n", "Requirement already satisfied: google-cloud-pubsublite<2,>=1.2.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.10.0)\r\n", "Requirement already satisfied: google-cloud-storage<3,>=2.14.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.16.0)\r\n", "Requirement already satisfied: google-cloud-bigquery<4,>=2.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (3.21.0)\r\n", "Requirement already satisfied: google-cloud-bigquery-storage<3,>=2.6.3 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.24.0)\r\n", "Requirement already satisfied: google-cloud-core<3,>=2.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.4.1)\r\n", "Requirement already satisfied: google-cloud-bigtable<3,>=2.19.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.23.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: google-cloud-spanner<4,>=3.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (3.45.0)\r\n", "Requirement already satisfied: google-cloud-dlp<4,>=3.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (3.16.0)\r\n", "Requirement already satisfied: google-cloud-language<3,>=2.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.13.3)\r\n", "Requirement already satisfied: google-cloud-videointelligence<3,>=2.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.13.3)\r\n", "Requirement already satisfied: google-cloud-vision<4,>=2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (3.7.2)\r\n", "Requirement already satisfied: google-cloud-recommendations-ai<0.11.0,>=0.1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.10.10)\r\n", "Requirement already satisfied: google-cloud-aiplatform<2.0,>=1.26.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.49.0)\r\n", "Requirement already satisfied: pyparsing>=2.1.4 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from pydot<2,>=1.2->tensorflow-transform) (3.1.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: astunparse>=1.6.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (1.6.3)\r\n", "Requirement already satisfied: flatbuffers>=23.5.26 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (24.3.25)\r\n", "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (0.5.4)\r\n", "Requirement already satisfied: google-pasta>=0.1.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (0.2.0)\r\n", "Requirement already satisfied: h5py>=2.9.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (3.11.0)\r\n", "Requirement already satisfied: libclang>=13.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (18.1.1)\r\n", "Requirement already satisfied: ml-dtypes~=0.3.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (0.3.2)\r\n", "Requirement already satisfied: opt-einsum>=2.3.2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (3.3.0)\r\n", "Requirement already satisfied: setuptools in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (69.5.1)\r\n", "Requirement already satisfied: six>=1.12.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (1.16.0)\r\n", "Requirement already satisfied: termcolor>=1.1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (2.4.0)\r\n", "Requirement already satisfied: wrapt<1.15,>=1.11.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (1.14.1)\r\n", "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (0.36.0)\r\n", "Requirement already satisfied: tensorboard<2.16,>=2.15 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (2.15.2)\r\n", "Requirement already satisfied: tensorflow-estimator<2.16,>=2.15.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (2.15.0)\r\n", "Requirement already satisfied: keras<2.16,>=2.15.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow<2.16,>=2.15->tensorflow-transform) (2.15.0)\r\n", "Requirement already satisfied: google-api-python-client<2,>=1.7.11 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tfx-bsl<1.16.0,>=1.15.1->tensorflow-transform) (1.12.11)\r\n", "Requirement already satisfied: pandas<2,>=1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tfx-bsl<1.16.0,>=1.15.1->tensorflow-transform) (1.5.3)\r\n", "Requirement already satisfied: tensorflow-serving-api<3,>=2.13.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tfx-bsl<1.16.0,>=1.15.1->tensorflow-transform) (2.15.1)\r\n", "Requirement already satisfied: wheel<1.0,>=0.23.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from astunparse>=1.6.0->tensorflow<2.16,>=2.15->tensorflow-transform) (0.43.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: googleapis-common-protos<2.0.dev0,>=1.56.2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-api-core<3,>=2.0.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.63.0)\r\n", "Requirement already satisfied: uritemplate<4dev,>=3.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-api-python-client<2,>=1.7.11->tfx-bsl<1.16.0,>=1.15.1->tensorflow-transform) (3.0.1)\r\n", "Requirement already satisfied: oauth2client>=1.4.12 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-apitools<0.5.32,>=0.5.31->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (4.1.3)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: pyasn1-modules>=0.2.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-auth<3,>=1.18.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.4.0)\r\n", "Requirement already satisfied: rsa<5,>=3.1.4 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-auth<3,>=1.18.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (4.9)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: google-cloud-resource-manager<3.0.0dev,>=1.3.3 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0,>=1.26.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.12.3)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: shapely<3.0.0dev in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0,>=1.26.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.0.4)\r\n", "Requirement already satisfied: pydantic<3 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0,>=1.26.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.10.15)\r\n", "Requirement already satisfied: docstring-parser<1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0,>=1.26.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.16)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: google-resumable-media<3.0dev,>=0.6.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-bigquery<4,>=2.0.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.7.0)\r\n", "Requirement already satisfied: grpc-google-iam-v1<1.0.0dev,>=0.12.4 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-bigtable<3,>=2.19.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.13.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: grpcio-status>=1.33.2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-pubsub<3,>=2.1.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.48.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: overrides<8.0.0,>=6.0.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-pubsublite<2,>=1.2.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (7.7.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: sqlparse>=0.4.4 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-spanner<4,>=3.0.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.5.0)\r\n", "Requirement already satisfied: grpc-interceptor>=0.15.4 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-spanner<4,>=3.0.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.15.4)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-cloud-storage<3,>=2.14.0->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.5.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: docopt in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from hdfs<3.0.0,>=2.1.0->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.6.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: tzlocal>=1.2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from js2py<1,>=0.74->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (5.2)\r\n", "Requirement already satisfied: pyjsparser>=2.5.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from js2py<1,>=0.74->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.7.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: attrs>=22.2.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from jsonschema<5.0.0,>=4.0.0->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (23.2.0)\r\n", "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from jsonschema<5.0.0,>=4.0.0->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2023.12.1)\r\n", "Requirement already satisfied: referencing>=0.28.4 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from jsonschema<5.0.0,>=4.0.0->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.35.0)\r\n", "Requirement already satisfied: rpds-py>=0.7.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from jsonschema<5.0.0,>=4.0.0->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.18.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: dnspython<3.0.0,>=1.16.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from pymongo<5.0.0,>=3.8.0->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2.6.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: charset-normalizer<4,>=2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from requests<3.0.0,>=2.24.0->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (3.3.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: idna<4,>=2.5 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from requests<3.0.0,>=2.24.0->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (3.7)\r\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from requests<3.0.0,>=2.24.0->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (1.26.18)\r\n", "Requirement already satisfied: certifi>=2017.4.17 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from requests<3.0.0,>=2.24.0->apache-beam<3,>=2.47->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (2024.2.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: google-auth-oauthlib<2,>=0.5 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorboard<2.16,>=2.15->tensorflow<2.16,>=2.15->tensorflow-transform) (1.2.0)\r\n", "Requirement already satisfied: markdown>=2.6.8 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorboard<2.16,>=2.15->tensorflow<2.16,>=2.15->tensorflow-transform) (3.6)\r\n", "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorboard<2.16,>=2.15->tensorflow<2.16,>=2.15->tensorflow-transform) (0.7.2)\r\n", "Requirement already satisfied: werkzeug>=1.0.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorboard<2.16,>=2.15->tensorflow<2.16,>=2.15->tensorflow-transform) (3.0.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: requests-oauthlib>=0.7.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-auth-oauthlib<2,>=0.5->tensorboard<2.16,>=2.15->tensorflow<2.16,>=2.15->tensorflow-transform) (2.0.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: importlib-metadata>=4.4 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from markdown>=2.6.8->tensorboard<2.16,>=2.15->tensorflow<2.16,>=2.15->tensorflow-transform) (7.1.0)\r\n", "Requirement already satisfied: pyasn1>=0.1.7 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from oauth2client>=1.4.12->google-apitools<0.5.32,>=0.5.31->apache-beam[gcp]<3,>=2.47; python_version < \"3.11\"->tensorflow-transform) (0.6.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: MarkupSafe>=2.1.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from werkzeug>=1.0.1->tensorboard<2.16,>=2.15->tensorflow<2.16,>=2.15->tensorflow-transform) (2.1.5)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: zipp>=0.5 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from importlib-metadata>=4.4->markdown>=2.6.8->tensorboard<2.16,>=2.15->tensorflow<2.16,>=2.15->tensorflow-transform) (3.18.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: oauthlib>=3.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<2,>=0.5->tensorboard<2.16,>=2.15->tensorflow<2.16,>=2.15->tensorflow-transform) (3.2.2)\r\n" ] } ], "source": [ "!pip install tensorflow-transform" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:54.333453Z", "iopub.status.busy": "2024-04-30T10:48:54.333154Z", "iopub.status.idle": "2024-04-30T10:48:54.462143Z", "shell.execute_reply": "2024-04-30T10:48:54.461456Z" }, "id": "R0mXLOJR_-dv" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmpfs/tmp/ipykernel_186972/639106435.py:3: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html\n", " import pkg_resources\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# This cell is only necessary because packages were installed while python was\n", "# running. It avoids the need to restart the runtime when running in Colab.\n", "import pkg_resources\n", "import importlib\n", "\n", "importlib.reload(pkg_resources)" ] }, { "cell_type": "markdown", "metadata": { "id": "RptgLn2RYuK3" }, "source": [ "## Imports and globals\n", "\n", "First import the stuff we need." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:54.465842Z", "iopub.status.busy": "2024-04-30T10:48:54.465596Z", "iopub.status.idle": "2024-04-30T10:48:57.961988Z", "shell.execute_reply": "2024-04-30T10:48:57.961165Z" }, "id": "K4QXVIM7iglN" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-04-30 10:48:55.479069: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", "2024-04-30 10:48:55.479126: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", "2024-04-30 10:48:55.480629: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "TF: 2.15.1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Beam: 2.55.1\n", "Transform: 1.15.0\n" ] } ], "source": [ "import math\n", "import os\n", "import pprint\n", "\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "import tensorflow as tf\n", "print('TF: {}'.format(tf.__version__))\n", "\n", "import apache_beam as beam\n", "print('Beam: {}'.format(beam.__version__))\n", "\n", "import tensorflow_transform as tft\n", "import tensorflow_transform.beam as tft_beam\n", "from tensorflow_transform.keras_lib import tf_keras\n", "print('Transform: {}'.format(tft.__version__))\n", "\n", "from tfx_bsl.public import tfxio\n", "from tfx_bsl.coders.example_coder import RecordBatchToExamplesEncoder" ] }, { "cell_type": "markdown", "metadata": { "id": "sutRmRNSGT5p" }, "source": [ "Next download the data files:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:57.965819Z", "iopub.status.busy": "2024-04-30T10:48:57.965291Z", "iopub.status.idle": "2024-04-30T10:48:58.472604Z", "shell.execute_reply": "2024-04-30T10:48:58.471618Z" }, "id": "mKEYRl2g_vzl" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2024-04-30 10:48:57-- https://storage.googleapis.com/artifacts.tfx-oss-public.appspot.com/datasets/census/adult.data\r\n", "Resolving storage.googleapis.com (storage.googleapis.com)... 173.194.206.207, 108.177.120.207, 142.250.103.207, ...\r\n", "Connecting to storage.googleapis.com (storage.googleapis.com)|173.194.206.207|:443... connected.\r\n", "HTTP request sent, awaiting response... " ] }, { "name": "stdout", "output_type": "stream", "text": [ "200 OK\r\n", "Length: 3974305 (3.8M) [application/octet-stream]\r\n", "Saving to: ‘adult.data’\r\n", "\r\n", "\r", "adult.data 0%[ ] 0 --.-KB/s \r", "adult.data 100%[===================>] 3.79M --.-KB/s in 0.02s \r\n", "\r\n", "2024-04-30 10:48:58 (165 MB/s) - ‘adult.data’ saved [3974305/3974305]\r\n", "\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "--2024-04-30 10:48:58-- https://storage.googleapis.com/artifacts.tfx-oss-public.appspot.com/datasets/census/adult.test\r\n", "Resolving storage.googleapis.com (storage.googleapis.com)... 173.194.206.207, 108.177.120.207, 142.250.103.207, ...\r\n", "Connecting to storage.googleapis.com (storage.googleapis.com)|173.194.206.207|:443... connected.\r\n", "HTTP request sent, awaiting response... " ] }, { "name": "stdout", "output_type": "stream", "text": [ "200 OK\r\n", "Length: 2003153 (1.9M) [application/octet-stream]\r\n", "Saving to: ‘adult.test’\r\n", "\r\n", "\r", "adult.test 0%[ ] 0 --.-KB/s \r", "adult.test 100%[===================>] 1.91M --.-KB/s in 0.01s \r\n", "\r\n", "2024-04-30 10:48:58 (145 MB/s) - ‘adult.test’ saved [2003153/2003153]\r\n", "\r\n" ] } ], "source": [ "!wget https://storage.googleapis.com/artifacts.tfx-oss-public.appspot.com/datasets/census/adult.data\n", "!wget https://storage.googleapis.com/artifacts.tfx-oss-public.appspot.com/datasets/census/adult.test\n", "\n", "train_path = './adult.data'\n", "test_path = './adult.test'" ] }, { "cell_type": "markdown", "metadata": { "id": "CxOxaaOYRfl7" }, "source": [ "### Name our columns\n", "We'll create some handy lists for referencing the columns in our dataset." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:58.476474Z", "iopub.status.busy": "2024-04-30T10:48:58.476195Z", "iopub.status.idle": "2024-04-30T10:48:58.480866Z", "shell.execute_reply": "2024-04-30T10:48:58.480283Z" }, "id": "-bsr1nLHqyg_" }, "outputs": [], "source": [ "CATEGORICAL_FEATURE_KEYS = [\n", " 'workclass',\n", " 'education',\n", " 'marital-status',\n", " 'occupation',\n", " 'relationship',\n", " 'race',\n", " 'sex',\n", " 'native-country',\n", "]\n", "\n", "NUMERIC_FEATURE_KEYS = [\n", " 'age',\n", " 'capital-gain',\n", " 'capital-loss',\n", " 'hours-per-week',\n", " 'education-num'\n", "]\n", "\n", "ORDERED_CSV_COLUMNS = [\n", " 'age', 'workclass', 'fnlwgt', 'education', 'education-num',\n", " 'marital-status', 'occupation', 'relationship', 'race', 'sex',\n", " 'capital-gain', 'capital-loss', 'hours-per-week', 'native-country', 'label'\n", "]\n", "\n", "LABEL_KEY = 'label'" ] }, { "cell_type": "markdown", "metadata": { "id": "R52dXlw0G0CN" }, "source": [ "Here's a quick preview of the data:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:58.484168Z", "iopub.status.busy": "2024-04-30T10:48:58.483913Z", "iopub.status.idle": "2024-04-30T10:48:58.566970Z", "shell.execute_reply": "2024-04-30T10:48:58.566367Z" }, "id": "312cQ5vwGjOu" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ageworkclassfnlwgteducationeducation-nummarital-statusoccupationrelationshipracesexcapital-gaincapital-losshours-per-weeknative-countrylabel
039State-gov77516Bachelors13Never-marriedAdm-clericalNot-in-familyWhiteMale2174040United-States<=50K
150Self-emp-not-inc83311Bachelors13Married-civ-spouseExec-managerialHusbandWhiteMale0013United-States<=50K
238Private215646HS-grad9DivorcedHandlers-cleanersNot-in-familyWhiteMale0040United-States<=50K
353Private23472111th7Married-civ-spouseHandlers-cleanersHusbandBlackMale0040United-States<=50K
428Private338409Bachelors13Married-civ-spouseProf-specialtyWifeBlackFemale0040Cuba<=50K
\n", "
" ], "text/plain": [ " age workclass fnlwgt education education-num \\\n", "0 39 State-gov 77516 Bachelors 13 \n", "1 50 Self-emp-not-inc 83311 Bachelors 13 \n", "2 38 Private 215646 HS-grad 9 \n", "3 53 Private 234721 11th 7 \n", "4 28 Private 338409 Bachelors 13 \n", "\n", " marital-status occupation relationship race sex \\\n", "0 Never-married Adm-clerical Not-in-family White Male \n", "1 Married-civ-spouse Exec-managerial Husband White Male \n", "2 Divorced Handlers-cleaners Not-in-family White Male \n", "3 Married-civ-spouse Handlers-cleaners Husband Black Male \n", "4 Married-civ-spouse Prof-specialty Wife Black Female \n", "\n", " capital-gain capital-loss hours-per-week native-country label \n", "0 2174 0 40 United-States <=50K \n", "1 0 0 13 United-States <=50K \n", "2 0 0 40 United-States <=50K \n", "3 0 0 40 United-States <=50K \n", "4 0 0 40 Cuba <=50K " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pandas_train = pd.read_csv(train_path, header=None, names=ORDERED_CSV_COLUMNS)\n", "\n", "pandas_train.head(5)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:58.570087Z", "iopub.status.busy": "2024-04-30T10:48:58.569819Z", "iopub.status.idle": "2024-04-30T10:48:58.573492Z", "shell.execute_reply": "2024-04-30T10:48:58.572907Z" }, "id": "zzjzjR3351j0" }, "outputs": [], "source": [ "one_row = dict(pandas_train.loc[0])" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:58.576485Z", "iopub.status.busy": "2024-04-30T10:48:58.576242Z", "iopub.status.idle": "2024-04-30T10:48:58.579785Z", "shell.execute_reply": "2024-04-30T10:48:58.579203Z" }, "id": "zk2b8IPd4uPr" }, "outputs": [], "source": [ "COLUMN_DEFAULTS = [\n", " '' if isinstance(v, str) else 0.0\n", " for v in dict(pandas_train.loc[1]).values()]" ] }, { "cell_type": "markdown", "metadata": { "id": "LefAguV5ICMc" }, "source": [ "The test data has 1 header line that needs to be skipped, and a trailing \".\" at the end of each line." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:58.583362Z", "iopub.status.busy": "2024-04-30T10:48:58.582753Z", "iopub.status.idle": "2024-04-30T10:48:58.624070Z", "shell.execute_reply": "2024-04-30T10:48:58.623426Z" }, "id": "RasgDIUKHCpV" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ageworkclassfnlwgteducationeducation-nummarital-statusoccupationrelationshipracesexcapital-gaincapital-losshours-per-weeknative-countrylabel
038Private89814HS-grad9Married-civ-spouseFarming-fishingHusbandWhiteMale0050United-States<=50K.
128Local-gov336951Assoc-acdm12Married-civ-spouseProtective-servHusbandWhiteMale0040United-States>50K.
244Private160323Some-college10Married-civ-spouseMachine-op-inspctHusbandBlackMale7688040United-States>50K.
318?103497Some-college10Never-married?Own-childWhiteFemale0030United-States<=50K.
434Private19869310th6Never-marriedOther-serviceNot-in-familyWhiteMale0030United-States<=50K.
\n", "
" ], "text/plain": [ " age workclass fnlwgt education education-num marital-status \\\n", "0 38 Private 89814 HS-grad 9 Married-civ-spouse \n", "1 28 Local-gov 336951 Assoc-acdm 12 Married-civ-spouse \n", "2 44 Private 160323 Some-college 10 Married-civ-spouse \n", "3 18 ? 103497 Some-college 10 Never-married \n", "4 34 Private 198693 10th 6 Never-married \n", "\n", " occupation relationship race sex capital-gain \\\n", "0 Farming-fishing Husband White Male 0 \n", "1 Protective-serv Husband White Male 0 \n", "2 Machine-op-inspct Husband Black Male 7688 \n", "3 ? Own-child White Female 0 \n", "4 Other-service Not-in-family White Male 0 \n", "\n", " capital-loss hours-per-week native-country label \n", "0 0 50 United-States <=50K. \n", "1 0 40 United-States >50K. \n", "2 0 40 United-States >50K. \n", "3 0 30 United-States <=50K. \n", "4 0 30 United-States <=50K. " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pandas_test = pd.read_csv(test_path, header=1, names=ORDERED_CSV_COLUMNS)\n", "\n", "pandas_test.head(5)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:58.627426Z", "iopub.status.busy": "2024-04-30T10:48:58.626937Z", "iopub.status.idle": "2024-04-30T10:48:58.630422Z", "shell.execute_reply": "2024-04-30T10:48:58.629764Z" }, "id": "s9aH5ZnDdD_z" }, "outputs": [], "source": [ "testing = os.getenv(\"WEB_TEST_BROWSER\", False)\n", "if testing:\n", " pandas_train = pandas_train.loc[:1]\n", " pandas_test = pandas_test.loc[:1]" ] }, { "cell_type": "markdown", "metadata": { "id": "qtTn4at8rurk" }, "source": [ "###Define our features and schema\n", "Let's define a schema based on what types the columns are in our input. Among other things this will help with importing them correctly." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:58.633704Z", "iopub.status.busy": "2024-04-30T10:48:58.633182Z", "iopub.status.idle": "2024-04-30T10:48:58.637799Z", "shell.execute_reply": "2024-04-30T10:48:58.637160Z" }, "id": "5oS2RfyCrzMr" }, "outputs": [], "source": [ "RAW_DATA_FEATURE_SPEC = dict(\n", " [(name, tf.io.FixedLenFeature([], tf.string))\n", " for name in CATEGORICAL_FEATURE_KEYS] +\n", " [(name, tf.io.FixedLenFeature([], tf.float32))\n", " for name in NUMERIC_FEATURE_KEYS] + \n", " [(LABEL_KEY, tf.io.FixedLenFeature([], tf.string))]\n", ")\n", "\n", "SCHEMA = tft.DatasetMetadata.from_feature_spec(RAW_DATA_FEATURE_SPEC).schema" ] }, { "cell_type": "markdown", "metadata": { "id": "_j6M7ObpaLHi" }, "source": [ "### [Optional] Encode and decode tf.train.Example protos" ] }, { "cell_type": "markdown", "metadata": { "id": "rgGO9-GkZ5Kv" }, "source": [ "This tutorial needs to convert examples from the dataset to and from `tf.train.Example` protos in a few places. \n", "\n", "The hidden `encode_example` function below converts a dictionary of features forom the dataset to a `tf.train.Example`." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:58.641058Z", "iopub.status.busy": "2024-04-30T10:48:58.640657Z", "iopub.status.idle": "2024-04-30T10:48:58.646474Z", "shell.execute_reply": "2024-04-30T10:48:58.645836Z" }, "id": "Wbhndy7uWqYp" }, "outputs": [], "source": [ "#@title\n", "def encode_example(input_features):\n", " input_features = dict(input_features)\n", " output_features = {}\n", " \n", " for key in CATEGORICAL_FEATURE_KEYS:\n", " value = input_features[key]\n", " feature = tf.train.Feature(\n", " bytes_list=tf.train.BytesList(value=[value.strip().encode()]))\n", " output_features[key] = feature \n", "\n", " for key in NUMERIC_FEATURE_KEYS:\n", " value = input_features[key]\n", " feature = tf.train.Feature(\n", " float_list=tf.train.FloatList(value=[value]))\n", " output_features[key] = feature \n", "\n", " label_value = input_features.get(LABEL_KEY, None)\n", " if label_value is not None:\n", " output_features[LABEL_KEY] = tf.train.Feature(\n", " bytes_list = tf.train.BytesList(value=[label_value.strip().encode()]))\n", "\n", " example = tf.train.Example(\n", " features = tf.train.Features(feature=output_features)\n", " )\n", " return example" ] }, { "cell_type": "markdown", "metadata": { "id": "4qx7fSVmmwIQ" }, "source": [ "Now you can convert dataset examples into `Example` protos:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:58.649787Z", "iopub.status.busy": "2024-04-30T10:48:58.649269Z", "iopub.status.idle": "2024-04-30T10:48:58.654421Z", "shell.execute_reply": "2024-04-30T10:48:58.653799Z" }, "id": "sWd95yxJceXy" }, "outputs": [ { "data": { "text/plain": [ "float_list {\n", " value: 39.0\n", "}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tf_example = encode_example(pandas_train.loc[0])\n", "tf_example.features.feature['age']" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:48:58.657580Z", "iopub.status.busy": "2024-04-30T10:48:58.657091Z", "iopub.status.idle": "2024-04-30T10:49:00.977111Z", "shell.execute_reply": "2024-04-30T10:49:00.976381Z" }, "id": "EutF2aPXbAUd" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "serialized_example_batch = tf.constant([\n", " encode_example(pandas_train.loc[i]).SerializeToString()\n", " for i in range(3)\n", "])\n", "\n", "serialized_example_batch" ] }, { "cell_type": "markdown", "metadata": { "id": "DTqlJcI_m6az" }, "source": [ "You can also convert batches of serialized Example protos back into a dictionary of tensors:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:00.980500Z", "iopub.status.busy": "2024-04-30T10:49:00.980212Z", "iopub.status.idle": "2024-04-30T10:49:00.990579Z", "shell.execute_reply": "2024-04-30T10:49:00.989873Z" }, "id": "jXlrur1vc4n_" }, "outputs": [], "source": [ "decoded_tensors = tf.io.parse_example(\n", " serialized_example_batch,\n", " features=RAW_DATA_FEATURE_SPEC\n", ")" ] }, { "cell_type": "markdown", "metadata": { "id": "eUAcdCrEdDe3" }, "source": [ "In some cases the label will not be passed in, so the encode function is written so that the label is optional:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:00.993728Z", "iopub.status.busy": "2024-04-30T10:49:00.993490Z", "iopub.status.idle": "2024-04-30T10:49:00.998405Z", "shell.execute_reply": "2024-04-30T10:49:00.997822Z" }, "id": "EEt3nPr_o59f" }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "features_dict = dict(pandas_train.loc[0])\n", "features_dict.pop(LABEL_KEY)\n", "\n", "LABEL_KEY in features_dict" ] }, { "cell_type": "markdown", "metadata": { "id": "O0yqvsHtpDdX" }, "source": [ "When creating an `Example` proto it will simply not contain the label key. " ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:01.001459Z", "iopub.status.busy": "2024-04-30T10:49:01.000981Z", "iopub.status.idle": "2024-04-30T10:49:01.005758Z", "shell.execute_reply": "2024-04-30T10:49:01.005189Z" }, "id": "7N5FMXO7dRzM" }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "no_label_example = encode_example(features_dict)\n", "\n", "LABEL_KEY in no_label_example.features.feature.keys()" ] }, { "cell_type": "markdown", "metadata": { "id": "zdXy9lo4t45d" }, "source": [ "###Setting hyperparameters and basic housekeeping\n", "\n", "Constants and hyperparameters used for training." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:01.008963Z", "iopub.status.busy": "2024-04-30T10:49:01.008446Z", "iopub.status.idle": "2024-04-30T10:49:01.106155Z", "shell.execute_reply": "2024-04-30T10:49:01.105398Z" }, "id": "8WHyOkC9uL71" }, "outputs": [], "source": [ "NUM_OOV_BUCKETS = 1\n", "\n", "EPOCH_SPLITS = 10\n", "TRAIN_NUM_EPOCHS = 2*EPOCH_SPLITS\n", "NUM_TRAIN_INSTANCES = len(pandas_train)\n", "NUM_TEST_INSTANCES = len(pandas_test)\n", "\n", "BATCH_SIZE = 128\n", "\n", "STEPS_PER_TRAIN_EPOCH = tf.math.ceil(NUM_TRAIN_INSTANCES/BATCH_SIZE/EPOCH_SPLITS)\n", "EVALUATION_STEPS = tf.math.ceil(NUM_TEST_INSTANCES/BATCH_SIZE)\n", "\n", "# Names of temp files\n", "TRANSFORMED_TRAIN_DATA_FILEBASE = 'train_transformed'\n", "TRANSFORMED_TEST_DATA_FILEBASE = 'test_transformed'\n", "EXPORTED_MODEL_DIR = 'exported_model_dir'" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:01.110016Z", "iopub.status.busy": "2024-04-30T10:49:01.109381Z", "iopub.status.idle": "2024-04-30T10:49:01.112769Z", "shell.execute_reply": "2024-04-30T10:49:01.112037Z" }, "id": "lG2uO-88c6R9" }, "outputs": [], "source": [ "if testing:\n", " TRAIN_NUM_EPOCHS = 1" ] }, { "cell_type": "markdown", "metadata": { "id": "0a1ns5KswDb2" }, "source": [ "##Preprocessing with `tf.Transform`" ] }, { "cell_type": "markdown", "metadata": { "id": "KKd3mCLNVYmg" }, "source": [ "###Create a `tf.Transform` preprocessing_fn\n", "The _preprocessing function_ is the most important concept of tf.Transform. A preprocessing function is where the transformation of the dataset really happens. It accepts and returns a dictionary of tensors, where a tensor means a [`Tensor`](https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/Tensor) or [`SparseTensor`](https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/SparseTensor). There are two main groups of API calls that typically form the heart of a preprocessing function:\n", "\n", "1. **TensorFlow Ops:** Any function that accepts and returns tensors, which usually means TensorFlow ops. These add TensorFlow operations to the graph that transforms raw data into transformed data one feature vector at a time. These will run for every example, during both training and serving.\n", "2. **Tensorflow Transform Analyzers/Mappers:** Any of the analyzers/mappers provided by tf.Transform. These also accept and return tensors, and typically contain a combination of Tensorflow ops and Beam computation, but unlike TensorFlow ops they only run in the Beam pipeline during analysis requiring a full pass over the entire training dataset. The Beam computation runs only once, (prior to training, during analysis), and typically make a full pass over the entire training dataset. They create `tf.constant` tensors, which are added to your graph. For example, `tft.min` computes the minimum of a tensor over the training dataset.\n", "\n", "Caution: When you apply your preprocessing function to serving inferences, the constants that were created by analyzers during training do not change. If your data has trend or seasonality components, plan accordingly.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "DZopPfpaH4sB" }, "source": [ "Here is a `preprocessing_fn` for this dataset. It does several things:\n", "\n", "1. Using `tft.scale_to_0_1`, it scales the numeric features to the `[0,1]` range.\n", "2. Using `tft.compute_and_apply_vocabulary`, it computes a vocabulary for each of the categorical features, and returns the integer IDs for each input as an `tf.int64`. This applies both to string and integer categorical-inputs.\n", "3. It applies some manual transformations to the data using standard TensorFlow operations. Here these operations are applied to the label but could transform the features as well. The TensorFlow operations do several things: \n", " * They build a lookup table for the label (the `tf.init_scope` ensures that the table is only created the first time the function is called).\n", " * They normalize the text of the label.\n", " * They convert the label to a one-hot. \n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:01.116689Z", "iopub.status.busy": "2024-04-30T10:49:01.116158Z", "iopub.status.idle": "2024-04-30T10:49:01.123284Z", "shell.execute_reply": "2024-04-30T10:49:01.122634Z" }, "id": "LDrzuYH0WFc2" }, "outputs": [], "source": [ "def preprocessing_fn(inputs):\n", " \"\"\"Preprocess input columns into transformed columns.\"\"\"\n", " # Since we are modifying some features and leaving others unchanged, we\n", " # start by setting `outputs` to a copy of `inputs.\n", " outputs = inputs.copy()\n", "\n", " # Scale numeric columns to have range [0, 1].\n", " for key in NUMERIC_FEATURE_KEYS:\n", " outputs[key] = tft.scale_to_0_1(inputs[key])\n", "\n", " # For all categorical columns except the label column, we generate a\n", " # vocabulary but do not modify the feature. This vocabulary is instead\n", " # used in the trainer, by means of a feature column, to convert the feature\n", " # from a string to an integer id.\n", " for key in CATEGORICAL_FEATURE_KEYS:\n", " outputs[key] = tft.compute_and_apply_vocabulary(\n", " tf.strings.strip(inputs[key]),\n", " num_oov_buckets=NUM_OOV_BUCKETS,\n", " vocab_filename=key)\n", "\n", " # For the label column we provide the mapping from string to index.\n", " table_keys = ['>50K', '<=50K']\n", " with tf.init_scope():\n", " initializer = tf.lookup.KeyValueTensorInitializer(\n", " keys=table_keys,\n", " values=tf.cast(tf.range(len(table_keys)), tf.int64),\n", " key_dtype=tf.string,\n", " value_dtype=tf.int64)\n", " table = tf.lookup.StaticHashTable(initializer, default_value=-1)\n", "\n", " # Remove trailing periods for test data when the data is read with tf.data.\n", " # label_str = tf.sparse.to_dense(inputs[LABEL_KEY])\n", " label_str = inputs[LABEL_KEY]\n", " label_str = tf.strings.regex_replace(label_str, r'\\.$', '')\n", " label_str = tf.strings.strip(label_str)\n", " data_labels = table.lookup(label_str)\n", " transformed_label = tf.one_hot(\n", " indices=data_labels, depth=len(table_keys), on_value=1.0, off_value=0.0)\n", " outputs[LABEL_KEY] = tf.reshape(transformed_label, [-1, len(table_keys)])\n", "\n", " return outputs" ] }, { "cell_type": "markdown", "metadata": { "id": "sA1Eg2JXFzzZ" }, "source": [ "## Syntax\n", "\n", "You're almost ready to put everything together and use Apache Beam to run it.\n", "\n", "Apache Beam uses a special syntax to define and invoke transforms. For example, in this line:\n", "\n", "```\n", "result = pass_this | 'name this step' >> to_this_call\n", "```\n", "\n", "The method `to_this_call` is being invoked and passed the object called `pass_this`, and this operation will be referred to as `name this step` in a stack trace. The result of the call to `to_this_call` is returned in `result`. You will often see stages of a pipeline chained together like this:\n", "\n", "```\n", "result = apache_beam.Pipeline() | 'first step' >> do_this_first() | 'second step' >> do_this_last()\n", "```\n", "\n", "and since that started with a new pipeline, you can continue like this:\n", "\n", "```\n", "next_result = result | 'doing more stuff' >> another_function()\n", "```" ] }, { "cell_type": "markdown", "metadata": { "id": "rgAGOAdFWRn2" }, "source": [ "### Transform the data\n", "\n", "Now we're ready to start transforming our data in an Apache Beam pipeline.\n", "\n", "1. Read in the data using the `tfxio.CsvTFXIO` CSV reader (to process lines of text in a pipeline use `tfxio.BeamRecordCsvTFXIO` instead).\n", "1. Analyse and transform the data using the `preprocessing_fn` defined above.\n", "1. Write out the result as a `TFRecord` of `Example` protos, which we will use for training a model later\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:01.126820Z", "iopub.status.busy": "2024-04-30T10:49:01.126582Z", "iopub.status.idle": "2024-04-30T10:49:01.135094Z", "shell.execute_reply": "2024-04-30T10:49:01.134522Z" }, "id": "PCeYucVoRRfo" }, "outputs": [], "source": [ "def transform_data(train_data_file, test_data_file, working_dir):\n", " \"\"\"Transform the data and write out as a TFRecord of Example protos.\n", "\n", " Read in the data using the CSV reader, and transform it using a\n", " preprocessing pipeline that scales numeric data and converts categorical data\n", " from strings to int64 values indices, by creating a vocabulary for each\n", " category.\n", "\n", " Args:\n", " train_data_file: File containing training data\n", " test_data_file: File containing test data\n", " working_dir: Directory to write transformed data and metadata to\n", " \"\"\"\n", "\n", " # The \"with\" block will create a pipeline, and run that pipeline at the exit\n", " # of the block.\n", " with beam.Pipeline() as pipeline:\n", " with tft_beam.Context(temp_dir=tempfile.mkdtemp()):\n", " # Create a TFXIO to read the census data with the schema. To do this we\n", " # need to list all columns in order since the schema doesn't specify the\n", " # order of columns in the csv.\n", " # We first read CSV files and use BeamRecordCsvTFXIO whose .BeamSource()\n", " # accepts a PCollection[bytes] because we need to patch the records first\n", " # (see \"FixCommasTrainData\" below). Otherwise, tfxio.CsvTFXIO can be used\n", " # to both read the CSV files and parse them to TFT inputs:\n", " # csv_tfxio = tfxio.CsvTFXIO(...)\n", " # raw_data = (pipeline | 'ToRecordBatches' >> csv_tfxio.BeamSource())\n", " train_csv_tfxio = tfxio.CsvTFXIO(\n", " file_pattern=train_data_file,\n", " telemetry_descriptors=[],\n", " column_names=ORDERED_CSV_COLUMNS,\n", " schema=SCHEMA)\n", "\n", " # Read in raw data and convert using CSV TFXIO.\n", " raw_data = (\n", " pipeline |\n", " 'ReadTrainCsv' >> train_csv_tfxio.BeamSource())\n", "\n", " # Combine data and schema into a dataset tuple. Note that we already used\n", " # the schema to read the CSV data, but we also need it to interpret\n", " # raw_data.\n", " cfg = train_csv_tfxio.TensorAdapterConfig()\n", " raw_dataset = (raw_data, cfg)\n", "\n", " # The TFXIO output format is chosen for improved performance.\n", " transformed_dataset, transform_fn = (\n", " raw_dataset | tft_beam.AnalyzeAndTransformDataset(\n", " preprocessing_fn, output_record_batches=True))\n", "\n", " # Transformed metadata is not necessary for encoding.\n", " transformed_data, _ = transformed_dataset\n", "\n", " # Extract transformed RecordBatches, encode and write them to the given\n", " # directory.\n", " coder = RecordBatchToExamplesEncoder()\n", " _ = (\n", " transformed_data\n", " | 'EncodeTrainData' >>\n", " beam.FlatMapTuple(lambda batch, _: coder.encode(batch))\n", " | 'WriteTrainData' >> beam.io.WriteToTFRecord(\n", " os.path.join(working_dir, TRANSFORMED_TRAIN_DATA_FILEBASE)))\n", "\n", " # Now apply transform function to test data. In this case we remove the\n", " # trailing period at the end of each line, and also ignore the header line\n", " # that is present in the test data file.\n", " test_csv_tfxio = tfxio.CsvTFXIO(\n", " file_pattern=test_data_file,\n", " skip_header_lines=1,\n", " telemetry_descriptors=[],\n", " column_names=ORDERED_CSV_COLUMNS,\n", " schema=SCHEMA)\n", " raw_test_data = (\n", " pipeline\n", " | 'ReadTestCsv' >> test_csv_tfxio.BeamSource())\n", "\n", " raw_test_dataset = (raw_test_data, test_csv_tfxio.TensorAdapterConfig())\n", "\n", " # The TFXIO output format is chosen for improved performance.\n", " transformed_test_dataset = (\n", " (raw_test_dataset, transform_fn)\n", " | tft_beam.TransformDataset(output_record_batches=True))\n", "\n", " # Transformed metadata is not necessary for encoding.\n", " transformed_test_data, _ = transformed_test_dataset\n", "\n", " # Extract transformed RecordBatches, encode and write them to the given\n", " # directory.\n", " _ = (\n", " transformed_test_data\n", " | 'EncodeTestData' >>\n", " beam.FlatMapTuple(lambda batch, _: coder.encode(batch))\n", " | 'WriteTestData' >> beam.io.WriteToTFRecord(\n", " os.path.join(working_dir, TRANSFORMED_TEST_DATA_FILEBASE)))\n", "\n", " # Will write a SavedModel and metadata to working_dir, which can then\n", " # be read by the tft.TFTransformOutput class.\n", " _ = (\n", " transform_fn\n", " | 'WriteTransformFn' >> tft_beam.WriteTransformFn(working_dir))" ] }, { "cell_type": "markdown", "metadata": { "id": "huaj5EgCVRD9" }, "source": [ "Run the pipeline:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:01.138116Z", "iopub.status.busy": "2024-04-30T10:49:01.137892Z", "iopub.status.idle": "2024-04-30T10:49:23.520141Z", "shell.execute_reply": "2024-04-30T10:49:23.519363Z" }, "id": "pjC7eDWFyA8K" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING:apache_beam.runners.interactive.interactive_environment:Dependencies required for Interactive Beam PCollection visualization are not available, please use: `pip install apache-beam[interactive]` to install necessary dependencies to enable all data visualization features.\n" ] }, { "data": { "application/javascript": [ "\n", " if (typeof window.interactive_beam_jquery == 'undefined') {\n", " var jqueryScript = document.createElement('script');\n", " jqueryScript.src = 'https://code.jquery.com/jquery-3.4.1.slim.min.js';\n", " jqueryScript.type = 'text/javascript';\n", " jqueryScript.onload = function() {\n", " var datatableScript = document.createElement('script');\n", " datatableScript.src = 'https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js';\n", " datatableScript.type = 'text/javascript';\n", " datatableScript.onload = function() {\n", " window.interactive_beam_jquery = jQuery.noConflict(true);\n", " window.interactive_beam_jquery(document).ready(function($){\n", " \n", " });\n", " }\n", " document.head.appendChild(datatableScript);\n", " };\n", " document.head.appendChild(jqueryScript);\n", " } else {\n", " window.interactive_beam_jquery(document).ready(function($){\n", " \n", " });\n", " }" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmpui2ti1wk/tftransform_tmp/c6e2397d5edb4102a64777cdf8d1b9bb/assets\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmpui2ti1wk/tftransform_tmp/c6e2397d5edb4102a64777cdf8d1b9bb/assets\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmpui2ti1wk/tftransform_tmp/58d7642780cb4ce0964fc9e2deb91d67/assets\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmpui2ti1wk/tftransform_tmp/58d7642780cb4ce0964fc9e2deb91d67/assets\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] } ], "source": [ "import tempfile\n", "import pathlib\n", "\n", "output_dir = os.path.join(tempfile.mkdtemp(), 'keras')\n", "\n", "\n", "transform_data(train_path, test_path, output_dir)" ] }, { "cell_type": "markdown", "metadata": { "id": "iqln2AClsA0z" }, "source": [ "Wrap up the output directory as a `tft.TFTransformOutput`:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:23.524399Z", "iopub.status.busy": "2024-04-30T10:49:23.524101Z", "iopub.status.idle": "2024-04-30T10:49:23.528013Z", "shell.execute_reply": "2024-04-30T10:49:23.527357Z" }, "id": "FXd4Mgj6sAGB" }, "outputs": [], "source": [ "tf_transform_output = tft.TFTransformOutput(output_dir)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:23.531520Z", "iopub.status.busy": "2024-04-30T10:49:23.530918Z", "iopub.status.idle": "2024-04-30T10:49:23.538777Z", "shell.execute_reply": "2024-04-30T10:49:23.538199Z" }, "id": "59hNe7oY9vqG" }, "outputs": [ { "data": { "text/plain": [ "{'age': FixedLenFeature(shape=[], dtype=tf.float32, default_value=None),\n", " 'capital-gain': FixedLenFeature(shape=[], dtype=tf.float32, default_value=None),\n", " 'capital-loss': FixedLenFeature(shape=[], dtype=tf.float32, default_value=None),\n", " 'education': FixedLenFeature(shape=[], dtype=tf.int64, default_value=None),\n", " 'education-num': FixedLenFeature(shape=[], dtype=tf.float32, default_value=None),\n", " 'hours-per-week': FixedLenFeature(shape=[], dtype=tf.float32, default_value=None),\n", " 'label': FixedLenFeature(shape=[2], dtype=tf.float32, default_value=None),\n", " 'marital-status': FixedLenFeature(shape=[], dtype=tf.int64, default_value=None),\n", " 'native-country': FixedLenFeature(shape=[], dtype=tf.int64, default_value=None),\n", " 'occupation': FixedLenFeature(shape=[], dtype=tf.int64, default_value=None),\n", " 'race': FixedLenFeature(shape=[], dtype=tf.int64, default_value=None),\n", " 'relationship': FixedLenFeature(shape=[], dtype=tf.int64, default_value=None),\n", " 'sex': FixedLenFeature(shape=[], dtype=tf.int64, default_value=None),\n", " 'workclass': FixedLenFeature(shape=[], dtype=tf.int64, default_value=None)}" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tf_transform_output.transformed_feature_spec()" ] }, { "cell_type": "markdown", "metadata": { "id": "oBBlL2EIVVF8" }, "source": [ "If you look in the directory you'll see it contains three things:\n", "\n", "1. The `train_transformed` and `test_transformed` data files\n", "2. The `transform_fn` directory (a `tf.saved_model`)\n", "3. The `transformed_metadata` \n", "\n", "The followning sections show how to use these artifacts to train a model." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:23.543019Z", "iopub.status.busy": "2024-04-30T10:49:23.542627Z", "iopub.status.idle": "2024-04-30T10:49:23.719166Z", "shell.execute_reply": "2024-04-30T10:49:23.718266Z" }, "id": "NG6nrHEP2L65" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "total 15704\r\n", "-rw-rw-r-- 1 kbuilder kbuilder 5356449 Apr 30 10:49 test_transformed-00000-of-00001\r\n", "-rw-rw-r-- 1 kbuilder kbuilder 10712569 Apr 30 10:49 train_transformed-00000-of-00001\r\n", "drwxr-xr-x 4 kbuilder kbuilder 4096 Apr 30 10:49 transform_fn\r\n", "drwxr-xr-x 2 kbuilder kbuilder 4096 Apr 30 10:49 transformed_metadata\r\n" ] } ], "source": [ "!ls -l {output_dir}" ] }, { "cell_type": "markdown", "metadata": { "id": "TnaMyRMJ03bR" }, "source": [ "##Using our preprocessed data to train a model using tf_keras\n", "\n", "To show how `tf.Transform` enables us to use the same code for both training and serving, and thus prevent skew, we're going to train a model. To train our model and prepare our trained model for production we need to create input functions. The main difference between our training input function and our serving input function is that training data contains the labels, and production data does not. The arguments and returns are also somewhat different." ] }, { "cell_type": "markdown", "metadata": { "id": "M8xCZKNc2wAS" }, "source": [ "###Create an input function for training" ] }, { "cell_type": "markdown", "metadata": { "id": "StezlX-Uv0ae" }, "source": [ "Running the pipeline in the previous section created `TFRecord` files containing the transformed data.\n", "\n", "The following code uses `tf.data.experimental.make_batched_features_dataset` and `tft.TFTransformOutput.transformed_feature_spec` to read these data files as a `tf.data.Dataset`:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:23.723371Z", "iopub.status.busy": "2024-04-30T10:49:23.723092Z", "iopub.status.idle": "2024-04-30T10:49:23.728559Z", "shell.execute_reply": "2024-04-30T10:49:23.727956Z" }, "id": "775Y7BTpHBmb" }, "outputs": [], "source": [ "def _make_training_input_fn(tf_transform_output, train_file_pattern,\n", " batch_size):\n", " \"\"\"An input function reading from transformed data, converting to model input.\n", "\n", " Args:\n", " tf_transform_output: Wrapper around output of tf.Transform.\n", " transformed_examples: Base filename of examples.\n", " batch_size: Batch size.\n", "\n", " Returns:\n", " The input data for training or eval, in the form of k.\n", " \"\"\"\n", " def input_fn():\n", " return tf.data.experimental.make_batched_features_dataset(\n", " file_pattern=train_file_pattern,\n", " batch_size=batch_size,\n", " features=tf_transform_output.transformed_feature_spec(),\n", " reader=tf.data.TFRecordDataset,\n", " label_key=LABEL_KEY,\n", " shuffle=True)\n", "\n", " return input_fn" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:23.731612Z", "iopub.status.busy": "2024-04-30T10:49:23.731208Z", "iopub.status.idle": "2024-04-30T10:49:23.734927Z", "shell.execute_reply": "2024-04-30T10:49:23.734223Z" }, "id": "-b8BgvBvkCnX" }, "outputs": [], "source": [ "train_file_pattern = pathlib.Path(output_dir)/f'{TRANSFORMED_TRAIN_DATA_FILEBASE}*'\n", "\n", "input_fn = _make_training_input_fn(\n", " tf_transform_output=tf_transform_output,\n", " train_file_pattern = str(train_file_pattern),\n", " batch_size = 10\n", ")" ] }, { "cell_type": "markdown", "metadata": { "id": "Q0PwPLBqxsg2" }, "source": [ "Below you can see a transformed sample of the data. Note how the numeric columns like `education-num` and `hourd-per-week` are converted to floats with a range of [0,1], and the string columns have been converted to IDs:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:23.738116Z", "iopub.status.busy": "2024-04-30T10:49:23.737698Z", "iopub.status.idle": "2024-04-30T10:49:24.359780Z", "shell.execute_reply": "2024-04-30T10:49:24.359076Z" }, "id": "SpiS26IWlD-1" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/data/experimental/ops/readers.py:1086: parse_example_dataset (from tensorflow.python.data.experimental.ops.parsing_ops) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use `tf.data.Dataset.map(tf.io.parse_example(...))` instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/data/experimental/ops/readers.py:1086: parse_example_dataset (from tensorflow.python.data.experimental.ops.parsing_ops) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use `tf.data.Dataset.map(tf.io.parse_example(...))` instead.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
agecapital-gaincapital-losseducationeducation-numhours-per-weekmarital-statusnative-countryoccupationracerelationshipsexworkclass
00.2328770.00.000.5333330.3979590060000
10.3150680.00.040.6666670.3979590062000
20.0821920.00.000.5333330.3979591010201
30.2739730.00.000.5333330.3979590010000
40.2602740.00.000.5333330.6020411040300
50.3013700.00.010.6000000.397959219110110
60.3835620.00.020.8000000.3775510020005
70.1780820.00.000.5333330.39795900121002
80.3972600.00.060.7333330.3979590010000
90.0958900.00.0100.2666670.3979592050210
\n", "
" ], "text/plain": [ " age capital-gain capital-loss education education-num \\\n", "0 0.232877 0.0 0.0 0 0.533333 \n", "1 0.315068 0.0 0.0 4 0.666667 \n", "2 0.082192 0.0 0.0 0 0.533333 \n", "3 0.273973 0.0 0.0 0 0.533333 \n", "4 0.260274 0.0 0.0 0 0.533333 \n", "5 0.301370 0.0 0.0 1 0.600000 \n", "6 0.383562 0.0 0.0 2 0.800000 \n", "7 0.178082 0.0 0.0 0 0.533333 \n", "8 0.397260 0.0 0.0 6 0.733333 \n", "9 0.095890 0.0 0.0 10 0.266667 \n", "\n", " hours-per-week marital-status native-country occupation race \\\n", "0 0.397959 0 0 6 0 \n", "1 0.397959 0 0 6 2 \n", "2 0.397959 1 0 1 0 \n", "3 0.397959 0 0 1 0 \n", "4 0.602041 1 0 4 0 \n", "5 0.397959 2 19 11 0 \n", "6 0.377551 0 0 2 0 \n", "7 0.397959 0 0 12 1 \n", "8 0.397959 0 0 1 0 \n", "9 0.397959 2 0 5 0 \n", "\n", " relationship sex workclass \n", "0 0 0 0 \n", "1 0 0 0 \n", "2 2 0 1 \n", "3 0 0 0 \n", "4 3 0 0 \n", "5 1 1 0 \n", "6 0 0 5 \n", "7 0 0 2 \n", "8 0 0 0 \n", "9 2 1 0 " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "for example, label in input_fn().take(1):\n", " break\n", "\n", "pd.DataFrame(example)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:24.363409Z", "iopub.status.busy": "2024-04-30T10:49:24.362748Z", "iopub.status.idle": "2024-04-30T10:49:24.368104Z", "shell.execute_reply": "2024-04-30T10:49:24.367500Z" }, "id": "yaMzMnij88_v" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "label" ] }, { "cell_type": "markdown", "metadata": { "id": "LyNTX7CO8AAz" }, "source": [ "### Train, Evaluate the model" ] }, { "cell_type": "markdown", "metadata": { "id": "hdg9jXuLWuyK" }, "source": [ "Build the model" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:24.371532Z", "iopub.status.busy": "2024-04-30T10:49:24.371264Z", "iopub.status.idle": "2024-04-30T10:49:24.375852Z", "shell.execute_reply": "2024-04-30T10:49:24.375288Z" }, "id": "uK4brUuDTAJ4" }, "outputs": [], "source": [ "def build_keras_model(working_dir):\n", " inputs = build_keras_inputs(working_dir)\n", "\n", " encoded_inputs = encode_inputs(inputs)\n", "\n", " stacked_inputs = tf.concat(tf.nest.flatten(encoded_inputs), axis=1)\n", " output = tf_keras.layers.Dense(100, activation='relu')(stacked_inputs)\n", " output = tf_keras.layers.Dense(50, activation='relu')(output)\n", " output = tf_keras.layers.Dense(2)(output)\n", " model = tf_keras.Model(inputs=inputs, outputs=output)\n", "\n", " return model" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:24.378711Z", "iopub.status.busy": "2024-04-30T10:49:24.378477Z", "iopub.status.idle": "2024-04-30T10:49:24.383835Z", "shell.execute_reply": "2024-04-30T10:49:24.383212Z" }, "id": "6fJwIbdCRFER" }, "outputs": [], "source": [ "def build_keras_inputs(working_dir):\n", " tf_transform_output = tft.TFTransformOutput(working_dir)\n", "\n", " feature_spec = tf_transform_output.transformed_feature_spec().copy()\n", " feature_spec.pop(LABEL_KEY)\n", "\n", " # Build the `keras.Input` objects.\n", " inputs = {}\n", " for key, spec in feature_spec.items():\n", " if isinstance(spec, tf.io.VarLenFeature):\n", " inputs[key] = tf_keras.layers.Input(\n", " shape=[None], name=key, dtype=spec.dtype, sparse=True)\n", " elif isinstance(spec, tf.io.FixedLenFeature):\n", " inputs[key] = tf_keras.layers.Input(\n", " shape=spec.shape, name=key, dtype=spec.dtype)\n", " else:\n", " raise ValueError('Spec type is not supported: ', key, spec)\n", "\n", " return inputs" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:24.386764Z", "iopub.status.busy": "2024-04-30T10:49:24.386543Z", "iopub.status.idle": "2024-04-30T10:49:24.390956Z", "shell.execute_reply": "2024-04-30T10:49:24.390281Z" }, "id": "9dHD5SoqRqOh" }, "outputs": [], "source": [ "def encode_inputs(inputs):\n", " encoded_inputs = {}\n", " for key in inputs:\n", " feature = tf.expand_dims(inputs[key], -1)\n", " if key in CATEGORICAL_FEATURE_KEYS:\n", " num_buckets = tf_transform_output.num_buckets_for_transformed_feature(key)\n", " encoding_layer = (\n", " tf_keras.layers.CategoryEncoding(\n", " num_tokens=num_buckets, output_mode='binary', sparse=False))\n", " encoded_inputs[key] = encoding_layer(feature)\n", " else:\n", " encoded_inputs[key] = feature\n", " \n", " return encoded_inputs" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:24.393864Z", "iopub.status.busy": "2024-04-30T10:49:24.393374Z", "iopub.status.idle": "2024-04-30T10:49:25.032833Z", "shell.execute_reply": "2024-04-30T10:49:25.031779Z" }, "id": "5xNhSq8lTTx3" }, "outputs": [ { "data": { "image/png": "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AK+GelMAAAAADZ+tra28xvTGjRuzZ88+duyYq6tr+/btg4ODr1y5InU6aAsvL6+0tLThw4f7+vp6e3tnZmZKnQgAAAAAAAAAAABQFfWmAAAAALRIu3bt5s+fn56enpiYOGrUqB9++KFjx449e/b85ptv7t69K3U6NHxmZmabN28+cuTIpUuXunTpsmXLFqkTAQAAAAAAAAAAACqh3hQAAACANnJ2dv7mm29u37599uzZt956a/ny5W3atBk8eHB4ePjTp0+lTocGztPT8/fffw8ICPjggw/++c9/3r59W+pEAAAAAAAAAAAAQBWoNwUAAACgvXR0dFxcXEJDQ2/fvh0ZGWloaPj++++3atVqxowZiYmJUqdDQ2ZsbLx8+fKzZ8/euHGja9euoaGhZWVlUocCAAAAAAAAAAAAXkpX6gAAUFN37tyJjIyUOoUGi4+PlzqCpuLQaS1OvdqSnxpuCijnzp07rVq1qrKbgYHB6NGjR48enZ2dHRERsXPnzo0bN3bs2NHf33/SpElt27ath6jQQn379j1//nxISMi8efMOHDjw/ffft2/fXupQAAAAAAAAAAAAwAuIMplM6gwAUH2+vr779u2TOgW0GndSbSOKotQRALwyHx+fqKioV93q8uXLP/zww/fff//w4cNBgwaNHz/e19fXyMioLhICycnJkydPvnHjxqpVqwICArjdAAAAAAAAAAAAQN1QbwoAAAAAL1VcXHzgwIGdO3eeOHHC3Nx8zJgxkyZNcnJykjoXGqBnz5598803n332We/evXfs2NGhQwepEwEAAAAAAAAAAAD/H/WmAAAAAFC1zMzMqKio7du3X7x4sUePHtOmTRs7dqyJiYnUudDQpKamvvfee/IHnU6dOpUHnQIAAAAAAAAAAEBNUG8KAAAAAK/g3LlzW7Zs+eGHH/T09N55550ZM2Y4ODhIHQoNSnFxcUhIyOrVq93d3bdt29aqVSupEwEAAAAAAAAAAADUmwIAAADAq8vLy4uMjFy/fv3ly5fljzsdN26csbGx1LnQcCQkJEyaNCkrK2vlypXTpk2TOg4AAAAAAAAAAAC0HfWmAAAAAFB9sbGx69evj46ONjEx8fPzmz17dpcuXaQOhQaiqKjo888/X7Vqlaen59atW21tbaVOBAAAAAAAAAAAAO1FvSkAAAAA1FRWVtb27du3bt36119/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UJ3xKgtlTW1QS4GK0NbW9vPzGzt27HfffRcaGrp27doZM2YEBgbq6emJHQ2Vw8DAIDw8vHfv3pMmTerateumTZs6deokdigAAAAAAAAAAAA1R78pAJTm/v37MplMIpEoRu7evSsIQpMmTeQvtbS0nj17pvyWnJycEjtRfrsm0NPTMzExyc3NzcvLU26Tkv/6s7m5ufxlBU+dmi1N9+7dvby8xE6h5o4ePfryoEQi0dbWfvHihYODw+jRo0eNGtWkSROJRKLGDUlqdu+oMWopUHF169YNCgqaNGnSV199FRISsnLlylmzZn300Ud16tQROxoqx8iRIx0cHEaNGtW1a9fFixdLpVKxEwEAAAAAAAAAAKgzLbEDAECN9vTp0+TkZMXLM2fOZGRk2NjYKJ76ZmFhcfv2bcWErKysv/76q8RO6tatq2jWad++fURERBWnFt+IESMEQdi1a5dipLCw8MCBAwYGBq6urvKRCp46lgYVpK2tLQhC27ZtP//88/T09OPHj0ulUkWPnRrj3qlFqKVApWjYsGFoaOjly5cHDRo0efJkGxubmJgYsUOh0rRs2fLIkSOfffbZtGnTvL29X+6JBwAAAAAAAAAAQGWh3xQASmNiYvL5558nJiY+fvw4JSVl7Nixurq64eHhigkDBw7MyMhYvnx5fn5+enr6K/vVunTpcunSpZs3byYmJl69erVXr17y8f79+5uamiYlJVXf56kuixcvbt26dWBgYGxsbF5e3qVLl0aPHp2ZmRkeHi7/JWihYqdOYGlQLi9evJD/xPxbb701Z86cS5cuXbx4MSQkpHXr1mJHqz7cO7UItRSoRM2aNVu9evWZM2esra29vb179uwZHx8vdihUDm1t7ZCQkL179x49etTOzo6yAwAAAAAAAAAAUFVkACASQRCioqKq+ijbtm1TLnpjxoxJTExUHpk1a5Y8jMKQIUPk77WxsWnatOm5c+dcXV2NjY0NDAz69OkTHx+vvP+cnJyJEydaWFgYGBg4OTklJyfb29vL9xMUFCSfc+HChV69ehkaGjZv3nzFihWK9/bq1atBgwbHjh2r6pOgUD3nXC47OzswMLB169Y6OjomJiaurq4HDhxQnlCRU6dmS1Od66LJpkyZYm5uPn369JMnT5Y+s4avCGWtUkRFRdWKfwlTS6uBp6enp6en2ClQrRITE/v06SMI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k8Rna2mzNdBFAVfbtT/frNtKjb5v1sD7779/5syZ5kuOHj0qhOjatavFQgdrlyrmmy5atEin0+Xl5ZkvzMrKCg8P/+KLL/z8/MLCwrKzs82fVdXIpaamdujQoa6uzmK59803ZaTsoLajwaaouZ8elGNKUdvRiwVPLx0WTHs5Ns4aGJsuOCqh8pwxekIPbSDnPZTajjlbxJuybvfu3UKIe+65x3zhQw89JIT4+OOPzRd6QdaprdY5ON/Um/LQ6OLqR6zkI1by+Vqsvv766+XLl1ssfOihh9LS0iwWEk8judcSxEomV++zeVOsTO64446ZM2dKu1IW800b1bdvXyFEaWmp+ULiaZSxnV68eFGr1c6ePbvZVRFPYiUf+x4OoqY1pdma9u233wohHnroIfOFS5culf+d6/T5pr42BDLbyJlKaGxh2qvtyp38/pAkjbZxRZLIPKftayMip3I6Xl0b5aHne40kidFodFeS+GwtbbYGuijgarv255t1W6nR99kaaC0oKMjPz89gMJgvdLB2+VnftNbNjEbj6tWrBwwY0L59e+tnk5OTFy9eXFFRkZqaWl1d7f7uyTFx4sTc3NwdO3Yo3RHXYqSgLI/IMVjzgtJhISgoSE4zCo7PIudd3R9Y87Ks69Gjh16vP3nypPnCkydPajSaXr16mS8k61TFy/JQuLL6ESv5ayZW8tfsg7EaOXLk448/br6koqLivffemzNnjkVL4inIvZYgVjK5dJ/Ny2IlWbNmzc8//7x8+XKZ7UtLS3/99debbropPDzcfDnxFDK2008//bShoSEpKanZVRFPYiUf+x6OoKbZ0GxN27VrlxCif//+5gulP3fu3Gm+0D3nSXxwCGS2kckXTmeRJA5yepL44IjIqZxqq67KIkkkqkoS7xuUZrFVmjD6EjY3Z7l69WpVVdWNN96o0WjMlzsYTOXnmx47duzSpUt9+vRpqsGSJUtGjx79448/Sv9FvinFxcWPPfZYly5d/P39IyIibr/9dmkGtBBi69atmv/47bff0tLSWrduHRkZOXbsWOm3n0wKCwsffvjhzp07+/v7t23bdtKkSdJ9ZW2T/l/ml19+KesDeyxGCopTf47BmheUDvtQcHwWOe+i9cMGL8u6qKio5cuXHzt27KmnniosLLxy5cpLL730zTffPPPMM926dTNvSdapipfloXx25CGx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cHBweP/991u2bGlhYfHiiy9Onz798ePHNY6q+v73f/9XEISOHTvW2NNoU1TByBMShqqsrCw2NrZjx46PHj1KTU2NiYmxsrISOygAAAAAAAAAAABAE2TiCQkJCQkJqfPm48ePl0qlBw4cKCgoyMzMnD17tiAIR48elX977969F1980cnJae/evXl5eRcvXuzbt6+VldXx48flHdLT021tbT09PfPz82UyWVFRUbdu3b7//vt6npQgCHFxcXXe/OzZs4IgBAUFKTcGBQXJG48fP56fn3/w4EFra+suXboo9/H09LS1te3Ro4e8T1paWseOHS0sLI4dO6boY2tr26tXL+WtvL29HR0dlVsq91ERmLLExERBEP71r389fvz44cOHX375pYmJyezZsxUd/P39TUxMrl27prxVjx49vvvuO/nfNV4yxVD07dv36NGjz549O3HihKmp6cOHD6uLSoW4uDhx819c6t991aWE/FoUFhZWt6FG7sEaE7vGxJOpcQf99ddfjRs3dnV1PXDgQF5e3vnz5/38/Fq3bm1paanOEKm5eeURk7cEBwefOnUqPz9/69atgiAMHDgwKCjo7NmzeXl569atEwRh5syZik1U1z01ubq6mpqa1r9PBbWtfuHh4YIgJCUlVf5KXnAqmzFjhqKPi4uLIAi///57dfuXz2P+17/+Jf+oTpGsf6GT1emyysOTSqX9+vVLTk7Oy8urHJ46aaZOeCroWlVUM5779++7ubk5OzsnJiY+ffo0MzNz4cKFgiCsWLFCpt6YVFnlaqxgFa7IxYsX+/fv37RpU+UrIo/NyckpMTExNzf3ypUrwcHBEolk48aNij7VPddqfGiqoP7zVEVhVD2wNZ5aPQuj+hW7ypFXQb5/Z2fnkSNHXr9+/cmTJ//+979tbW3d3d1zcnLU2YM6ta7GAqVg2ClaXTH/5ptvKpyO0SakTPdqL+rvwoULXbt2NTc3j4yMLC4uFjscAAAAAAAAAAAAQJP0eL6pm5tbz549lVvc3d0V867Gjh0rCILyb97379+3tLT09vZWtMTHx8tnBZWXl48dO/bDDz+sczAKDTffNDExUdEiXzhKeZ6lfCW/s2fPKlrOnz8vCIKnp6eipaHnm77++uvKLaNGjTI3N8/NzZV//OWXXwRBmDx5sqJDcnKyq6trSUmJ/KM6l0w+FPv27asuDPUZ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HjhwQAgRERFhOJM8BAAAAAAAAAAAAABrs/Xnm957772i2jONauPh4fH555+7u7svWrTIcHz48OFCiK1bt+pHKioqdu7cqdPpoqKizIwkLi6usrJy3759hoNvv/12mzZtKisrVQ5UnsCknIiNY7dh+2wz8WBSEygvdUNRsivkucVXhhE7zLH+/fvfc889GzZsKC8vV0Zu3bq1bt264ODg6Ohow5nkIQAAAAAAAAAAAABYm633m4aGht5xxx3Z2dlmzu/cufPSpUuNBt98882QkJCUlJQtW7aUlJScOHHi8ccfz83NnT9/vvLloeZ4880327dv/9RTT23btq2oqOjKlStLly7997//PXv2bP2DnZ544glJks6cOWN44KFDh4QQkZGRZn6QhthtNAraJh7qpgmUl7qhKNkV8rz+S0GdHeaYg4PDRx99dOXKlb///e95eXkFBQXPPffc77//vmzZMsPntgryEAAAAAAAAAAAAAAagGxRqampdV5z5cqVQojFixcbjb/yyitOTk4XLlxQXl6+fNkw/rCwsOpLPfvss35+foYj+fn5KSkpISEhzs7O3t7eUVFRO3fuVN7KyMgwXHDatGmyLBuOREdHKzMLCgomTZrUrl07Z2fnli1bRkZG7tixw/BTBg4c6OHhUVlZaTiYkJAQFBR048YNoyAdHR27d+9+W1tkRAiRmppat2PZ7dsSHx8fHx9f58NtkI2fkS0nnm2qTzVoMI29vBjZvHmzqGbZsmVG02orSjaoPndwa7C1eMxEnjci5FgjyrGff/55yJAhXl5eHh4eAwcO3Lt3b/WlyEMAAAAAAAAAAAAAsDZJ/r9/Qq6ntLS0pKSkuq25atWqkSNHLl68+B//+IfheFFRUefOnWNiYpYsWWKhMK2isLCwVatWI0aMWLZsmX4wOzv7/vvvX7NmzaOPPmo038nJqVu3bpmZmXX+REmSUlNTExMT63Asu31bEhIShBDr16+vc8C2pumdkZ2rTzVoMI26vNSNSlGyQfW5g1uDrcVjJvK8ESHHrMqCOWYO8hAAAAAAAAAAAAAAGoCD1gGY5u3tvXnz5g0bNixcuFDrWGoly/L48eO9vLxmzpypHzx9+nRcXNzUqVMb0V++2W0AVtJ4y0vdUJTsE3kOa7O3HDMHeQgAAAAAAAAAAAAADcPm+k2fffZZSZI8PDwMB++///79+/dv27atuLhYq8DUXbp06fTp0zt37gwICNAPLl269PXXX3/99dcNZ06ZMkWSJEmSbt261eBhGmO3ATSkRlpe6qbGogR7QJ7D2uwqx8xBHgIAAAAAAAAAAABAw5As++2NfCNkQ2oU36DdNDS9b59vemdk56gGqD9bu4PbWjxoesgx2ALyEAAAAAAAAAAAAEAjYnPPNwUAAAAAAAAAAAAAAAAAAIBNod8UAAAAAAAAAAAAAAAAAAAAaug3BQAAAAAAAAAAAAAAAAAAgBr6TQEAAAAAAAAAAAAAAAAAAKCGflMAAAAAAAAAAAAAAAAAAACocbLGogkJCdZYFtXNnTt3/fr1WkfR9GVmZvbo0UPrKCwsMzOTH9WmhGqAesrJydE6hBpQpmA9Ss6TY9CWbdZeAAAAAAAAAAAAAKiR42uvvWbB5YqLi4uKiiy4IFTcc889Xl5eWkdhF1q3bt2zZ8+ePXtqHYjF0NzQxFANUH9eXl733HNPYmKi1oH8L36jgLUpOa91FLB3tlZ7AQAAAAAAAAAAAECFJMuy1jEAAAAAAAAAAAAAAAAAAADAdjloHQAAAAAAAAAAAAAAAAAAAABsGv2mAAAAAAAAAAAAAAAAAAAAUEO/KQAAAAAAAAAAAAAAAAAAANTQbwoAAAAAAAAAAAAAAAAAAAA1/w8WtANtWR/fBgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = build_keras_model(output_dir)\n", "\n", "tf_keras.utils.plot_model(model,rankdir='LR', show_shapes=True)" ] }, { "cell_type": "markdown", "metadata": { "id": "kQSpw_XzXVn1" }, "source": [ "Build the datasets" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:25.040555Z", "iopub.status.busy": "2024-04-30T10:49:25.040265Z", "iopub.status.idle": "2024-04-30T10:49:25.045490Z", "shell.execute_reply": "2024-04-30T10:49:25.044785Z" }, "id": "afi3NOC0OMUa" }, "outputs": [], "source": [ "def get_dataset(working_dir, filebase):\n", " tf_transform_output = tft.TFTransformOutput(working_dir)\n", "\n", " data_path_pattern = os.path.join(\n", " working_dir,\n", " filebase + '*')\n", " \n", " input_fn = _make_training_input_fn(\n", " tf_transform_output,\n", " data_path_pattern,\n", " batch_size=BATCH_SIZE)\n", " \n", " dataset = input_fn()\n", "\n", " return dataset" ] }, { "cell_type": "markdown", "metadata": { "id": "-fE_3jyzX_h2" }, "source": [ "Train and evaluate the model:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:25.048708Z", "iopub.status.busy": "2024-04-30T10:49:25.048471Z", "iopub.status.idle": "2024-04-30T10:49:25.053127Z", "shell.execute_reply": "2024-04-30T10:49:25.052526Z" }, "id": "6i_lhWH8IZrk" }, "outputs": [], "source": [ "def train_and_evaluate(\n", " model,\n", " working_dir):\n", " \"\"\"Train the model on training data and evaluate on test data.\n", "\n", " Args:\n", " working_dir: The location of the Transform output.\n", " num_train_instances: Number of instances in train set\n", " num_test_instances: Number of instances in test set\n", "\n", " Returns:\n", " The results from the estimator's 'evaluate' method\n", " \"\"\"\n", " train_dataset = get_dataset(working_dir, TRANSFORMED_TRAIN_DATA_FILEBASE)\n", " validation_dataset = get_dataset(working_dir, TRANSFORMED_TEST_DATA_FILEBASE)\n", "\n", " model = build_keras_model(working_dir)\n", "\n", " history = train_model(model, train_dataset, validation_dataset)\n", "\n", " metric_values = model.evaluate(validation_dataset,\n", " steps=EVALUATION_STEPS,\n", " return_dict=True)\n", " return model, history, metric_values" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:25.056531Z", "iopub.status.busy": "2024-04-30T10:49:25.056092Z", "iopub.status.idle": "2024-04-30T10:49:25.060123Z", "shell.execute_reply": "2024-04-30T10:49:25.059541Z" }, "id": "rcVsByIsViRy" }, "outputs": [], "source": [ "def train_model(model, train_dataset, validation_dataset):\n", " model.compile(optimizer='adam',\n", " loss=tf.losses.CategoricalCrossentropy(from_logits=True),\n", " metrics=['accuracy'])\n", "\n", " history = model.fit(train_dataset, validation_data=validation_dataset,\n", " epochs=TRAIN_NUM_EPOCHS,\n", " steps_per_epoch=STEPS_PER_TRAIN_EPOCH,\n", " validation_steps=EVALUATION_STEPS)\n", " return history" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:25.063309Z", "iopub.status.busy": "2024-04-30T10:49:25.062746Z", "iopub.status.idle": "2024-04-30T10:49:43.346769Z", "shell.execute_reply": "2024-04-30T10:49:43.345959Z" }, "id": "f5xoioogYTle" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", "I0000 00:00:1714474167.542556 187132 device_compiler.h:186] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 1:06 - loss: 0.6268 - accuracy: 0.7969" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 2/26 [=>............................] - ETA: 17s - loss: 0.6099 - accuracy: 0.7930 " ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 1s - loss: 0.5686 - accuracy: 0.7546 " ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.5261 - accuracy: 0.7520" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 4s 70ms/step - loss: 0.5136 - accuracy: 0.7578 - val_loss: 0.4207 - val_accuracy: 0.8198\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 2/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3840 - accuracy: 0.8672" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.4061 - accuracy: 0.8164" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3916 - accuracy: 0.8203" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3934 - accuracy: 0.8185 - val_loss: 0.3671 - val_accuracy: 0.8317\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 3/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.4577 - accuracy: 0.7188" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3842 - accuracy: 0.8203" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3713 - accuracy: 0.8271" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3696 - accuracy: 0.8272 - val_loss: 0.3548 - val_accuracy: 0.8365\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 4/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3406 - accuracy: 0.8281" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3441 - accuracy: 0.8359" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3503 - accuracy: 0.8322" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3499 - accuracy: 0.8314 - val_loss: 0.3528 - val_accuracy: 0.8383\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 5/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.2875 - accuracy: 0.8828" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3582 - accuracy: 0.8366" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3491 - accuracy: 0.8414" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3503 - accuracy: 0.8401 - val_loss: 0.3478 - val_accuracy: 0.8408\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 6/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3674 - accuracy: 0.8047" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3645 - accuracy: 0.8379" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3573 - accuracy: 0.8393" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3506 - accuracy: 0.8416 - val_loss: 0.3453 - val_accuracy: 0.8411\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 7/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3709 - accuracy: 0.8359" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3641 - accuracy: 0.8268" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3530 - accuracy: 0.8370" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 26ms/step - loss: 0.3511 - accuracy: 0.8380 - val_loss: 0.3430 - val_accuracy: 0.8410\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 8/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3153 - accuracy: 0.8438" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3343 - accuracy: 0.8398" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3344 - accuracy: 0.8444" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3349 - accuracy: 0.8434 - val_loss: 0.3441 - val_accuracy: 0.8375\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 9/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3535 - accuracy: 0.8750" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3579 - accuracy: 0.8281" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3501 - accuracy: 0.8268" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 26ms/step - loss: 0.3473 - accuracy: 0.8296 - val_loss: 0.3390 - val_accuracy: 0.8425\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 10/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3250 - accuracy: 0.8516" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3430 - accuracy: 0.8372" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3393 - accuracy: 0.8393" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3377 - accuracy: 0.8389 - val_loss: 0.3472 - val_accuracy: 0.8401\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 11/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3444 - accuracy: 0.8281" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3164 - accuracy: 0.8581" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3360 - accuracy: 0.8438" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3446 - accuracy: 0.8383 - val_loss: 0.3403 - val_accuracy: 0.8413\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 12/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3236 - accuracy: 0.8359" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3369 - accuracy: 0.8418" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3334 - accuracy: 0.8475" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 26ms/step - loss: 0.3343 - accuracy: 0.8471 - val_loss: 0.3335 - val_accuracy: 0.8447\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 13/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.4149 - accuracy: 0.7969" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3315 - accuracy: 0.8509" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3315 - accuracy: 0.8533" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3303 - accuracy: 0.8534 - val_loss: 0.3384 - val_accuracy: 0.8416\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 14/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3209 - accuracy: 0.8828" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3383 - accuracy: 0.8353" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3436 - accuracy: 0.8380" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3400 - accuracy: 0.8407 - val_loss: 0.3340 - val_accuracy: 0.8453\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 15/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3276 - accuracy: 0.8281" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3433 - accuracy: 0.8372" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3417 - accuracy: 0.8387" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3374 - accuracy: 0.8410 - val_loss: 0.3347 - val_accuracy: 0.8448\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 16/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3220 - accuracy: 0.8438" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3243 - accuracy: 0.8529" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3319 - accuracy: 0.8438" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3279 - accuracy: 0.8459 - val_loss: 0.3326 - val_accuracy: 0.8450\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 17/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.2650 - accuracy: 0.8906" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3065 - accuracy: 0.8620" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3186 - accuracy: 0.8465" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 26ms/step - loss: 0.3184 - accuracy: 0.8474 - val_loss: 0.3341 - val_accuracy: 0.8447\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 18/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3716 - accuracy: 0.8203" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3519 - accuracy: 0.8379" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3414 - accuracy: 0.8393" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 26ms/step - loss: 0.3393 - accuracy: 0.8410 - val_loss: 0.3332 - val_accuracy: 0.8433\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 19/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.2747 - accuracy: 0.8828" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3432 - accuracy: 0.8379" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3368 - accuracy: 0.8373" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 26ms/step - loss: 0.3356 - accuracy: 0.8368 - val_loss: 0.3300 - val_accuracy: 0.8454\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 20/20\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/26 [>.............................] - ETA: 0s - loss: 0.3878 - accuracy: 0.7969" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "12/26 [============>.................] - ETA: 0s - loss: 0.3318 - accuracy: 0.8424" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "23/26 [=========================>....] - ETA: 0s - loss: 0.3261 - accuracy: 0.8434" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "26/26 [==============================] - 1s 27ms/step - loss: 0.3283 - accuracy: 0.8438 - val_loss: 0.3298 - val_accuracy: 0.8434\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/128 [..............................] - ETA: 14s - loss: 0.3578 - accuracy: 0.8281" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 14/128 [==>...........................] - ETA: 0s - loss: 0.3480 - accuracy: 0.8343 " ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 28/128 [=====>........................] - ETA: 0s - loss: 0.3394 - accuracy: 0.8359" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 40/128 [========>.....................] - ETA: 0s - loss: 0.3387 - accuracy: 0.8348" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 53/128 [===========>..................] - ETA: 0s - loss: 0.3374 - accuracy: 0.8345" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 66/128 [==============>...............] - ETA: 0s - loss: 0.3349 - accuracy: 0.8369" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 79/128 [=================>............] - ETA: 0s - loss: 0.3360 - accuracy: 0.8377" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 92/128 [====================>.........] - ETA: 0s - loss: 0.3362 - accuracy: 0.8392" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "106/128 [=======================>......] - ETA: 0s - loss: 0.3323 - accuracy: 0.8417" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "119/128 [==========================>...] - ETA: 0s - loss: 0.3319 - accuracy: 0.8424" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "128/128 [==============================] - 1s 4ms/step - loss: 0.3303 - accuracy: 0.8433\n" ] } ], "source": [ "model, history, metric_values = train_and_evaluate(model, output_dir)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:43.350938Z", "iopub.status.busy": "2024-04-30T10:49:43.350627Z", "iopub.status.idle": "2024-04-30T10:49:43.618547Z", "shell.execute_reply": "2024-04-30T10:49:43.617807Z" }, "id": "gQCbdPIQeXeZ" }, "outputs": [ { "data": { "image/png": "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JvpUXpIcDoccDkeTZVFRUb401ScRERG9+o/hTH1pe9nW3qsvbS/b2nv1he1t7YhII5+uprHb7ZoyZYoyMzO9y9xutzIzMzV9+vRm15k+fXqT8pK0du3aFssDAIC+xefTNBkZGbrttts0depUTZs2TStWrFBlZaUWL14sSVq0aJH69++v5cuXS5LuvfdezZkzR7/5zW901VVX6fXXX9eXX36pP/zhD527JQAAwC/5HEYWLFigwsJCLV26VHl5eZo4caLWrFnj7aSak5Mjq/XUAZcZM2bo1Vdf1S9+8Qv97Gc/0/Dhw/XPf/5TY8eO7bytaCeHw6Fly5addUqot+pL28u29l59aXvZ1t6rr23vufg8zggAAEBn4t40AADAVIQRAABgKsIIAAAwFWEEAACYijACAABM1evDyMqVK5WamqqgoCClpaVp8+bNrZb/+9//rlGjRikoKEjjxo3Te++9100t7Zjly5fr/PPPV3h4uOLj4zV//nxlZWW1us5LL70ki8XSZAoKCuqmFrffww8/fFa7R40a1eo6/rpfU1NTz9pWi8Wiu+66q9ny/rZPP/zwQ1199dVKTk6WxWI56waahmFo6dKlSkpKUnBwsNLT07V///5z1uvr9747tLatdXV1euCBBzRu3DiFhoYqOTlZixYt0rFjx1qtsz3fhe5wrv16++23n9Xuyy+//Jz19sT9Kp17e5v7DlssFj355JMt1tlT921X6dVhZPXq1crIyNCyZcu0detWTZgwQfPmzVNBQUGz5T/99FPdcsstuuOOO7Rt2zbNnz9f8+fP186dO7u55b7buHGj7rrrLn322Wdau3at6urqdNlll6mysrLV9SIiInT8+HHvlJ2d3U0t7pjzzjuvSbs//vjjFsv683794osvmmzn2rVrJUk33nhji+v40z6trKzUhAkTtHLlymZff+KJJ/T73/9ezz//vD7//HOFhoZq3rx5qqmpabFOX7/33aW1ba2qqtLWrVv10EMPaevWrXrjjTeUlZWla6655pz1+vJd6C7n2q+SdPnllzdp92uvvdZqnT11v0rn3t7Tt/P48eNatWqVLBaLbrjhhlbr7Yn7tssYvdi0adOMu+66y/vc5XIZycnJxvLly5stf9NNNxlXXXVVk2VpaWnGD37wgy5tZ1coKCgwJBkbN25sscyf//xnIzIysvsa1UmWLVtm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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['loss'], label='Train')\n", "plt.plot(history.history['val_loss'], label='Eval')\n", "plt.ylim(0,max(plt.ylim()))\n", "plt.legend()\n", "plt.title('Loss');" ] }, { "cell_type": "markdown", "metadata": { "id": "nYeuthrs27vl" }, "source": [ "### Transform new data\n", "\n", "In the previous section the training process used the hard-copies of the transformed data that were generated by `tft_beam.AnalyzeAndTransformDataset` in the `transform_dataset` function. \n", "\n", "For operating on new data you'll need to load final version of the `preprocessing_fn` that was saved by `tft_beam.WriteTransformFn`. \n", "\n", "The `TFTransformOutput.transform_features_layer` method loads the `preprocessing_fn` SavedModel from the output directory." ] }, { "cell_type": "markdown", "metadata": { "id": "zxi9aS106CLd" }, "source": [ "Here's a function to load new, unprocessed batches from a source file:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:43.622150Z", "iopub.status.busy": "2024-04-30T10:49:43.621869Z", "iopub.status.idle": "2024-04-30T10:49:43.625671Z", "shell.execute_reply": "2024-04-30T10:49:43.625077Z" }, "id": "tMHDZhp82ZjM" }, "outputs": [], "source": [ "def read_csv(file_name, batch_size):\n", " return tf.data.experimental.make_csv_dataset(\n", " file_pattern=file_name,\n", " batch_size=batch_size,\n", " column_names=ORDERED_CSV_COLUMNS,\n", " column_defaults=COLUMN_DEFAULTS,\n", " prefetch_buffer_size=0,\n", " ignore_errors=True)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:43.628693Z", "iopub.status.busy": "2024-04-30T10:49:43.628436Z", "iopub.status.idle": "2024-04-30T10:49:43.888614Z", "shell.execute_reply": "2024-04-30T10:49:43.887944Z" }, "id": "AradAjmW2vyd" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/data/experimental/ops/readers.py:573: ignore_errors (from tensorflow.python.data.experimental.ops.error_ops) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use `tf.data.Dataset.ignore_errors` instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/data/experimental/ops/readers.py:573: ignore_errors (from tensorflow.python.data.experimental.ops.error_ops) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use `tf.data.Dataset.ignore_errors` instead.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ageworkclassfnlwgteducationeducation-nummarital-statusoccupationrelationshipracesexcapital-gaincapital-losshours-per-weeknative-countrylabel
035.0b' Private'194404.0b' Bachelors'13.0b' Married-civ-spouse'b' Prof-specialty'b' Husband'b' White'b' Male'0.00.040.0b' United-States'b' >50K.'
136.0b' Private'161141.0b' Masters'14.0b' Married-civ-spouse'b' Prof-specialty'b' Husband'b' White'b' Male'0.00.050.0b' United-States'b' >50K.'
222.0b' ?'166297.0b' Some-college'10.0b' Never-married'b' ?'b' Own-child'b' Asian-Pac-Islander'b' Male'0.00.020.0b' United-States'b' <=50K.'
364.0b' Private'137135.0b' HS-grad'9.0b' Married-civ-spouse'b' Machine-op-inspct'b' Husband'b' White'b' Male'0.00.048.0b' United-States'b' <=50K.'
440.0b' Local-gov'225660.0b' Bachelors'13.0b' Never-married'b' Protective-serv'b' Not-in-family'b' White'b' Female'0.00.040.0b' United-States'b' <=50K.'
\n", "
" ], "text/plain": [ " age workclass fnlwgt education education-num \\\n", "0 35.0 b' Private' 194404.0 b' Bachelors' 13.0 \n", "1 36.0 b' Private' 161141.0 b' Masters' 14.0 \n", "2 22.0 b' ?' 166297.0 b' Some-college' 10.0 \n", "3 64.0 b' Private' 137135.0 b' HS-grad' 9.0 \n", "4 40.0 b' Local-gov' 225660.0 b' Bachelors' 13.0 \n", "\n", " marital-status occupation relationship \\\n", "0 b' Married-civ-spouse' b' Prof-specialty' b' Husband' \n", "1 b' Married-civ-spouse' b' Prof-specialty' b' Husband' \n", "2 b' Never-married' b' ?' b' Own-child' \n", "3 b' Married-civ-spouse' b' Machine-op-inspct' b' Husband' \n", "4 b' Never-married' b' Protective-serv' b' Not-in-family' \n", "\n", " race sex capital-gain capital-loss \\\n", "0 b' White' b' Male' 0.0 0.0 \n", "1 b' White' b' Male' 0.0 0.0 \n", "2 b' Asian-Pac-Islander' b' Male' 0.0 0.0 \n", "3 b' White' b' Male' 0.0 0.0 \n", "4 b' White' b' Female' 0.0 0.0 \n", "\n", " hours-per-week native-country label \n", "0 40.0 b' United-States' b' >50K.' \n", "1 50.0 b' United-States' b' >50K.' \n", "2 20.0 b' United-States' b' <=50K.' \n", "3 48.0 b' United-States' b' <=50K.' \n", "4 40.0 b' United-States' b' <=50K.' " ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "for ex in read_csv(test_path, batch_size=5):\n", " break\n", "\n", "pd.DataFrame(ex)" ] }, { "cell_type": "markdown", "metadata": { "id": "OX1f6SgM6LZc" }, "source": [ "Load the `tft.TransformFeaturesLayer` to transform this data with the `preprocessing_fn`:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:43.892429Z", "iopub.status.busy": "2024-04-30T10:49:43.891800Z", "iopub.status.idle": "2024-04-30T10:49:44.658834Z", "shell.execute_reply": "2024-04-30T10:49:44.658191Z" }, "id": "nma2Bzi--11x" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
capital-losssexcapital-gainmarital-statusageracerelationshiphours-per-weekeducation-numnative-countryeducationworkclassoccupation
00.000.000.246575000.3979590.8000000200
10.000.000.260274000.5000000.8666670300
20.000.010.068493220.1938780.6000000137
30.000.000.643836000.4795920.5333330006
40.010.010.315068010.3979590.80000002212
\n", "
" ], "text/plain": [ " capital-loss sex capital-gain marital-status age race \\\n", "0 0.0 0 0.0 0 0.246575 0 \n", "1 0.0 0 0.0 0 0.260274 0 \n", "2 0.0 0 0.0 1 0.068493 2 \n", "3 0.0 0 0.0 0 0.643836 0 \n", "4 0.0 1 0.0 1 0.315068 0 \n", "\n", " relationship hours-per-week education-num native-country education \\\n", "0 0 0.397959 0.800000 0 2 \n", "1 0 0.500000 0.866667 0 3 \n", "2 2 0.193878 0.600000 0 1 \n", "3 0 0.479592 0.533333 0 0 \n", "4 1 0.397959 0.800000 0 2 \n", "\n", " workclass occupation \n", "0 0 0 \n", "1 0 0 \n", "2 3 7 \n", "3 0 6 \n", "4 2 12 " ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ex2 = ex.copy()\n", "ex2.pop('fnlwgt')\n", "\n", "tft_layer = tf_transform_output.transform_features_layer()\n", "t_ex = tft_layer(ex2)\n", "\n", "label = t_ex.pop(LABEL_KEY)\n", "pd.DataFrame(t_ex)" ] }, { "cell_type": "markdown", "metadata": { "id": "P43ixyQNz1zq" }, "source": [ "The `tft_layer` is smart enough to still execute the transformation if only a subset of features are passed in. For example, if you only pass in two features, you'll get just the transformed versions of those features back: " ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:44.661922Z", "iopub.status.busy": "2024-04-30T10:49:44.661665Z", "iopub.status.idle": "2024-04-30T10:49:44.671198Z", "shell.execute_reply": "2024-04-30T10:49:44.670584Z" }, "id": "swEPuZsR0Y5S" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
educationhours-per-week
0b' Bachelors'40.0
1b' Masters'50.0
2b' Some-college'20.0
3b' HS-grad'48.0
4b' Bachelors'40.0
\n", "
" ], "text/plain": [ " education hours-per-week\n", "0 b' Bachelors' 40.0\n", "1 b' Masters' 50.0\n", "2 b' Some-college' 20.0\n", "3 b' HS-grad' 48.0\n", "4 b' Bachelors' 40.0" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ex2 = pd.DataFrame(ex)[['education', 'hours-per-week']]\n", "ex2" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:44.674584Z", "iopub.status.busy": "2024-04-30T10:49:44.673975Z", "iopub.status.idle": "2024-04-30T10:49:44.762116Z", "shell.execute_reply": "2024-04-30T10:49:44.761433Z" }, "id": "_s4SxutV1DTI" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
hours-per-weekeducation
00.3979592
10.5000003
20.1938781
30.4795920
40.3979592
\n", "
" ], "text/plain": [ " hours-per-week education\n", "0 0.397959 2\n", "1 0.500000 3\n", "2 0.193878 1\n", "3 0.479592 0\n", "4 0.397959 2" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(tft_layer(dict(ex2)))" ] }, { "cell_type": "markdown", "metadata": { "id": "x5wo3dN-vhFL" }, "source": [ "Here's a more robust version that drops features that are not in the feature-spec, and returns a `(features, label)` pair if the label is in the provided features:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:44.765917Z", "iopub.status.busy": "2024-04-30T10:49:44.765237Z", "iopub.status.idle": "2024-04-30T10:49:44.771291Z", "shell.execute_reply": "2024-04-30T10:49:44.770620Z" }, "id": "hdMKDnafJh64" }, "outputs": [], "source": [ "class Transform(tf.Module):\n", " def __init__(self, working_dir):\n", " self.working_dir = working_dir\n", " self.tf_transform_output = tft.TFTransformOutput(working_dir)\n", " self.tft_layer = tf_transform_output.transform_features_layer()\n", " \n", " @tf.function\n", " def __call__(self, features):\n", " raw_features = {}\n", "\n", " for key, val in features.items():\n", " # Skip unused keys\n", " if key not in RAW_DATA_FEATURE_SPEC:\n", " continue\n", "\n", " raw_features[key] = val\n", "\n", " # Apply the `preprocessing_fn`.\n", " transformed_features = tft_layer(raw_features)\n", " \n", " if LABEL_KEY in transformed_features:\n", " # Pop the label and return a (features, labels) pair.\n", " data_labels = transformed_features.pop(LABEL_KEY)\n", " return (transformed_features, data_labels)\n", " else:\n", " return transformed_features\n" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:44.774380Z", "iopub.status.busy": "2024-04-30T10:49:44.774103Z", "iopub.status.idle": "2024-04-30T10:49:44.777629Z", "shell.execute_reply": "2024-04-30T10:49:44.777014Z" }, "id": "mm5HI578Ku1B" }, "outputs": [], "source": [ "transform = Transform(output_dir)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:44.780672Z", "iopub.status.busy": "2024-04-30T10:49:44.780431Z", "iopub.status.idle": "2024-04-30T10:49:45.423002Z", "shell.execute_reply": "2024-04-30T10:49:45.422259Z" }, "id": "4jeenwN_3ZRj" }, "outputs": [], "source": [ "t_ex, t_label = transform(ex)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:45.426995Z", "iopub.status.busy": "2024-04-30T10:49:45.426425Z", "iopub.status.idle": "2024-04-30T10:49:45.439656Z", "shell.execute_reply": "2024-04-30T10:49:45.439071Z" }, "id": "yIavZAqALO8H" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
capital-losssexcapital-gainmarital-statusageracerelationshiphours-per-weekeducation-numnative-countryeducationworkclassoccupation
00.000.000.246575000.3979590.8000000200
10.000.000.260274000.5000000.8666670300
20.000.010.068493220.1938780.6000000137
30.000.000.643836000.4795920.5333330006
40.010.010.315068010.3979590.80000002212
\n", "
" ], "text/plain": [ " capital-loss sex capital-gain marital-status age race \\\n", "0 0.0 0 0.0 0 0.246575 0 \n", "1 0.0 0 0.0 0 0.260274 0 \n", "2 0.0 0 0.0 1 0.068493 2 \n", "3 0.0 0 0.0 0 0.643836 0 \n", "4 0.0 1 0.0 1 0.315068 0 \n", "\n", " relationship hours-per-week education-num native-country education \\\n", "0 0 0.397959 0.800000 0 2 \n", "1 0 0.500000 0.866667 0 3 \n", "2 2 0.193878 0.600000 0 1 \n", "3 0 0.479592 0.533333 0 0 \n", "4 1 0.397959 0.800000 0 2 \n", "\n", " workclass occupation \n", "0 0 0 \n", "1 0 0 \n", "2 3 7 \n", "3 0 6 \n", "4 2 12 " ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(t_ex)" ] }, { "cell_type": "markdown", "metadata": { "id": "LVQead0fwVuy" }, "source": [ "Now you can use `Dataset.map` to apply that transformation, on the fly to new data:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:45.442676Z", "iopub.status.busy": "2024-04-30T10:49:45.442439Z", "iopub.status.idle": "2024-04-30T10:49:46.812104Z", "shell.execute_reply": "2024-04-30T10:49:46.811426Z" }, "id": "VN3IO6u1Mk83" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\r", " 1/128 [..............................] - ETA: 1:25 - loss: 0.2619 - accuracy: 1.0000" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 12/128 [=>............................] - ETA: 0s - loss: 0.2226 - accuracy: 0.9500 " ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 24/128 [====>.........................] - ETA: 0s - loss: 0.3279 - accuracy: 0.8583" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 36/128 [=======>......................] - ETA: 0s - loss: 0.3275 - accuracy: 0.8556" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 48/128 [==========>...................] - ETA: 0s - loss: 0.3145 - accuracy: 0.8625" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 60/128 [=============>................] - ETA: 0s - loss: 0.3020 - accuracy: 0.8667" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 72/128 [===============>..............] - ETA: 0s - loss: 0.2982 - accuracy: 0.8639" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 84/128 [==================>...........] - ETA: 0s - loss: 0.2919 - accuracy: 0.8690" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", " 96/128 [=====================>........] - ETA: 0s - loss: 0.2917 - accuracy: 0.8625" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "108/128 [========================>.....] - ETA: 0s - loss: 0.2897 - accuracy: 0.8648" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "120/128 [===========================>..] - ETA: 0s - loss: 0.3011 - accuracy: 0.8567" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "128/128 [==============================] - 1s 4ms/step - loss: 0.2992 - accuracy: 0.8547\n" ] }, { "data": { "text/plain": [ "{'loss': 0.2991926074028015, 'accuracy': 0.854687511920929}" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.evaluate(\n", " read_csv(test_path, batch_size=5).map(transform),\n", " steps=EVALUATION_STEPS,\n", " return_dict=True\n", ")" ] }, { "cell_type": "markdown", "metadata": { "id": "Ymlco3hfU_-E" }, "source": [ "### Export the model\n", "\n", "So you have a trained model, and a method to apply the `preprocessing_fn` to new data. Assemble them into a new model that accepts serialized `tf.train.Example` protos as input." ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:46.815599Z", "iopub.status.busy": "2024-04-30T10:49:46.815318Z", "iopub.status.idle": "2024-04-30T10:49:46.823651Z", "shell.execute_reply": "2024-04-30T10:49:46.822969Z" }, "id": "AZ2WICuwEwqC" }, "outputs": [], "source": [ "class ServingModel(tf.Module):\n", " def __init__(self, model, working_dir):\n", " self.model = model\n", " self.working_dir = working_dir\n", " self.transform = Transform(working_dir)\n", "\n", " @tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.string)])\n", " def __call__(self, serialized_tf_examples):\n", " # parse the tf.train.Example\n", " feature_spec = RAW_DATA_FEATURE_SPEC.copy()\n", " feature_spec.pop(LABEL_KEY)\n", " parsed_features = tf.io.parse_example(serialized_tf_examples, feature_spec)\n", " # Apply the `preprocessing_fn`\n", " transformed_features = self.transform(parsed_features)\n", " # Run the model\n", " outputs = self.model(transformed_features)\n", " # Format the output\n", " classes_names = tf.constant([['0', '1']])\n", " classes = tf.tile(classes_names, [tf.shape(outputs)[0], 1])\n", " return {'classes': classes, 'scores': outputs}\n", "\n", " def export(self, output_dir):\n", " # Increment the directory number. This is required in order to make this\n", " # model servable with model_server.\n", " save_model_dir = pathlib.Path(output_dir)/'model'\n", " number_dirs = [int(p.name) for p in save_model_dir.glob('*')\n", " if p.name.isdigit()]\n", " id = max([0] + number_dirs)+1\n", " save_model_dir = save_model_dir/str(id)\n", "\n", " # Set the signature to make it visible for serving.\n", " concrete_serving_fn = self.__call__.get_concrete_function()\n", " signatures = {'serving_default': concrete_serving_fn}\n", "\n", " # Export the model.\n", " tf.saved_model.save(\n", " self,\n", " str(save_model_dir),\n", " signatures=signatures)\n", " \n", " return save_model_dir" ] }, { "cell_type": "markdown", "metadata": { "id": "M8TZf2di24L2" }, "source": [ "Build the model and test-run it on the batch of serialized examples:" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:46.826987Z", "iopub.status.busy": "2024-04-30T10:49:46.826693Z", "iopub.status.idle": "2024-04-30T10:49:47.755661Z", "shell.execute_reply": "2024-04-30T10:49:47.754918Z" }, "id": "u2mSC1UMGAwJ" }, "outputs": [ { "data": { "text/plain": [ "{'classes': ,\n", " 'scores': }" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "serving_model = ServingModel(model, output_dir)\n", "\n", "serving_model(serialized_example_batch)" ] }, { "cell_type": "markdown", "metadata": { "id": "BWhighof3AK8" }, "source": [ "Export the model as a SavedModel:" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:47.759366Z", "iopub.status.busy": "2024-04-30T10:49:47.759073Z", "iopub.status.idle": "2024-04-30T10:49:51.110994Z", "shell.execute_reply": "2024-04-30T10:49:51.110176Z" }, "id": "kodDWTJIEr77" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmpckiw2b8s/keras/model/1/assets\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmpckiw2b8s/keras/model/1/assets\n" ] }, { "data": { "text/plain": [ "PosixPath('/tmpfs/tmp/tmpckiw2b8s/keras/model/1')" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "saved_model_dir = serving_model.export(output_dir)\n", "saved_model_dir" ] }, { "cell_type": "markdown", "metadata": { "id": "ohbWxp3-3aQu" }, "source": [ "Reload the model and test it on the same batch of examples:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:51.114849Z", "iopub.status.busy": "2024-04-30T10:49:51.114570Z", "iopub.status.idle": "2024-04-30T10:49:52.574357Z", "shell.execute_reply": "2024-04-30T10:49:52.573548Z" }, "id": "nShh6GqcEr78" }, "outputs": [], "source": [ "reloaded = tf.saved_model.load(str(saved_model_dir))\n", "run_model = reloaded.signatures['serving_default']" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:52.578107Z", "iopub.status.busy": "2024-04-30T10:49:52.577793Z", "iopub.status.idle": "2024-04-30T10:49:52.748894Z", "shell.execute_reply": "2024-04-30T10:49:52.748246Z" }, "id": "UiYJhQySEr78" }, "outputs": [ { "data": { "text/plain": [ "{'classes': ,\n", " 'scores': }" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "run_model(serialized_example_batch)" ] }, { "cell_type": "markdown", "metadata": { "id": "ICqetCnSjwp1" }, "source": [ "##What we did\n", "In this example we used `tf.Transform` to preprocess a dataset of census data, and train a model with the cleaned and transformed data. We also created an input function that we could use when we deploy our trained model in a production environment to perform inference. By using the same code for both training and inference we avoid any issues with data skew. Along the way we learned about creating an Apache Beam transform to perform the transformation that we needed for cleaning the data. We also saw how to use this transformed data to train a model using `tf_keras`. This is just a small piece of what TensorFlow Transform can do! We encourage you to dive into `tf.Transform` and discover what it can do for you." ] }, { "cell_type": "markdown", "metadata": { "id": "APEUSA9boKgT" }, "source": [ "## [Optional] Using our preprocessed data to train a model using tf.estimator\n", "\n", "> Warning: Estimators are not recommended for new code. Estimators run\n", "v1.Session-style code which is more difficult to write correctly, and\n", "can behave unexpectedly, especially when combined with TF 2 code. Estimators\n", "do fall under our\n", "[compatibility guarantees](https://tensorflow.org/guide/versions), but will\n", "receive no fixes other than security vulnerabilities. See the\n", "[migration guide](https://tensorflow.org/guide/migrate) for details.\n", "\n", " \n" ] }, { "cell_type": "markdown", "metadata": { "id": "QcBWjr3ioZbl" }, "source": [ "###Create an input function for training" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:52.752372Z", "iopub.status.busy": "2024-04-30T10:49:52.752098Z", "iopub.status.idle": "2024-04-30T10:49:52.757286Z", "shell.execute_reply": "2024-04-30T10:49:52.756636Z" }, "id": "kFO0MeWQ228a" }, "outputs": [], "source": [ "def _make_training_input_fn(tf_transform_output, transformed_examples,\n", " batch_size):\n", " \"\"\"Creates an input function reading from transformed data.\n", "\n", " Args:\n", " tf_transform_output: Wrapper around output of tf.Transform.\n", " transformed_examples: Base filename of examples.\n", " batch_size: Batch size.\n", "\n", " Returns:\n", " The input function for training or eval.\n", " \"\"\"\n", " def input_fn():\n", " \"\"\"Input function for training and eval.\"\"\"\n", " dataset = tf.data.experimental.make_batched_features_dataset(\n", " file_pattern=transformed_examples,\n", " batch_size=batch_size,\n", " features=tf_transform_output.transformed_feature_spec(),\n", " reader=tf.data.TFRecordDataset,\n", " shuffle=True)\n", "\n", " transformed_features = tf.compat.v1.data.make_one_shot_iterator(\n", " dataset).get_next()\n", "\n", " # Extract features and label from the transformed tensors.\n", " transformed_labels = tf.where(\n", " tf.equal(transformed_features.pop(LABEL_KEY), 1))\n", "\n", " return transformed_features, transformed_labels[:,1]\n", "\n", " return input_fn" ] }, { "cell_type": "markdown", "metadata": { "id": "22XOsZ-noez-" }, "source": [ "###Create an input function for serving\n", "\n", "Let's create an input function that we could use in production, and prepare our trained model for serving." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "cellView": "code", "execution": { "iopub.execute_input": "2024-04-30T10:49:52.760480Z", "iopub.status.busy": "2024-04-30T10:49:52.760228Z", "iopub.status.idle": "2024-04-30T10:49:52.764988Z", "shell.execute_reply": "2024-04-30T10:49:52.764404Z" }, "id": "NN5FVg343Jea" }, "outputs": [], "source": [ "def _make_serving_input_fn(tf_transform_output):\n", " \"\"\"Creates an input function reading from raw data.\n", "\n", " Args:\n", " tf_transform_output: Wrapper around output of tf.Transform.\n", "\n", " Returns:\n", " The serving input function.\n", " \"\"\"\n", " raw_feature_spec = RAW_DATA_FEATURE_SPEC.copy()\n", " # Remove label since it is not available during serving.\n", " raw_feature_spec.pop(LABEL_KEY)\n", "\n", " def serving_input_fn():\n", " \"\"\"Input function for serving.\"\"\"\n", " # Get raw features by generating the basic serving input_fn and calling it.\n", " # Here we generate an input_fn that expects a parsed Example proto to be fed\n", " # to the model at serving time. See also\n", " # tf.estimator.export.build_raw_serving_input_receiver_fn.\n", " raw_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(\n", " raw_feature_spec, default_batch_size=None)\n", " serving_input_receiver = raw_input_fn()\n", "\n", " # Apply the transform function that was used to generate the materialized\n", " # data.\n", " raw_features = serving_input_receiver.features\n", " transformed_features = tf_transform_output.transform_raw_features(\n", " raw_features)\n", "\n", " return tf.estimator.export.ServingInputReceiver(\n", " transformed_features, serving_input_receiver.receiver_tensors)\n", "\n", " return serving_input_fn" ] }, { "cell_type": "markdown", "metadata": { "id": "Vc9Edp8A7dsI" }, "source": [ "###Wrap our input data in FeatureColumns\n", "Our model will expect our data in TensorFlow FeatureColumns." ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:52.768117Z", "iopub.status.busy": "2024-04-30T10:49:52.767868Z", "iopub.status.idle": "2024-04-30T10:49:52.772263Z", "shell.execute_reply": "2024-04-30T10:49:52.771704Z" }, "id": "6qOFOvBk7oJX" }, "outputs": [], "source": [ "def get_feature_columns(tf_transform_output):\n", " \"\"\"Returns the FeatureColumns for the model.\n", "\n", " Args:\n", " tf_transform_output: A `TFTransformOutput` object.\n", "\n", " Returns:\n", " A list of FeatureColumns.\n", " \"\"\"\n", " # Wrap scalars as real valued columns.\n", " real_valued_columns = [tf.feature_column.numeric_column(key, shape=())\n", " for key in NUMERIC_FEATURE_KEYS]\n", "\n", " # Wrap categorical columns.\n", " one_hot_columns = [\n", " tf.feature_column.indicator_column(\n", " tf.feature_column.categorical_column_with_identity(\n", " key=key,\n", " num_buckets=(NUM_OOV_BUCKETS +\n", " tf_transform_output.vocabulary_size_by_name(\n", " vocab_filename=key))))\n", " for key in CATEGORICAL_FEATURE_KEYS]\n", "\n", " return real_valued_columns + one_hot_columns" ] }, { "cell_type": "markdown", "metadata": { "id": "f6FyMzMcpOgT" }, "source": [ "###Train, Evaluate, and Export our model" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:52.775172Z", "iopub.status.busy": "2024-04-30T10:49:52.774926Z", "iopub.status.idle": "2024-04-30T10:49:52.780907Z", "shell.execute_reply": "2024-04-30T10:49:52.780351Z" }, "id": "8iGQ0jeq8IWr" }, "outputs": [], "source": [ "def train_and_evaluate(working_dir, num_train_instances=NUM_TRAIN_INSTANCES,\n", " num_test_instances=NUM_TEST_INSTANCES):\n", " \"\"\"Train the model on training data and evaluate on test data.\n", "\n", " Args:\n", " working_dir: Directory to read transformed data and metadata from and to\n", " write exported model to.\n", " num_train_instances: Number of instances in train set\n", " num_test_instances: Number of instances in test set\n", "\n", " Returns:\n", " The results from the estimator's 'evaluate' method\n", " \"\"\"\n", " tf_transform_output = tft.TFTransformOutput(working_dir)\n", "\n", " run_config = tf.estimator.RunConfig()\n", "\n", " estimator = tf.estimator.LinearClassifier(\n", " feature_columns=get_feature_columns(tf_transform_output),\n", " config=run_config,\n", " loss_reduction=tf.losses.Reduction.SUM)\n", "\n", " # Fit the model using the default optimizer.\n", " train_input_fn = _make_training_input_fn(\n", " tf_transform_output,\n", " os.path.join(working_dir, TRANSFORMED_TRAIN_DATA_FILEBASE + '*'),\n", " batch_size=BATCH_SIZE)\n", " estimator.train(\n", " input_fn=train_input_fn,\n", " max_steps=TRAIN_NUM_EPOCHS * num_train_instances / BATCH_SIZE)\n", "\n", " # Evaluate model on test dataset.\n", " eval_input_fn = _make_training_input_fn(\n", " tf_transform_output,\n", " os.path.join(working_dir, TRANSFORMED_TEST_DATA_FILEBASE + '*'),\n", " batch_size=1)\n", "\n", " # Export the model.\n", " serving_input_fn = _make_serving_input_fn(tf_transform_output)\n", " exported_model_dir = os.path.join(working_dir, EXPORTED_MODEL_DIR)\n", " estimator.export_saved_model(exported_model_dir, serving_input_fn)\n", "\n", " return estimator.evaluate(input_fn=eval_input_fn, steps=num_test_instances)" ] }, { "cell_type": "markdown", "metadata": { "id": "5k8LrDPZpZsK" }, "source": [ "###Put it all together\n", "We've created all the stuff we need to preprocess our census data, train a model, and prepare it for serving. So far we've just been getting things ready. It's time to start running!\n", "\n", "Note: Scroll the output from this cell to see the whole process. The results will be at the bottom." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:49:52.784122Z", "iopub.status.busy": "2024-04-30T10:49:52.783865Z", "iopub.status.idle": "2024-04-30T10:51:24.902714Z", "shell.execute_reply": "2024-04-30T10:51:24.902035Z" }, "id": "P_1_2dB6pdc2" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmpvfol9yyw/tftransform_tmp/7f57f74495a24870877a207197967bb1/assets\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmpvfol9yyw/tftransform_tmp/7f57f74495a24870877a207197967bb1/assets\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmpvfol9yyw/tftransform_tmp/50532d4a7a7844099ecd59a9a8bb3b64/assets\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmpvfol9yyw/tftransform_tmp/50532d4a7a7844099ecd59a9a8bb3b64/assets\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/871689286.py:16: RunConfig.__init__ (from tensorflow_estimator.python.estimator.run_config) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/871689286.py:16: RunConfig.__init__ (from tensorflow_estimator.python.estimator.run_config) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/2648502843.py:11: numeric_column (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use Keras preprocessing layers instead, either directly or via the `tf.keras.utils.FeatureSpace` utility. Each of `tf.feature_column.*` has a functional equivalent in `tf.keras.layers` for feature preprocessing when training a Keras model.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/2648502843.py:11: numeric_column (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use Keras preprocessing layers instead, either directly or via the `tf.keras.utils.FeatureSpace` utility. Each of `tf.feature_column.*` has a functional equivalent in `tf.keras.layers` for feature preprocessing when training a Keras model.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/2648502843.py:17: categorical_column_with_identity (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use Keras preprocessing layers instead, either directly or via the `tf.keras.utils.FeatureSpace` utility. Each of `tf.feature_column.*` has a functional equivalent in `tf.keras.layers` for feature preprocessing when training a Keras model.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/2648502843.py:17: categorical_column_with_identity (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use Keras preprocessing layers instead, either directly or via the `tf.keras.utils.FeatureSpace` utility. Each of `tf.feature_column.*` has a functional equivalent in `tf.keras.layers` for feature preprocessing when training a Keras model.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/2648502843.py:16: indicator_column (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use Keras preprocessing layers instead, either directly or via the `tf.keras.utils.FeatureSpace` utility. Each of `tf.feature_column.*` has a functional equivalent in `tf.keras.layers` for feature preprocessing when training a Keras model.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/2648502843.py:16: indicator_column (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use Keras preprocessing layers instead, either directly or via the `tf.keras.utils.FeatureSpace` utility. Each of `tf.feature_column.*` has a functional equivalent in `tf.keras.layers` for feature preprocessing when training a Keras model.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/871689286.py:18: LinearClassifierV2.__init__ (from tensorflow_estimator.python.estimator.canned.linear) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/871689286.py:18: LinearClassifierV2.__init__ (from tensorflow_estimator.python.estimator.canned.linear) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/head_utils.py:54: BinaryClassHead.__init__ (from tensorflow_estimator.python.estimator.head.binary_class_head) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/head_utils.py:54: BinaryClassHead.__init__ (from tensorflow_estimator.python.estimator.head.binary_class_head) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/canned/linear.py:944: Estimator.__init__ (from tensorflow_estimator.python.estimator.estimator) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/canned/linear.py:944: Estimator.__init__ (from tensorflow_estimator.python.estimator.estimator) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:Using temporary folder as model directory: /tmpfs/tmp/tmp5z0b2qd4\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:Using temporary folder as model directory: /tmpfs/tmp/tmp5z0b2qd4\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Using config: {'_model_dir': '/tmpfs/tmp/tmp5z0b2qd4', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true\n", "graph_options {\n", " rewrite_options {\n", " meta_optimizer_iterations: ONE\n", " }\n", "}\n", ", '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Using config: {'_model_dir': '/tmpfs/tmp/tmp5z0b2qd4', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true\n", "graph_options {\n", " rewrite_options {\n", " meta_optimizer_iterations: ONE\n", " }\n", "}\n", ", '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/estimator.py:385: StopAtStepHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/estimator.py:385: StopAtStepHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Calling model_fn.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Calling model_fn.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/keras/src/optimizers/legacy/ftrl.py:173: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Call initializer instance with the dtype argument instead of passing it to the constructor\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/keras/src/optimizers/legacy/ftrl.py:173: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Call initializer instance with the dtype argument instead of passing it to the constructor\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/model_fn.py:250: EstimatorSpec.__new__ (from tensorflow_estimator.python.estimator.model_fn) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/model_fn.py:250: EstimatorSpec.__new__ (from tensorflow_estimator.python.estimator.model_fn) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Done calling model_fn.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Done calling model_fn.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/estimator.py:1416: NanTensorHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/estimator.py:1416: NanTensorHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/estimator.py:1419: LoggingTensorHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/estimator.py:1419: LoggingTensorHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/basic_session_run_hooks.py:232: SecondOrStepTimer.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/basic_session_run_hooks.py:232: SecondOrStepTimer.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/estimator.py:1456: CheckpointSaverHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/estimator.py:1456: CheckpointSaverHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Create CheckpointSaverHook.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Create CheckpointSaverHook.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/monitored_session.py:579: StepCounterHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/monitored_session.py:579: StepCounterHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/monitored_session.py:586: SummarySaverHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/monitored_session.py:586: SummarySaverHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Graph was finalized.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Graph was finalized.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Running local_init_op.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Running local_init_op.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Done running local_init_op.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Done running local_init_op.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Saving checkpoints for 0 into /tmpfs/tmp/tmp5z0b2qd4/model.ckpt.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Saving checkpoints for 0 into /tmpfs/tmp/tmp5z0b2qd4/model.ckpt.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/monitored_session.py:1455: SessionRunArgs.__new__ (from tensorflow.python.training.session_run_hook) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/monitored_session.py:1455: SessionRunArgs.__new__ (from tensorflow.python.training.session_run_hook) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/monitored_session.py:1454: SessionRunContext.__init__ (from tensorflow.python.training.session_run_hook) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/monitored_session.py:1454: SessionRunContext.__init__ (from tensorflow.python.training.session_run_hook) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/monitored_session.py:1474: SessionRunValues.__new__ (from tensorflow.python.training.session_run_hook) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/monitored_session.py:1474: SessionRunValues.__new__ (from tensorflow.python.training.session_run_hook) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 88.72284, step = 0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 88.72284, step = 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 217.048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 217.048\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 38.05179, step = 100 (0.463 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 38.05179, step = 100 (0.463 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 309.278\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 309.278\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 62.872578, step = 200 (0.323 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 62.872578, step = 200 (0.323 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 306.322\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 306.322\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 43.058277, step = 300 (0.327 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 43.058277, step = 300 (0.327 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 307.682\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 307.682\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 33.610596, step = 400 (0.325 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 33.610596, step = 400 (0.325 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 306.892\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 306.892\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 49.49376, step = 500 (0.326 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 49.49376, step = 500 (0.326 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 309.289\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 309.289\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.562958, step = 600 (0.323 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.562958, step = 600 (0.323 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 311.884\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 311.884\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.649498, step = 700 (0.320 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.649498, step = 700 (0.320 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 311.451\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 311.451\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 40.63858, step = 800 (0.321 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 40.63858, step = 800 (0.321 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 310.801\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 310.801\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 56.933117, step = 900 (0.322 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 56.933117, step = 900 (0.322 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 310.947\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 310.947\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 43.414566, step = 1000 (0.321 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 43.414566, step = 1000 (0.321 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 307.503\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 307.503\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 46.722263, step = 1100 (0.326 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 46.722263, step = 1100 (0.326 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 310.43\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 310.43\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.71798, step = 1200 (0.322 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.71798, step = 1200 (0.322 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 306.606\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 306.606\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 32.245277, step = 1300 (0.326 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 32.245277, step = 1300 (0.326 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.767\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.767\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.286648, step = 1400 (0.328 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.286648, step = 1400 (0.328 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 311.309\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 311.309\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 47.270004, step = 1500 (0.321 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 47.270004, step = 1500 (0.321 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 312.664\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 312.664\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 41.641903, step = 1600 (0.320 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 41.641903, step = 1600 (0.320 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 314.642\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 314.642\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.352055, step = 1700 (0.318 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.352055, step = 1700 (0.318 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 308.436\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 308.436\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.981514, step = 1800 (0.324 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.981514, step = 1800 (0.324 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.007\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.007\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.558506, step = 1900 (0.329 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.558506, step = 1900 (0.329 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 308.174\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 308.174\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 36.912056, step = 2000 (0.325 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 36.912056, step = 2000 (0.325 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 305.635\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 305.635\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 50.084297, step = 2100 (0.327 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 50.084297, step = 2100 (0.327 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.925\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.925\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 34.076836, step = 2200 (0.328 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 34.076836, step = 2200 (0.328 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.67\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.67\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.80255, step = 2300 (0.328 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.80255, step = 2300 (0.328 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.428\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.428\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 43.28376, step = 2400 (0.328 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 43.28376, step = 2400 (0.328 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 306.855\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 306.855\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 52.975185, step = 2500 (0.326 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 52.975185, step = 2500 (0.326 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 301.499\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 301.499\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 38.57332, step = 2600 (0.332 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 38.57332, step = 2600 (0.332 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.658\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.658\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.026337, step = 2700 (0.328 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.026337, step = 2700 (0.328 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.471\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 304.471\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 49.812424, step = 2800 (0.329 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 49.812424, step = 2800 (0.329 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 301.243\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 301.243\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 38.365997, step = 2900 (0.332 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 38.365997, step = 2900 (0.332 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 303.047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 303.047\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 46.136482, step = 3000 (0.330 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 46.136482, step = 3000 (0.330 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 309.327\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 309.327\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.838882, step = 3100 (0.323 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 39.838882, step = 3100 (0.323 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 314.267\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 314.267\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 41.79177, step = 3200 (0.318 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 41.79177, step = 3200 (0.318 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 301.294\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 301.294\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 41.994194, step = 3300 (0.332 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 41.994194, step = 3300 (0.332 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 308.412\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 308.412\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 41.158104, step = 3400 (0.324 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 41.158104, step = 3400 (0.324 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 305.302\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 305.302\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 35.35069, step = 3500 (0.328 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 35.35069, step = 3500 (0.328 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 303.808\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 303.808\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 49.999313, step = 3600 (0.329 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 49.999313, step = 3600 (0.329 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 312.812\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 312.812\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 44.52297, step = 3700 (0.320 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 44.52297, step = 3700 (0.320 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 311.422\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 311.422\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 31.237823, step = 3800 (0.321 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 31.237823, step = 3800 (0.321 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 311.942\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 311.942\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 40.837013, step = 3900 (0.321 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 40.837013, step = 3900 (0.321 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 310.278\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 310.278\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 48.289017, step = 4000 (0.322 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 48.289017, step = 4000 (0.322 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 305.809\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 305.809\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.82827, step = 4100 (0.327 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.82827, step = 4100 (0.327 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 309.371\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 309.371\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 49.08073, step = 4200 (0.323 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 49.08073, step = 4200 (0.323 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 313.159\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 313.159\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 43.150997, step = 4300 (0.319 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 43.150997, step = 4300 (0.319 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 317.596\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 317.596\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 46.704082, step = 4400 (0.315 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 46.704082, step = 4400 (0.315 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 316.261\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 316.261\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.477634, step = 4500 (0.316 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.477634, step = 4500 (0.316 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 319.902\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 319.902\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 47.049324, step = 4600 (0.313 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 47.049324, step = 4600 (0.313 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 323.097\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 323.097\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 28.26455, step = 4700 (0.310 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 28.26455, step = 4700 (0.310 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 318.749\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 318.749\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 30.772062, step = 4800 (0.314 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 30.772062, step = 4800 (0.314 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 323.13\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 323.13\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.176075, step = 4900 (0.310 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 42.176075, step = 4900 (0.310 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 321.773\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:global_step/sec: 321.773\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 52.00352, step = 5000 (0.311 sec)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:loss = 52.00352, step = 5000 (0.311 sec)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 5088...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 5088...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Saving checkpoints for 5088 into /tmpfs/tmp/tmp5z0b2qd4/model.ckpt.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Saving checkpoints for 5088 into /tmpfs/tmp/tmp5z0b2qd4/model.ckpt.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 5088...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 5088...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Loss for final step: 33.25688.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Loss for final step: 33.25688.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/3233312620.py:20: build_parsing_serving_input_receiver_fn (from tensorflow_estimator.python.estimator.export.export) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_186972/3233312620.py:20: build_parsing_serving_input_receiver_fn (from tensorflow_estimator.python.estimator.export.export) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/export/export.py:312: ServingInputReceiver.__new__ (from tensorflow_estimator.python.estimator.export.export) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/export/export.py:312: ServingInputReceiver.__new__ (from tensorflow_estimator.python.estimator.export.export) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:struct2tensor is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_decision_forests is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:tensorflow_text is not available.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:Loading a TF2 SavedModel but eager mode seems disabled.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:Loading a TF2 SavedModel but eager mode seems disabled.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Calling model_fn.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Calling model_fn.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/base_head.py:786: ClassificationOutput.__init__ (from tensorflow.python.saved_model.model_utils.export_output) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/base_head.py:786: ClassificationOutput.__init__ (from tensorflow.python.saved_model.model_utils.export_output) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/binary_class_head.py:561: RegressionOutput.__init__ (from tensorflow.python.saved_model.model_utils.export_output) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/binary_class_head.py:561: RegressionOutput.__init__ (from tensorflow.python.saved_model.model_utils.export_output) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/binary_class_head.py:563: PredictOutput.__init__ (from tensorflow.python.saved_model.model_utils.export_output) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/binary_class_head.py:563: PredictOutput.__init__ (from tensorflow.python.saved_model.model_utils.export_output) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Done calling model_fn.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Done calling model_fn.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py:168: build_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "This API was designed for TensorFlow v1. See https://www.tensorflow.org/guide/migrate for instructions on how to migrate your code to TensorFlow v2.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py:168: build_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "This API was designed for TensorFlow v1. See https://www.tensorflow.org/guide/migrate for instructions on how to migrate your code to TensorFlow v2.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/saved_model/model_utils/export_utils.py:83: get_tensor_from_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "This API was designed for TensorFlow v1. See https://www.tensorflow.org/guide/migrate for instructions on how to migrate your code to TensorFlow v2.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/saved_model/model_utils/export_utils.py:83: get_tensor_from_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "This API was designed for TensorFlow v1. See https://www.tensorflow.org/guide/migrate for instructions on how to migrate your code to TensorFlow v2.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Signatures INCLUDED in export for Classify: ['serving_default', 'classification']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Signatures INCLUDED in export for Classify: ['serving_default', 'classification']\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Signatures INCLUDED in export for Regress: ['regression']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Signatures INCLUDED in export for Regress: ['regression']\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Signatures INCLUDED in export for Predict: ['predict']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Signatures INCLUDED in export for Predict: ['predict']\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Signatures INCLUDED in export for Train: None\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Signatures INCLUDED in export for Train: None\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Signatures INCLUDED in export for Eval: None\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Signatures INCLUDED in export for Eval: None\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Restoring parameters from /tmpfs/tmp/tmp5z0b2qd4/model.ckpt-5088\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Restoring parameters from /tmpfs/tmp/tmp5z0b2qd4/model.ckpt-5088\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Assets added to graph.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Assets added to graph.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmp4ti4zdkp/estimator/exported_model_dir/temp-1714474233/assets\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: /tmpfs/tmp/tmp4ti4zdkp/estimator/exported_model_dir/temp-1714474233/assets\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:SavedModel written to: /tmpfs/tmp/tmp4ti4zdkp/estimator/exported_model_dir/temp-1714474233/saved_model.pb\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:SavedModel written to: /tmpfs/tmp/tmp4ti4zdkp/estimator/exported_model_dir/temp-1714474233/saved_model.pb\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Calling model_fn.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Calling model_fn.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Done calling model_fn.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Done calling model_fn.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Starting evaluation at 2024-04-30T10:50:35\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Starting evaluation at 2024-04-30T10:50:35\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/evaluation.py:260: FinalOpsHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/training/evaluation.py:260: FinalOpsHook.__init__ (from tensorflow.python.training.basic_session_run_hooks) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Graph was finalized.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Graph was finalized.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Restoring parameters from /tmpfs/tmp/tmp5z0b2qd4/model.ckpt-5088\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Restoring parameters from /tmpfs/tmp/tmp5z0b2qd4/model.ckpt-5088\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Running local_init_op.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Running local_init_op.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Done running local_init_op.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Done running local_init_op.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [1628/16280]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [1628/16280]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [3256/16280]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [3256/16280]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [4884/16280]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [4884/16280]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [6512/16280]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [6512/16280]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [8140/16280]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [8140/16280]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [9768/16280]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [9768/16280]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [11396/16280]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [11396/16280]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [13024/16280]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [13024/16280]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [14652/16280]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [14652/16280]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [16280/16280]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Evaluation [16280/16280]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Inference Time : 49.09539s\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Inference Time : 49.09539s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Finished evaluation at 2024-04-30-10:51:24\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Finished evaluation at 2024-04-30-10:51:24\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Saving dict for global step 5088: accuracy = 0.85110563, accuracy_baseline = 0.7637592, auc = 0.90211606, auc_precision_recall = 0.96728647, average_loss = 0.32371244, global_step = 5088, label/mean = 0.7637592, loss = 0.32371244, precision = 0.88235295, prediction/mean = 0.75723934, recall = 0.9289046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Saving dict for global step 5088: accuracy = 0.85110563, accuracy_baseline = 0.7637592, auc = 0.90211606, auc_precision_recall = 0.96728647, average_loss = 0.32371244, global_step = 5088, label/mean = 0.7637592, loss = 0.32371244, precision = 0.88235295, prediction/mean = 0.75723934, recall = 0.9289046\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Saving 'checkpoint_path' summary for global step 5088: /tmpfs/tmp/tmp5z0b2qd4/model.ckpt-5088\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Saving 'checkpoint_path' summary for global step 5088: /tmpfs/tmp/tmp5z0b2qd4/model.ckpt-5088\n" ] } ], "source": [ "import tempfile\n", "temp = temp = os.path.join(tempfile.mkdtemp(),'estimator')\n", "\n", "transform_data(train_path, test_path, temp)\n", "results = train_and_evaluate(temp)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "execution": { "iopub.execute_input": "2024-04-30T10:51:24.906534Z", "iopub.status.busy": "2024-04-30T10:51:24.905921Z", "iopub.status.idle": "2024-04-30T10:51:24.909938Z", "shell.execute_reply": "2024-04-30T10:51:24.909349Z" }, "id": "O_IqGL90GCIq" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'accuracy': 0.85110563,\n", " 'accuracy_baseline': 0.7637592,\n", " 'auc': 0.90211606,\n", " 'auc_precision_recall': 0.96728647,\n", " 'average_loss': 0.32371244,\n", " 'global_step': 5088,\n", " 'label/mean': 0.7637592,\n", " 'loss': 0.32371244,\n", " 'precision': 0.88235295,\n", " 'prediction/mean': 0.75723934,\n", " 'recall': 0.9289046}\n" ] } ], "source": [ "pprint.pprint(results)" ] }, { "cell_type": "markdown", "metadata": { "id": "Z6T3aHoRsjgR" }, "source": [ " \n" ] } ], "metadata": { "colab": { "collapsed_sections": [ "APEUSA9boKgT" ], "name": "census.ipynb", "provenance": [], "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.19" } }, "nbformat": 4, "nbformat_minor": 0 }