{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "RYmPh1qB_KO2" }, "source": [ "##### Copyright 2020 The TensorFlow Authors." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:49.501002Z", "iopub.status.busy": "2024-07-30T11:22:49.500314Z", "iopub.status.idle": "2024-07-30T11:22:49.505059Z", "shell.execute_reply": "2024-07-30T11:22:49.504300Z" }, "id": "oMRm3czy9tLh" }, "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": "ooXoR4kx_YL9" }, "source": [ "# TF Lattice Aggregate Function Models" ] }, { "cell_type": "markdown", "metadata": { "id": "BR6XNYEXEgSU" }, "source": [ "\n", " \n", " \n", " \n", " \n", "
\n", " View on TensorFlow.org\n", " \n", " Run in Google Colab\n", " \n", " View source on GitHub\n", " \n", " Download notebook\n", "
" ] }, { "cell_type": "markdown", "metadata": { "id": "-ZfQWUmfEsyZ" }, "source": [ "## Overview\n", "\n", "TFL Premade Aggregate Function Models are quick and easy ways to build TFL `keras.Model` instances for learning complex aggregation functions. This guide outlines the steps needed to construct a TFL Premade Aggregate Function Model and train/test it." ] }, { "cell_type": "markdown", "metadata": { "id": "L0lgWoB6Gmk1" }, "source": [ "## Setup\n", "\n", "Installing TF Lattice package:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:49.509218Z", "iopub.status.busy": "2024-07-30T11:22:49.508678Z", "iopub.status.idle": "2024-07-30T11:22:51.405228Z", "shell.execute_reply": "2024-07-30T11:22:51.404242Z" }, "id": "ivwKrEdLGphZ" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: tensorflow in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (2.17.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: tf-keras in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (2.17.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting tensorflow-lattice\r\n", " Using cached tensorflow_lattice-2.1.0-py2.py3-none-any.whl.metadata (1.8 kB)\r\n", "Requirement already satisfied: pydot in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (3.0.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting graphviz\r\n", " Using cached graphviz-0.20.3-py3-none-any.whl.metadata (12 kB)\r\n", "Requirement already satisfied: absl-py>=1.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (2.1.0)\r\n", "Requirement already satisfied: astunparse>=1.6.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (1.6.3)\r\n", "Requirement already satisfied: flatbuffers>=24.3.25 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (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) (0.6.0)\r\n", "Requirement already satisfied: google-pasta>=0.1.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (0.2.0)\r\n", "Requirement already satisfied: h5py>=3.10.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (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) (18.1.1)\r\n", "Requirement already satisfied: ml-dtypes<0.5.0,>=0.3.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (0.4.0)\r\n", "Requirement already satisfied: opt-einsum>=2.3.2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (3.3.0)\r\n", "Requirement already satisfied: packaging in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (24.1)\r\n", "Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (3.20.3)\r\n", "Requirement already satisfied: requests<3,>=2.21.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (2.32.3)\r\n", "Requirement already satisfied: setuptools in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (72.1.0)\r\n", "Requirement already satisfied: six>=1.12.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (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.4.0)\r\n", "Requirement already satisfied: typing-extensions>=3.6.6 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (4.12.2)\r\n", "Requirement already satisfied: wrapt>=1.11.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (1.16.0)\r\n", "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (1.65.1)\r\n", "Requirement already satisfied: tensorboard<2.18,>=2.17 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (2.17.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: keras>=3.2.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (3.4.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) (0.37.1)\r\n", "Requirement already satisfied: numpy<2.0.0,>=1.23.5 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow) (1.26.4)\r\n", "Requirement already satisfied: matplotlib in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-lattice) (3.9.1)\r\n", "Requirement already satisfied: pandas in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-lattice) (2.2.2)\r\n", "Requirement already satisfied: scikit-learn in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow-lattice) (1.5.1)\r\n", "Requirement already satisfied: pyparsing>=3.0.9 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from pydot) (3.1.2)\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) (0.43.0)\r\n", "Requirement already satisfied: rich in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from keras>=3.2.0->tensorflow) (13.7.1)\r\n", "Requirement already satisfied: namex in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from keras>=3.2.0->tensorflow) (0.0.8)\r\n", "Requirement already satisfied: optree in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from keras>=3.2.0->tensorflow) (0.12.1)\r\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from requests<3,>=2.21.0->tensorflow) (3.3.2)\r\n", "Requirement already satisfied: idna<4,>=2.5 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from requests<3,>=2.21.0->tensorflow) (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,>=2.21.0->tensorflow) (2.2.2)\r\n", "Requirement already satisfied: certifi>=2017.4.17 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from requests<3,>=2.21.0->tensorflow) (2024.7.4)\r\n", "Requirement already satisfied: markdown>=2.6.8 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorboard<2.18,>=2.17->tensorflow) (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.18,>=2.17->tensorflow) (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.18,>=2.17->tensorflow) (3.0.3)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: contourpy>=1.0.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib->tensorflow-lattice) (1.2.1)\r\n", "Requirement already satisfied: cycler>=0.10 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib->tensorflow-lattice) (0.12.1)\r\n", "Requirement already satisfied: fonttools>=4.22.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib->tensorflow-lattice) (4.53.1)\r\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib->tensorflow-lattice) (1.4.5)\r\n", "Requirement already satisfied: pillow>=8 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib->tensorflow-lattice) (10.4.0)\r\n", "Requirement already satisfied: python-dateutil>=2.7 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib->tensorflow-lattice) (2.9.0.post0)\r\n", "Requirement already satisfied: importlib-resources>=3.2.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib->tensorflow-lattice) (6.4.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: pytz>=2020.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from pandas->tensorflow-lattice) (2024.1)\r\n", "Requirement already satisfied: tzdata>=2022.7 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from pandas->tensorflow-lattice) (2024.1)\r\n", "Requirement already satisfied: scipy>=1.6.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from scikit-learn->tensorflow-lattice) (1.13.1)\r\n", "Requirement already satisfied: joblib>=1.2.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from scikit-learn->tensorflow-lattice) (1.4.2)\r\n", "Requirement already satisfied: threadpoolctl>=3.1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from scikit-learn->tensorflow-lattice) (3.5.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: zipp>=3.1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from importlib-resources>=3.2.0->matplotlib->tensorflow-lattice) (3.19.2)\r\n", "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.18,>=2.17->tensorflow) (8.2.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.18,>=2.17->tensorflow) (2.1.5)\r\n", "Requirement already satisfied: markdown-it-py>=2.2.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from rich->keras>=3.2.0->tensorflow) (3.0.0)\r\n", "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from rich->keras>=3.2.0->tensorflow) (2.18.0)\r\n", "Requirement already satisfied: mdurl~=0.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from markdown-it-py>=2.2.0->rich->keras>=3.2.0->tensorflow) (0.1.2)\r\n", "Using cached tensorflow_lattice-2.1.0-py2.py3-none-any.whl (216 kB)\r\n", "Using cached graphviz-0.20.3-py3-none-any.whl (47 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Installing collected packages: graphviz, tensorflow-lattice\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully installed graphviz-0.20.3 tensorflow-lattice-2.1.0\r\n" ] } ], "source": [ "#@test {\"skip\": true}\n", "!pip install -U tensorflow tf-keras tensorflow-lattice pydot graphviz" ] }, { "cell_type": "markdown", "metadata": { "id": "VQsRKS4wGrMu" }, "source": [ "Importing required packages:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:51.409762Z", "iopub.status.busy": "2024-07-30T11:22:51.409407Z", "iopub.status.idle": "2024-07-30T11:22:54.375068Z", "shell.execute_reply": "2024-07-30T11:22:54.374170Z" }, "id": "j41-kd4MGtDS" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-07-30 11:22:51.711202: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", "2024-07-30 11:22:51.735645: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", "2024-07-30 11:22:51.742800: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n" ] } ], "source": [ "import tensorflow as tf\n", "\n", "import collections\n", "import logging\n", "import numpy as np\n", "import pandas as pd\n", "import sys\n", "import tensorflow_lattice as tfl\n", "logging.disable(sys.maxsize)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:54.379451Z", "iopub.status.busy": "2024-07-30T11:22:54.378950Z", "iopub.status.idle": "2024-07-30T11:22:54.383085Z", "shell.execute_reply": "2024-07-30T11:22:54.382432Z" }, "id": "HlJH1SMx3Vul" }, "outputs": [], "source": [ "# Use Keras 2.\n", "version_fn = getattr(tf.keras, \"version\", None)\n", "if version_fn and version_fn().startswith(\"3.\"):\n", " import tf_keras as keras\n", "else:\n", " keras = tf.keras" ] }, { "cell_type": "markdown", "metadata": { "id": "ZHPohKjBIFG5" }, "source": [ "Downloading the Puzzles dataset:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:54.386944Z", "iopub.status.busy": "2024-07-30T11:22:54.386266Z", "iopub.status.idle": "2024-07-30T11:22:54.586459Z", "shell.execute_reply": "2024-07-30T11:22:54.585785Z" }, "id": "VjYHpw2dSfHH" }, "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", "
puzzle_namestar_ratingword_countis_amazonincludes_photonum_helpfulSales12-18MonthsAgo
0NightHawks510810681
1NightHawks53110581
2NightHawks55110481
3NightHawks58810481
4NightHawks43710281
\n", "
" ], "text/plain": [ " puzzle_name star_rating word_count is_amazon includes_photo \\\n", "0 NightHawks 5 108 1 0 \n", "1 NightHawks 5 31 1 0 \n", "2 NightHawks 5 51 1 0 \n", "3 NightHawks 5 88 1 0 \n", "4 NightHawks 4 37 1 0 \n", "\n", " num_helpful Sales12-18MonthsAgo \n", "0 6 81 \n", "1 5 81 \n", "2 4 81 \n", "3 4 81 \n", "4 2 81 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_dataframe = pd.read_csv(\n", " 'https://raw.githubusercontent.com/wbakst/puzzles_data/master/train.csv')\n", "train_dataframe.head()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:54.590058Z", "iopub.status.busy": "2024-07-30T11:22:54.589816Z", "iopub.status.idle": "2024-07-30T11:22:54.788977Z", "shell.execute_reply": "2024-07-30T11:22:54.788306Z" }, "id": "UOsgu3eIEur6" }, "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", "
puzzle_namestar_ratingword_countis_amazonincludes_photonum_helpfulSalesLastSixMonths
0NightHawks413800040
1NightHawks511500040
2NightHawks512700040
3NightHawks510810640
4NightHawks53110540
\n", "
" ], "text/plain": [ " puzzle_name star_rating word_count is_amazon includes_photo \\\n", "0 NightHawks 4 138 0 0 \n", "1 NightHawks 5 115 0 0 \n", "2 NightHawks 5 127 0 0 \n", "3 NightHawks 5 108 1 0 \n", "4 NightHawks 5 31 1 0 \n", "\n", " num_helpful SalesLastSixMonths \n", "0 0 40 \n", "1 0 40 \n", "2 0 40 \n", "3 6 40 \n", "4 5 40 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_dataframe = pd.read_csv(\n", " 'https://raw.githubusercontent.com/wbakst/puzzles_data/master/test.csv')\n", "test_dataframe.head()" ] }, { "cell_type": "markdown", "metadata": { "id": "XG7MPCyzVr22" }, "source": [ "Extract and convert features and labels" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:54.793035Z", "iopub.status.busy": "2024-07-30T11:22:54.792430Z", "iopub.status.idle": "2024-07-30T11:22:54.796341Z", "shell.execute_reply": "2024-07-30T11:22:54.795708Z" }, "id": "bYdJicq5bBuz" }, "outputs": [], "source": [ "# Features:\n", "# - star_rating rating out of 5 stars (1-5)\n", "# - word_count number of words in the review\n", "# - is_amazon 1 = reviewed on amazon; 0 = reviewed on artifact website\n", "# - includes_photo if the review includes a photo of the puzzle\n", "# - num_helpful number of people that found this review helpful\n", "# - num_reviews total number of reviews for this puzzle (we construct)\n", "#\n", "# This ordering of feature names will be the exact same order that we construct\n", "# our model to expect.\n", "feature_names = [\n", " 'star_rating', 'word_count', 'is_amazon', 'includes_photo', 'num_helpful',\n", " 'num_reviews'\n", "]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:54.799946Z", "iopub.status.busy": "2024-07-30T11:22:54.799406Z", "iopub.status.idle": "2024-07-30T11:22:54.809672Z", "shell.execute_reply": "2024-07-30T11:22:54.808999Z" }, "id": "kx0ZX2HR-4qb" }, "outputs": [], "source": [ "def extract_features(dataframe, label_name):\n", " # First we extract flattened features.\n", " flattened_features = {\n", " feature_name: dataframe[feature_name].values.astype(float)\n", " for feature_name in feature_names[:-1]\n", " }\n", "\n", " # Construct mapping from puzzle name to feature.\n", " star_rating = collections.defaultdict(list)\n", " word_count = collections.defaultdict(list)\n", " is_amazon = collections.defaultdict(list)\n", " includes_photo = collections.defaultdict(list)\n", " num_helpful = collections.defaultdict(list)\n", " labels = {}\n", "\n", " # Extract each review.\n", " for i in range(len(dataframe)):\n", " row = dataframe.iloc[i]\n", " puzzle_name = row['puzzle_name']\n", " star_rating[puzzle_name].append(float(row['star_rating']))\n", " word_count[puzzle_name].append(float(row['word_count']))\n", " is_amazon[puzzle_name].append(float(row['is_amazon']))\n", " includes_photo[puzzle_name].append(float(row['includes_photo']))\n", " num_helpful[puzzle_name].append(float(row['num_helpful']))\n", " labels[puzzle_name] = float(row[label_name])\n", "\n", " # Organize data into list of list of features.\n", " names = list(star_rating.keys())\n", " star_rating = [star_rating[name] for name in names]\n", " word_count = [word_count[name] for name in names]\n", " is_amazon = [is_amazon[name] for name in names]\n", " includes_photo = [includes_photo[name] for name in names]\n", " num_helpful = [num_helpful[name] for name in names]\n", " num_reviews = [[len(ratings)] * len(ratings) for ratings in star_rating]\n", " labels = [labels[name] for name in names]\n", "\n", " # Flatten num_reviews\n", " flattened_features['num_reviews'] = [len(reviews) for reviews in num_reviews]\n", "\n", " # Convert data into ragged tensors.\n", " star_rating = tf.ragged.constant(star_rating)\n", " word_count = tf.ragged.constant(word_count)\n", " is_amazon = tf.ragged.constant(is_amazon)\n", " includes_photo = tf.ragged.constant(includes_photo)\n", " num_helpful = tf.ragged.constant(num_helpful)\n", " num_reviews = tf.ragged.constant(num_reviews)\n", " labels = tf.constant(labels)\n", "\n", " # Now we can return our extracted data.\n", " return (star_rating, word_count, is_amazon, includes_photo, num_helpful,\n", " num_reviews), labels, flattened_features" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:54.813182Z", "iopub.status.busy": "2024-07-30T11:22:54.812628Z", "iopub.status.idle": "2024-07-30T11:22:55.131115Z", "shell.execute_reply": "2024-07-30T11:22:55.130248Z" }, "id": "Nd6j_J5CbNiz" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-07-30 11:22:54.958021: E external/local_xla/xla/stream_executor/cuda/cuda_driver.cc:266] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected\n" ] } ], "source": [ "train_xs, train_ys, flattened_features = extract_features(train_dataframe, 'Sales12-18MonthsAgo')\n", "test_xs, test_ys, _ = extract_features(test_dataframe, 'SalesLastSixMonths')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:55.135201Z", "iopub.status.busy": "2024-07-30T11:22:55.134615Z", "iopub.status.idle": "2024-07-30T11:22:55.139627Z", "shell.execute_reply": "2024-07-30T11:22:55.138811Z" }, "id": "KfHHhCRsHejl" }, "outputs": [], "source": [ "# Let's define our label minimum and maximum.\n", "min_label, max_label = float(np.min(train_ys)), float(np.max(train_ys))\n", "min_label, max_label = float(np.min(train_ys)), float(np.max(train_ys))" ] }, { "cell_type": "markdown", "metadata": { "id": "9TwqlRirIhAq" }, "source": [ "Setting the default values used for training in this guide:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:55.143412Z", "iopub.status.busy": "2024-07-30T11:22:55.142905Z", "iopub.status.idle": "2024-07-30T11:22:55.146714Z", "shell.execute_reply": "2024-07-30T11:22:55.146043Z" }, "id": "GckmXFzRIhdD" }, "outputs": [], "source": [ "LEARNING_RATE = 0.1\n", "BATCH_SIZE = 128\n", "NUM_EPOCHS = 500\n", "MIDDLE_DIM = 3\n", "MIDDLE_LATTICE_SIZE = 2\n", "MIDDLE_KEYPOINTS = 16\n", "OUTPUT_KEYPOINTS = 8" ] }, { "cell_type": "markdown", "metadata": { "id": "TpDKon4oIh2W" }, "source": [ "## Feature Configs\n", "\n", "Feature calibration and per-feature configurations are set using [tfl.configs.FeatureConfig](https://www.tensorflow.org/lattice/api_docs/python/tfl/configs/FeatureConfig). Feature configurations include monotonicity constraints, per-feature regularization (see [tfl.configs.RegularizerConfig](https://www.tensorflow.org/lattice/api_docs/python/tfl/configs/RegularizerConfig)), and lattice sizes for lattice models.\n", "\n", "Note that we must fully specify the feature config for any feature that we want our model to recognize. Otherwise the model will have no way of knowing that such a feature exists. For aggregation models, these features will automaticaly be considered and properly handled as ragged." ] }, { "cell_type": "markdown", "metadata": { "id": "_IMwcDh7Xs5n" }, "source": [ "### Compute Quantiles\n", "\n", "Although the default setting for `pwl_calibration_input_keypoints` in `tfl.configs.FeatureConfig` is 'quantiles', for premade models we have to manually define the input keypoints. To do so, we first define our own helper function for computing quantiles." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:55.150555Z", "iopub.status.busy": "2024-07-30T11:22:55.150055Z", "iopub.status.idle": "2024-07-30T11:22:55.155739Z", "shell.execute_reply": "2024-07-30T11:22:55.155106Z" }, "id": "l0uYl9ZpXtW1" }, "outputs": [], "source": [ "def compute_quantiles(features,\n", " num_keypoints=10,\n", " clip_min=None,\n", " clip_max=None,\n", " missing_value=None):\n", " # Clip min and max if desired.\n", " if clip_min is not None:\n", " features = np.maximum(features, clip_min)\n", " features = np.append(features, clip_min)\n", " if clip_max is not None:\n", " features = np.minimum(features, clip_max)\n", " features = np.append(features, clip_max)\n", " # Make features unique.\n", " unique_features = np.unique(features)\n", " # Remove missing values if specified.\n", " if missing_value is not None:\n", " unique_features = np.delete(unique_features,\n", " np.where(unique_features == missing_value))\n", " # Compute and return quantiles over unique non-missing feature values.\n", " return np.quantile(\n", " unique_features,\n", " np.linspace(0., 1., num=num_keypoints),\n", " interpolation='nearest').astype(float)" ] }, { "cell_type": "markdown", "metadata": { "id": "9oYZdVeWEhf2" }, "source": [ "### Defining Our Feature Configs\n", "\n", "Now that we can compute our quantiles, we define a feature config for each feature that we want our model to take as input." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:55.159411Z", "iopub.status.busy": "2024-07-30T11:22:55.158911Z", "iopub.status.idle": "2024-07-30T11:22:55.167552Z", "shell.execute_reply": "2024-07-30T11:22:55.166888Z" }, "id": "rEYlSXhTEmoh" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmpfs/tmp/ipykernel_67252/285458577.py:8: DeprecationWarning: the `interpolation=` argument to quantile was renamed to `method=`, which has additional options.\n", "Users of the modes 'nearest', 'lower', 'higher', or 'midpoint' are encouraged to review the method they used. (Deprecated NumPy 1.22)\n", " pwl_calibration_input_keypoints=compute_quantiles(\n", "/tmpfs/tmp/ipykernel_67252/285458577.py:16: DeprecationWarning: the `interpolation=` argument to quantile was renamed to `method=`, which has additional options.\n", "Users of the modes 'nearest', 'lower', 'higher', or 'midpoint' are encouraged to review the method they used. (Deprecated NumPy 1.22)\n", " pwl_calibration_input_keypoints=compute_quantiles(\n", "/tmpfs/tmp/ipykernel_67252/285458577.py:34: DeprecationWarning: the `interpolation=` argument to quantile was renamed to `method=`, which has additional options.\n", "Users of the modes 'nearest', 'lower', 'higher', or 'midpoint' are encouraged to review the method they used. (Deprecated NumPy 1.22)\n", " pwl_calibration_input_keypoints=compute_quantiles(\n", "/tmpfs/tmp/ipykernel_67252/285458577.py:47: DeprecationWarning: the `interpolation=` argument to quantile was renamed to `method=`, which has additional options.\n", "Users of the modes 'nearest', 'lower', 'higher', or 'midpoint' are encouraged to review the method they used. (Deprecated NumPy 1.22)\n", " pwl_calibration_input_keypoints=compute_quantiles(\n" ] } ], "source": [ "# Feature configs are used to specify how each feature is calibrated and used.\n", "feature_configs = [\n", " tfl.configs.FeatureConfig(\n", " name='star_rating',\n", " lattice_size=2,\n", " monotonicity='increasing',\n", " pwl_calibration_num_keypoints=5,\n", " pwl_calibration_input_keypoints=compute_quantiles(\n", " flattened_features['star_rating'], num_keypoints=5),\n", " ),\n", " tfl.configs.FeatureConfig(\n", " name='word_count',\n", " lattice_size=2,\n", " monotonicity='increasing',\n", " pwl_calibration_num_keypoints=5,\n", " pwl_calibration_input_keypoints=compute_quantiles(\n", " flattened_features['word_count'], num_keypoints=5),\n", " ),\n", " tfl.configs.FeatureConfig(\n", " name='is_amazon',\n", " lattice_size=2,\n", " num_buckets=2,\n", " ),\n", " tfl.configs.FeatureConfig(\n", " name='includes_photo',\n", " lattice_size=2,\n", " num_buckets=2,\n", " ),\n", " tfl.configs.FeatureConfig(\n", " name='num_helpful',\n", " lattice_size=2,\n", " monotonicity='increasing',\n", " pwl_calibration_num_keypoints=5,\n", " pwl_calibration_input_keypoints=compute_quantiles(\n", " flattened_features['num_helpful'], num_keypoints=5),\n", " # Larger num_helpful indicating more trust in star_rating.\n", " reflects_trust_in=[\n", " tfl.configs.TrustConfig(\n", " feature_name=\"star_rating\", trust_type=\"trapezoid\"),\n", " ],\n", " ),\n", " tfl.configs.FeatureConfig(\n", " name='num_reviews',\n", " lattice_size=2,\n", " monotonicity='increasing',\n", " pwl_calibration_num_keypoints=5,\n", " pwl_calibration_input_keypoints=compute_quantiles(\n", " flattened_features['num_reviews'], num_keypoints=5),\n", " )\n", "]" ] }, { "cell_type": "markdown", "metadata": { "id": "9zoPJRBvPdcH" }, "source": [ "## Aggregate Function Model\n", "\n", "To construct a TFL premade model, first construct a model configuration from [tfl.configs](https://www.tensorflow.org/lattice/api_docs/python/tfl/configs). An aggregate function model is constructed using the [tfl.configs.AggregateFunctionConfig](https://www.tensorflow.org/lattice/api_docs/python/tfl/configs/AggregateFunctionConfig). It applies piecewise-linear and categorical calibration, followed by a lattice model on each dimension of the ragged input. It then applies an aggregation layer over the output for each dimension. This is then followed by an optional output piecewise-linear calibration." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:55.171373Z", "iopub.status.busy": "2024-07-30T11:22:55.170835Z", "iopub.status.idle": "2024-07-30T11:22:59.989231Z", "shell.execute_reply": "2024-07-30T11:22:59.988393Z" }, "id": "l_4J7EjSPiP3" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABLEAAAGrCAYAAAA/ygUOAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeVzU1f4/8NcMM+yryqZi7sslQMUN0RA33HAL5FpKVi5dUyGvphWVdX2UBmmkkppevZRfBb2uaSauGaKgGSqKuKQiigoIyjYsc35/9GOu4wzK4MCM+Ho+HvN46Pmczznvz8yZD3zefD7nSIQQAkREREREREREREZMaugAiIiIiIiIiIiInoZJLCIiIiIiIiIiMnpMYhERERERERERkdFjEouIiIiIiIiIiIye7PGCpKQkLFmyxBCxkBHw8fHB7NmzDR0GEREREREREZEajTuxMjMzsWXLFkPEQgZ2/PhxJCUlGToMIiIiIiIiIiINGndiVdm8eXN9xkFGIDg42NAhEBERERERERFpxTmxiIiIiIiIiIjI6DGJRURERERERERERo9JLCIiIiIiIiIiMnpMYhERERERERERkdFjEouIiIiIiIiIiIwek1hERERERERERGT0mMQiIiIiIiIiIiKjxyQWEREREREREREZPSaxiIiIiIiIiIjI6DGJRURERERERERERo9JLCIiIiIiIiIiMnpMYhERERERERERkdFjEouIiIiIiIiIiIyeXpJY1tbWkEgkaq+oqCh9NF3vGtKxEBERERERERE1FHpJYhUWFuL06dMAgFGjRkEIgTlz5uij6XrXkI6FiIiIiIiIiKiheCEfJ7S2tkafPn0MHQYREREREREREdXQC5nEIiIiIiIiIiKi5wuTWEREREREREREZPTqNIm1fft2tQnSr127hpCQENjb26Nx48YYMWIErly5oqofFRWlqtu8eXOkpKRgwIABsLGxgaWlJfz9/ZGYmKiqv3DhQlX9Rx8P3Lt3r6q8SZMmGu0XFRUhMTFRVUcmk9X6GCsqKhAXF4dBgwbBxcUFFhYW8PDwQHR0NJRKJQAgPz9fY7L4hQsXqvZ/tDwoKEjV9r179zBr1iy0bNkSpqamcHR0xNixY/HHH39U+x5fvHgR48aNQ+PGjVVlOTk5tT4+IiIiIiIiIiJjUKdJrNGjR0MIgVGjRgEAwsPDER4ejqysLMTFxeHgwYMYP368qv6cOXMghICXlxfy8/MRFhaGhQsXIjs7G7/++ivy8vLQv39/HDlyBAAQEREBIQSsrKzU+h0yZAiEEPD29lYrr2rfysoKvr6+EEJACIGKiopaH+PevXvx97//Hf3798eFCxeQmZmJqVOnYvbs2Zg3bx4AwN7eHkIIBAQEQCqV4vLly4iIiAAAyGQyCCHg4+ODDRs2YMuWLQCA27dvo3v37oiPj0dMTAzy8vJw+PBh5OXlwcfHB0lJSVrf42nTpmH69OnIzMzE8ePHYWJiUutjIyIiIiIiIiIyFvX6OOHkyZPh4+MDKysrDBw4EMOHD0dKSorWO4WKiooQExOjqt+tWzf8+OOPKCsrQ1hYWH2G/VT9+vXDBx98AAcHBzRp0gQzZ87Ea6+9hujoaDx48EBVb/bs2VAqlViyZIna/omJibhx4waCg4NVZR988AGuX7+OJUuWYNiwYbC2toa7uzs2bdoEIQRmzpypNZZ58+ahX79+sLS0RM+ePVFRUaF2NxoRERERERER0fOoXpNY3bt3V/u/m5sbAODWrVsada2srNC5c2e1Mg8PDzRt2hSpqam4fft23QWqgxEjRuDQoUMa5V5eXigvL0daWpqqbPDgwfDw8MD69euRm5urKo+MjMTMmTMhl8tVZdu3b4dUKsWIESPU2nVxcYG7uztOnTqFmzdvavTbo0cPfRwWEREREREREZFRqdcklp2dndr/TU1NAUA1d9Sj7O3ttbbh5OQEALh7966eo6udgoICfPLJJ/Dw8ICDg4NqHqq5c+cCAIqLi9Xqh4eHo7i4GDExMQCAjIwMHDx4EFOnTlXVUSgUKCgogFKphJ2dncZ8Wr///jsA4NKlSxrxPP5oJRERERERERFRQ2C0qxPm5uZCCKFRXpW8qkpmAYBUKkVZWZlG3fz8fK1tSyQSPUUJBAYG4l//+hemTJmCjIwMKJVKCCGwdOlSANA4htdffx3Ozs5Yvnw5FAoFvv76a7zxxhtwcHBQ1TEzM4O9vT1kMhnKy8tVc3c9/vL399fbcRARERERERERGTOjTWKVlpYiJSVFrezs2bO4desWvLy84Orqqip3dXVFVlaWWt3s7GzcuHFDa9uWlpZqSa8OHTpg9erVOsUnk8mQlpaGxMREuLi4YNasWXB0dFQlyEpKSrTuZ2ZmhunTp+Pu3bv4+uuvsWHDBq1zfI0dOxYVFRVqqzFWWbx4MVq0aPFME9ITERERERERET1PjDaJZWdnhw8//BBJSUkoKirCyZMnMWHCBJiamiI6Olqt7uDBg3Hr1i0sX74chYWFuHLlCsLCwtTu1npU165dkZGRgczMTCQlJeHq1avo27evzjGamJigX79+yM7ORmRkJHJyclBSUoJDhw5h5cqV1e43ffp0WFhYICIiAgMHDkTbtm016nz55Zdo06YN3nrrLfz8888oKChAXl4eVq1ahc8//xxRUVGQyWQ6x0xERERERERE9DzSSxLL2toaXbp0AQDs2LEDEokEUVFROH78OCQSCXbs2AEAqsQN8NcjfYsXLwYAdOnSRWMCc2trayxbtgyfffYZXF1d8corr8DBwQEHDx6En5+fWt2FCxdi8uTJ+OKLL+Dk5IRJkyZh7ty5cHFxQW5uLiQSCebPn6+q/80338DT0xOdOnVCSEgIoqOj0alTp2qPRdursrISABAXF4dp06Zh2bJlaNq0KVq1aoXY2Fi89tprAIBBgwahW7duavE2adIEEyZMgBACs2fP1vqeOjk5ITk5GaNHj8aMGTPg6OiIjh07YuvWrdixYwfGjRsHAFrfY30+LklEREREREREZAwk4rFJm+Lj4xESEqJ1Pqr60rlzZ+Tk5Ghdfa+hWLduHVasWIGTJ08aOhSV4OBgAMDmzZsNHAkRERERERERkTqjfZywoVu5cmW1d2EREREREREREZE6JrHqyZo1azBmzBgUFhZi5cqVuH//vuqRQCIiIiIiIiIiejKjSmJFRUVBIpEgNTUVWVlZkEgkqjm0GoLt27fDwcEB3333HTZt2sSJ2YmIiIiIiIiIasgo58Qiw+CcWERERERERERkrIzqTiwiIiIiIiIiIiJtmMQiIiIiIiIiIiKjxyQWEREREREREREZPSaxiIiIiIiIiIjI6DGJRURERERERERERo9JLCIiIiIiIiIiMnpMYhERERERERERkdFjEouIiIiIiIiIiIwek1hERERERERERGT0mMQiIiIiIiIiIiKjxyQWEREREREREREZPSaxiIiIiIiIiIjI6DGJRURERERERERERk9W3Ybg4OD6jINqKT8/H3Z2dpBIJBrbysvLUVlZCXNz8xq1dfz4cfTq1UvfIRIRERERERERPTONJJabmxuCgoIMEQvpqLKyEkePHoWZmRm6dOkCR0dH1baioiIcOHAAUqkUTZo0Qffu3WFiYvLE9nr16gUfH5+6DpuIiIiIiIiISGcSIYQwdBBUe1euXEFYWBh2796NESNGICYmBm5ubhBC4KuvvsKHH34IuVwOT09P7Ny5Ey4uLoYOmYiIiIiIiIhIZ5wT6znXpk0b/PTTT9i5cyfS0tLQqVMnLFiwAOXl5Zg3bx527doFc3NznDlzBt26dUN6erqhQyYiIiIiIiIi0hnvxGpASkpKsHjxYixevBgtWrTAt99+i4CAAPz5558IDAxERkYGrK2tceDAAXTp0sXQ4RIRERERERER1RjvxGpALCwssGDBAqSlpcHLywtDhgxBYGAgTExMcPz4cQwaNAgFBQXo06cPEhMTDR0uEREREREREVGNMYnVALVu3Rrx8fFISEjA5cuX0alTJ0RFRWHz5s2YNm0aSkpK0L9/fxw9etTQoRIRERERERER1QgfJ2zgysrK8N133yEiIgKurq749ttvce7cOcydOxdmZmY4duwYunbtaugwiYiIiIiIiIieiHdiNXCmpqYICwvDhQsX0KtXLwwdOhRHjhxBZGQkysrK4Ovri7S0NEOHSURERERERET0RLwT6wVz4MABzJw5E9evX8fgwYOxY8cOWFlZIT09Hc2aNTN0eEREREREREREWjGJ9QIqLy9HTEwMIiIiYG1tjTt37sDFxQVXr16Fubm5ocMjIiIiIiIiItLAxwlfQHK5HGFhYUhPT8egQYMghMDt27c5NxYRERERERERGS3eiUXYu3cvxo8fj/z8fPztb3/D6dOnYWpqauiwiIiIiIiIiIhUmMQiAIBCoYCnpycyMjLg7OyM+Ph4vPLKK4YOi4iIiIiIiIgIAB8npP/PzMwMFy5cgIuLC+7cuYN+/fohNDQU9+7dM3RoRERERERERERMYtH/SKVSnDhxAnK5HKampjh48CA6dOiA6OhoKJVKQ4dHRERERERERC8wJrFITYsWLbBhwwYoFArIZDK89dZb+Oc//wk/Pz+cO3fO0OERERERERER0QuKSSzSEBwcjPHjx+PGjRu4efMmTp48iYqKCnTt2hVhYWEoLCw0dIhERERERERE9IJhEou0WrNmDZo3b464uDicPHkSiYmJWLNmDX788Ud06tQJW7duNXSIRERERERERPQCYRKLtLK0tMTOnTthYmKC6dOn448//kBoaCjS0tLg7++PV199FYGBgbhx44ahQyUiIiIiIiKiFwCTWFStzp074/3334dSqURQUBCKi4vh4uKC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66+/hBBCjB07VixdulS53M7OTkilUpGeni6EEKJv377i999/L3P72iSxyoqpLBU5DrVNYj39jx4hNB+3T45T1t+IV+E8Xls+b5qSWJrO46ampmLUqFEiIiJClJSUVOnnjefyqj2XM4lFRFS7sdgD4fz58xg8eDD++ecfDBo0CLt27YJUWrV3moqnCrsfO3YMxcXFcHNzq9LtVMT58+dx7do1vPXWWyrtY8eOxa+//or169fj448/VraX1nB5uriwlZUV2rRpg0uXLqm0a9v/SV26dNHYXvoePT3luY2NDezt7REXF4e7d++iSZMmWm/fy8tL41Tqjo6O2Lx5My5dugQXF5cyYy6PX3/9FQAwcOBAlXYDAwP07t0bmzZtwv79+zF69GiV5Z07d1Z5bmtrC+BxfbX69etrFcO5c+fUZsusac8rvFtUVAQAuHHjBr788kvMnz8fXbt2BYAK3xY2ZMgQ7Nq1CwBw7949fPzxxwgLC0PLli0RHBys0leb46xfv35YsWIFJk6ciPfeew+dO3eGTCbDlStXyozl6fezcePGAFTfz4ocjyYmJujQoYNKm4ODAxo1aoT4+HgkJyejYcOGWu2fNrZv365V/+rw9Dn3SaXHVW5uLrZt24bNmzfD0tKyzPNNeT15bJWHp6cn9u/fj3379sHV1RUHDhzA7Nmzlcv79euHZcuWISIiAoMHD0Z0dHSl/2Y0atQIycnJytuyy6smzouGhobKz3cpTcftk8p6z16V8zig+89b6efpecuzs7Oxbds2bNq0CdbW1mrvtbZ4Lq/+czkREdVOTGK9woqKihAaGoqgoCCUlJTgww8/xNKlS6t1m6VJg0OHDsHBwQE2NjbVur3yWLduHR49egQTExONyy9duoTo6Gh06dIFBQUFePToEQwNDWFqaqrWt27duirPte3/NE0xFRQUICsrCwBUasw87dq1a7CystJ6+1lZWfj222/x66+/4u7du2pFanNzc58Z8/OUxm9oaAgzMzO15dbW1gAe19h42tP7q6+vDwAVKoi+YcMGfP3111qvV5U07b8mQgjlTJmnTp0CACxfvhzu7u5o3rx5hbffuHFjbNiwAbGxsVi0aBF8fHzg5OQEQLvjrEmTJli2bBlcXFzw008/oXfv3gCAHj16wN/fH0OHDtW47tPjlibPn3w/K3I8WlhYaNxegwYNkJSUhNTUVFhaWmq1f9rw9fXVqn91KP1sPE/pcZWRkaFMeK9Zs6bMmfuqUr9+/TB9+nTs378ffn5+MDQ0hJ2dnXK5p6cnli1bhv3798Pc3BxOTk5lnqfLq2fPnoiLi8P58+fRv3//cq9X3edFAMq6Vk978rh9OolV1uvxqpzHgdrxeSuv0oTWv//+i927dwN4PEtzZSe44bm8es7lRERUO7Gw+ysqPj4ezs7OmDt3LgBg0qRJ1ZrAevqqgEOHDim/HOlSUVERtmzZgsjISIjHt9eqPKZNmwYAWL9+PYDH/2E2MzNDfn4+srOz1cZLTU1Vea5t//IwMDCAhYUF5HI5ioqKNMYthIC7u3uFtj9o0CB88cUXmDBhAq5evQqFQgEhBL777jsA6u+ltlczGRgYwNzcHPn5+RqvJvr3338BoNoTnIsXLy7ztaupR0hISLli1dPTA/C4GPXixYsBAIGBgZVKYJUyNDTEV199BSEEZs6cqWzX5jgDHh8Ho0aNwsGDB5GZmYldu3ZBCIFhw4YhNDS0wvFpezwCj4tNa2ovPd4bNGig9f5pQ9fHlSjnrHqlfczMzDBq1CgEBQUBQI0ksIDHMyja2toiLi4OmzdvVrta1N3dHfr6+sqrtZ5eXhH+/v6Qy+XYsWPHM/t9+umnkEqlSExMBFCx41BbpT/En/bkcVter8p5HND9562sIv1PK03W1a9fH1OnTsX//vc/AKiyGZp5Lq/6czkREdVOTGK9YvLz8zFv3jx07txZ+cVr1KhR+OGHH6p1u6X/jZNKpUhNTcXFixdrRRJrz549qF+/Prp166Zx+bhx4wAAW7duVc4yVPrf+6enhk9JScHVq1fVxtC2f3kMGzYMxcXFGmfoCQ4ORtOmTZVXWGiz/ZKSEkRGRsLGxgZTp06FlZWV8sdNWbMsGRsbo7CwUPm8devWWL169TPjL/1v7h9//KHSXlBQgEOHDsHIyKhKfrC+yEp/8LRo0QKfffYZrl27hvj4eAQEBFT5tnx8fPDGG2/g0KFDiIiIULZrc5xZWFgof/Dr6emhb9++ylnJnn6fy6sixyPw+Dz39AyPFy5cQFJSEhwdHZVXs2izfy8LmUwGqVQKfX19DBkyBLt370Z6ejo2btwIBweHGo/H09MTQgh8//336Nevn8oyU1NTdO/eHUlJSdiwYUOlzglyuRyJiYlo1aoV5s6di9jY2DJnn71y5QpWrVoFX19ftGnTpsLHobays7PVbjHWdNw+D8/jtYeenh4kEglMTEzg6+uL3bt3Izk5GUuWLEGbNm2qfHs8l78653IioleaoFdGZGSkaNOmjahTp4549913hZ6enhg1apRyZqjqdOHCBQFAXLp0Sfz8889CLperFfGsrIoU4vTy8hLffPPNM/t06dJFABCbN28WQjyeNcvS0lJltr8LFy6Ifv36iddee02tULq2/YUou/hvqX///VfY2dmJ5s2bi71794rMzEyRnp4uVq5cKYyNjVWKfmu7/V69egkA4ptvvhFpaWkiNzdXHD58WDRt2lQAUJtlrF+/fsLc3Fzcvn1bnDx5UsjlcnH58uVn7svTs1o9fPhQZVar1atXl+v1CAwM1Fj49XlQSwu76+vrCwDC2tpaTJ06VcTGxmpcryLxP6/49R9//CEAiI4dOwqFQiGE0O44Mzc3Fz179hTx8fEiPz9f/Pvvv2LevHkCgFiwYIHKtrR5P7U9Hktneevdu/dzZ7TSZv/Ko7YUmhZCtbC7TCYTMplMyOVy5cyE2dnZautU5Wxp5bVjxw5l8etHjx6pLV+4cKEAIBo2bFip7ctkMpWZPmfOnCn09PREYGCguHLliigoKBB3794Va9euFQ0bNhSurq4qr1FFjkNtC7ubmJgIV1dXcerUqWcet88ap6Lxvojn8dryeXu6sPuTM4EOGDBAhIeHi4KCArX1quvzxnN55c/lLOxORFS76f6vP1W7nJwcERgYKGQymejXr59YvHixkMvl4sMPPxQlJSU1EsPp06cFAHHr1i0xadIk4ezsXOXb0OZLx507d1S+dD45jXupv//+W23mH2trayGEEFeuXBFvvvmmqFOnjjA2NhbdunUTx44dE25ubsLY2FhtrPL2j4qK0jjjkCbp6eli+vTponnz5kJPT09YWVkJDw8PtS+C2sablpYm/P39ha2trdDT0xPW1tZizJgxYubMmcp4npzpJzExUfTo0UOYmJgIW1tbsWzZMiGEEL/++qvafowcOVK53v3798W0adNEs2bNhJ6enjA3Nxeenp7i0KFDz3w9Zs+eLYQQau0DBw7U+DppUpuSWKXxW1paiilTpoiTJ08qf3iURdv4TUxM1F4vPz8/tX6urq7K5aUzlZX3ODt37pzw9/cXbdu2FcbGxsLS0lI4OzuL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378/HB0dKzVecXExFi9ejNatWyMqKgoHDhzAnj170KRJkyqKmIiIiIiIiIheVJydkCosNDQURkZGuHHjBn766adKjXXq1Cl88MEHSEhIwKefforPPvsMhoaGVRQpEREREREREb3oeCUWVUhGRgZWrlyJOnXqwNPTE927d6/QOJmZmQgICICrqyvMzc1x5swZzJ8/nwksIiIiIiIiIlLBK7GoQr788ktIpVLcvn0bYWFhFRpj+/btmDx5MiQSCdatW4dRo0ZBIpFUcaRERERERERE9DLglViktVu3bmHZsmUwNjaGj48PunbtqtX6165dg4eHB4YPHw5PT09cunQJo0ePZgKLiIiIiIiIiMrEJBZpLSgoCGZmZkhPT8eXX35Z7vXy8vIwb948ODg4IC0tDZGRkdi4cSPq1atXjdESERERERER0cuAtxOSVuLj47F161aYmZlh8uTJaNGiRbnWO3z4MCZNmoS7d+/if//7H2bMmAGZTFbN0RIRERERERHRy4JXYpFWPvnkE9SvXx9GRkaYM2fOc/snJSVh9OjR6N27N1q2bImEhAQEBgYygUVEREREREREWinzSqzw8PCajINqgbt376JJkyZlLt+/fz8iIiIglUqxZcsWWFhYlNm3uLgYy5Ytw+effw4rKyv8+eef6NevX3WETURERERERESvgDKTWH5+fjUZB9US3t7eGtvz8/MxefJkmJubo2vXrhg+fHiZY8TFxeGDDz7AuXPnMH36dMybNw+GhobVFTIRERERERERvQIkQgih6yCo9pszZw6++eYbyGQyXLhwAXZ2dmp9MjMzMXfuXCxduhQ9evTAihUr0LZtWx1ES0REREREREQvGxZ2p+e6cuUKvvnmG5SUlCA0NFRjAmv79u2YPHkypFIp1q9fj1GjRkEikeggWiIiIiIiIiJ6GbGwOz2TEAITJ06EVCqFu7s7Jk2apLL82rVr6Nu3L4YPHw5PT09cvHgRo0ePZgKLiIiIiIiIiKoUk1j0TOvWrcNff/0FfX19bNiwQZmcysvLw7x58+Dg4ID79+8jMjISGzduRL169XQcMRERERERERG9jFgTi8qUmpoKOzs7ZGdnIzw8HD4+PgCAP/74A1OmTEHq/7V3tzFVl38cxz8HDxhwGpCKwMLlcqUZISUUWQZ4U0tMcwLeUpmhshBGONKpQ6IaEyXSCFkb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", "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Model config defines the model structure for the aggregate function model.\n", "aggregate_function_model_config = tfl.configs.AggregateFunctionConfig(\n", " feature_configs=feature_configs,\n", " middle_dimension=MIDDLE_DIM,\n", " middle_lattice_size=MIDDLE_LATTICE_SIZE,\n", " middle_calibration=True,\n", " middle_calibration_num_keypoints=MIDDLE_KEYPOINTS,\n", " middle_monotonicity='increasing',\n", " output_min=min_label,\n", " output_max=max_label,\n", " output_calibration=True,\n", " output_calibration_num_keypoints=OUTPUT_KEYPOINTS,\n", " output_initialization=np.linspace(\n", " min_label, max_label, num=OUTPUT_KEYPOINTS))\n", "# An AggregateFunction premade model constructed from the given model config.\n", "aggregate_function_model = tfl.premade.AggregateFunction(\n", " aggregate_function_model_config)\n", "# Let's plot our model.\n", "keras.utils.plot_model(\n", " aggregate_function_model, show_layer_names=False, rankdir='LR')" ] }, { "cell_type": "markdown", "metadata": { "id": "4F7AwiXgWhe2" }, "source": [ "The output of each Aggregation layer is the averaged output of a calibrated lattice over the ragged inputs. Here is the model used inside the first Aggregation layer:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:22:59.993926Z", "iopub.status.busy": "2024-07-30T11:22:59.993307Z", "iopub.status.idle": "2024-07-30T11:23:00.084438Z", "shell.execute_reply": "2024-07-30T11:23:00.083602Z" }, "id": "UM7XF6UIWo4T" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aggregation_layers = [\n", " layer for layer in aggregate_function_model.layers\n", " if isinstance(layer, tfl.layers.Aggregation)\n", "]\n", "keras.utils.plot_model(\n", " aggregation_layers[0].model, show_layer_names=False, rankdir='LR')" ] }, { "cell_type": "markdown", "metadata": { "id": "0ohYOftgTZhq" }, "source": [ "Now, as with any other [keras.Model](https://www.tensorflow.org/api_docs/python/tf/keras/Model), we compile and fit the model to our data." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:23:00.089044Z", "iopub.status.busy": "2024-07-30T11:23:00.088264Z", "iopub.status.idle": "2024-07-30T11:23:21.286871Z", "shell.execute_reply": "2024-07-30T11:23:21.286174Z" }, "id": "uB9di3-lTfMy" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aggregate_function_model.compile(\n", " loss='mae',\n", " optimizer=keras.optimizers.Adam(LEARNING_RATE))\n", "aggregate_function_model.fit(\n", " train_xs, train_ys, epochs=NUM_EPOCHS, batch_size=BATCH_SIZE, verbose=False)" ] }, { "cell_type": "markdown", "metadata": { "id": "pwZtGDR-Tzur" }, "source": [ "After training our model, we can evaluate it on our test set." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2024-07-30T11:23:21.290783Z", "iopub.status.busy": "2024-07-30T11:23:21.290195Z", "iopub.status.idle": "2024-07-30T11:23:22.850932Z", "shell.execute_reply": "2024-07-30T11:23:22.850256Z" }, "id": "RWj1YfubT0NE" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test Set Evaluation...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 9s - loss: 110.6181" ] }, { "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\r", "7/7 [==============================] - 2s 3ms/step - loss: 50.3869\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "50.38688659667969\n" ] } ], "source": [ "print('Test Set Evaluation...')\n", "print(aggregate_function_model.evaluate(test_xs, test_ys))" ] } ], "metadata": { "colab": { "name": "aggregate_function_models.ipynb", "private_outputs": true, "provenance": [ { "file_id": "1ohMV9lhzSWZq3aH27fBAZ1Oj3wy19PI0", "timestamp": 1588637142053 } ], "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 }