{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "xLOXFOT5Q40E" }, "source": [ "##### Copyright 2020 The TensorFlow Authors." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "cellView": "form", "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:43:23.407129Z", "iopub.status.busy": "2025-01-10T12:43:23.406910Z", "iopub.status.idle": "2025-01-10T12:43:23.411001Z", "shell.execute_reply": "2025-01-10T12:43:23.410332Z" }, "id": "iiQkM5ZgQ8r2", "vscode": { "languageId": "python" } }, "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": { "colab_type": "text", "id": "uLeF5Nmdef0V" }, "source": [ "# Quantum Convolutional Neural Network" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "i9Jcnb8bQQyd" }, "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": { "colab_type": "text", "id": "4D3xaWBHOIVg" }, "source": [ "This tutorial implements a simplified Quantum Convolutional Neural Network (QCNN), a proposed quantum analogue to a classical convolutional neural network that is also *translationally invariant*.\n", "\n", "This example demonstrates how to detect certain properties of a quantum data source, such as a quantum sensor or a complex simulation from a device. The quantum data source being a cluster state that may or may not have an excitation—what the QCNN will learn to detect (The dataset used in the paper was SPT phase classification)." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "FnjolLuz8o5C" }, "source": [ "## Setup" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:43:23.413920Z", "iopub.status.busy": "2025-01-10T12:43:23.413699Z", "iopub.status.idle": "2025-01-10T12:43:46.637131Z", "shell.execute_reply": "2025-01-10T12:43:46.636199Z" }, "id": "Aquwcz-0aHqz", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting tensorflow==2.15.0\r\n", " Using cached tensorflow-2.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.4 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.15.0) (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==2.15.0) (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.15.0) (24.12.23)\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.15.0) (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==2.15.0) (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.15.0) (3.12.1)\r\n", "Requirement already satisfied: libclang>=13.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow==2.15.0) (18.1.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting ml-dtypes~=0.2.0 (from tensorflow==2.15.0)\r\n", " Using cached ml_dtypes-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (20 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting numpy<2.0.0,>=1.23.5 (from tensorflow==2.15.0)\r\n", " Using cached numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\r\n", "Requirement already satisfied: opt-einsum>=2.3.2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow==2.15.0) (3.4.0)\r\n", "Requirement already satisfied: packaging in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow==2.15.0) (24.2)\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==2.15.0) (3.20.3)\r\n", "Requirement already satisfied: setuptools in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow==2.15.0) (75.8.0)\r\n", "Requirement already satisfied: six>=1.12.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow==2.15.0) (1.17.0)\r\n", "Requirement already satisfied: termcolor>=1.1.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow==2.15.0) (2.5.0)\r\n", "Requirement already satisfied: typing-extensions>=3.6.6 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow==2.15.0) (4.12.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting wrapt<1.15,>=1.11.0 (from tensorflow==2.15.0)\r\n", " Using cached wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB)\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.15.0) (0.37.1)\r\n", "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorflow==2.15.0) (1.69.0)\r\n", "Collecting tensorboard<2.16,>=2.15 (from tensorflow==2.15.0)\r\n", " Using cached tensorboard-2.15.2-py3-none-any.whl.metadata (1.7 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting tensorflow-estimator<2.16,>=2.15.0 (from tensorflow==2.15.0)\r\n", " Using cached tensorflow_estimator-2.15.0-py2.py3-none-any.whl.metadata (1.3 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting keras<2.16,>=2.15.0 (from tensorflow==2.15.0)\r\n", " Using cached keras-2.15.0-py3-none-any.whl.metadata (2.4 kB)\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.15.0) (0.43.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting google-auth<3,>=1.6.3 (from tensorboard<2.16,>=2.15->tensorflow==2.15.0)\r\n", " Using cached google_auth-2.37.0-py2.py3-none-any.whl.metadata (4.8 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting google-auth-oauthlib<2,>=0.5 (from tensorboard<2.16,>=2.15->tensorflow==2.15.0)\r\n", " Using cached google_auth_oauthlib-1.2.1-py2.py3-none-any.whl.metadata (2.7 kB)\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.15.0) (3.7)\r\n", "Requirement already satisfied: requests<3,>=2.21.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from tensorboard<2.16,>=2.15->tensorflow==2.15.0) (2.32.3)\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.15.0) (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.15.0) (3.1.3)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow==2.15.0) (5.5.0)\r\n", "Collecting pyasn1-modules>=0.2.1 (from google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow==2.15.0)\r\n", " Using cached pyasn1_modules-0.4.1-py3-none-any.whl.metadata (3.5 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting rsa<5,>=3.1.4 (from google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow==2.15.0)\r\n", " Using cached rsa-4.9-py3-none-any.whl.metadata (4.2 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting requests-oauthlib>=0.7.0 (from google-auth-oauthlib<2,>=0.5->tensorboard<2.16,>=2.15->tensorflow==2.15.0)\r\n", " Using cached requests_oauthlib-2.0.0-py2.py3-none-any.whl.metadata (11 kB)\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.16,>=2.15->tensorflow==2.15.0) (8.5.0)\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->tensorboard<2.16,>=2.15->tensorflow==2.15.0) (3.4.1)\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->tensorboard<2.16,>=2.15->tensorflow==2.15.0) (3.10)\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->tensorboard<2.16,>=2.15->tensorflow==2.15.0) (2.3.0)\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->tensorboard<2.16,>=2.15->tensorflow==2.15.0) (2024.12.14)\r\n", "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.15.0) (3.0.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: zipp>=3.20 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.15.0) (3.21.0)\r\n", "Collecting pyasn1<0.7.0,>=0.4.6 (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow==2.15.0)\r\n", " Using cached pyasn1-0.6.1-py3-none-any.whl.metadata (8.4 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting oauthlib>=3.0.0 (from requests-oauthlib>=0.7.0->google-auth-oauthlib<2,>=0.5->tensorboard<2.16,>=2.15->tensorflow==2.15.0)\r\n", " Using cached oauthlib-3.2.2-py3-none-any.whl.metadata (7.5 kB)\r\n", "Using cached tensorflow-2.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (475.2 MB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using cached keras-2.15.0-py3-none-any.whl (1.7 MB)\r\n", "Using cached ml_dtypes-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB)\r\n", "Using cached numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using cached tensorboard-2.15.2-py3-none-any.whl (5.5 MB)\r\n", "Using cached tensorflow_estimator-2.15.0-py2.py3-none-any.whl (441 kB)\r\n", "Using cached wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (77 kB)\r\n", "Using cached google_auth-2.37.0-py2.py3-none-any.whl (209 kB)\r\n", "Using cached google_auth_oauthlib-1.2.1-py2.py3-none-any.whl (24 kB)\r\n", "Using cached pyasn1_modules-0.4.1-py3-none-any.whl (181 kB)\r\n", "Using cached requests_oauthlib-2.0.0-py2.py3-none-any.whl (24 kB)\r\n", "Using cached rsa-4.9-py3-none-any.whl (34 kB)\r\n", "Using cached oauthlib-3.2.2-py3-none-any.whl (151 kB)\r\n", "Using cached pyasn1-0.6.1-py3-none-any.whl (83 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Installing collected packages: wrapt, tensorflow-estimator, pyasn1, oauthlib, numpy, keras, rsa, requests-oauthlib, pyasn1-modules, ml-dtypes, google-auth, google-auth-oauthlib, tensorboard, tensorflow\r\n", " Attempting uninstall: wrapt\r\n", " Found existing installation: wrapt 1.17.0\r\n", " Uninstalling wrapt-1.17.0:\r\n", " Successfully uninstalled wrapt-1.17.0\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Attempting uninstall: numpy\r\n", " Found existing installation: numpy 2.0.2\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Uninstalling numpy-2.0.2:\r\n", " Successfully uninstalled numpy-2.0.2\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Attempting uninstall: keras\r\n", " Found existing installation: keras 3.8.0\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Uninstalling keras-3.8.0:\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Successfully uninstalled keras-3.8.0\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Attempting uninstall: ml-dtypes\r\n", " Found existing installation: ml-dtypes 0.4.1\r\n", " Uninstalling ml-dtypes-0.4.1:\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Successfully uninstalled ml-dtypes-0.4.1\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Attempting uninstall: tensorboard\r\n", " Found existing installation: tensorboard 2.18.0\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Uninstalling tensorboard-2.18.0:\r\n", " Successfully uninstalled tensorboard-2.18.0\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Attempting uninstall: tensorflow\r\n", " Found existing installation: tensorflow 2.18.0\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Uninstalling tensorflow-2.18.0:\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Successfully uninstalled tensorflow-2.18.0\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\r\n", "tf-keras 2.18.0 requires tensorflow<2.19,>=2.18, but you have tensorflow 2.15.0 which is incompatible.\u001b[0m\u001b[31m\r\n", "\u001b[0mSuccessfully installed google-auth-2.37.0 google-auth-oauthlib-1.2.1 keras-2.15.0 ml-dtypes-0.2.0 numpy-1.26.4 oauthlib-3.2.2 pyasn1-0.6.1 pyasn1-modules-0.4.1 requests-oauthlib-2.0.0 rsa-4.9 tensorboard-2.15.2 tensorflow-2.15.0 tensorflow-estimator-2.15.0 wrapt-1.14.1\r\n" ] } ], "source": [ "!pip install tensorflow==2.15.0" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "e_ZuLN_N8yhT" }, "source": [ "Install TensorFlow Quantum:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:43:46.640791Z", "iopub.status.busy": "2025-01-10T12:43:46.640528Z", "iopub.status.idle": "2025-01-10T12:43:56.343595Z", "shell.execute_reply": "2025-01-10T12:43:56.342608Z" }, "id": "3Pl5PW-ACO9J", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting tensorflow-quantum==0.7.3\r\n", " Using cached tensorflow_quantum-0.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.7 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting cirq-core==1.3.0 (from tensorflow-quantum==0.7.3)\r\n", " Using cached cirq_core-1.3.0-py3-none-any.whl.metadata (1.9 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting cirq-google==1.3.0 (from tensorflow-quantum==0.7.3)\r\n", " Using cached cirq_google-1.3.0-py3-none-any.whl.metadata (2.0 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting sympy==1.12 (from tensorflow-quantum==0.7.3)\r\n", " Using cached sympy-1.12-py3-none-any.whl.metadata (12 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting duet~=0.2.8 (from cirq-core==1.3.0->tensorflow-quantum==0.7.3)\r\n", " Using cached duet-0.2.9-py3-none-any.whl.metadata (2.3 kB)\r\n", "Requirement already satisfied: matplotlib~=3.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from cirq-core==1.3.0->tensorflow-quantum==0.7.3) (3.9.4)\r\n", "Requirement already satisfied: networkx>=2.4 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from cirq-core==1.3.0->tensorflow-quantum==0.7.3) (3.2.1)\r\n", "Requirement already satisfied: numpy~=1.16 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from cirq-core==1.3.0->tensorflow-quantum==0.7.3) (1.26.4)\r\n", "Requirement already satisfied: pandas in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from cirq-core==1.3.0->tensorflow-quantum==0.7.3) (2.2.3)\r\n", "Collecting sortedcontainers~=2.0 (from cirq-core==1.3.0->tensorflow-quantum==0.7.3)\r\n", " Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl.metadata (10 kB)\r\n", "Requirement already satisfied: scipy in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from cirq-core==1.3.0->tensorflow-quantum==0.7.3) (1.13.1)\r\n", "Requirement already satisfied: typing-extensions>=4.2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from cirq-core==1.3.0->tensorflow-quantum==0.7.3) (4.12.2)\r\n", "Requirement already satisfied: tqdm in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from cirq-core==1.3.0->tensorflow-quantum==0.7.3) (4.67.1)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting google-api-core>=1.14.0 (from google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3)\r\n", " Using cached google_api_core-2.24.0-py3-none-any.whl.metadata (3.0 kB)\r\n", "Collecting proto-plus>=1.20.0 (from cirq-google==1.3.0->tensorflow-quantum==0.7.3)\r\n", " Using cached proto_plus-1.25.0-py3-none-any.whl.metadata (2.2 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: protobuf>=3.15.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from cirq-google==1.3.0->tensorflow-quantum==0.7.3) (3.20.3)\r\n", "Collecting mpmath>=0.19 (from sympy==1.12->tensorflow-quantum==0.7.3)\r\n", " Using cached mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting googleapis-common-protos<2.0.dev0,>=1.56.2 (from google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3)\r\n", " Using cached googleapis_common_protos-1.66.0-py2.py3-none-any.whl.metadata (1.5 kB)\r\n", "Requirement already satisfied: google-auth<3.0.dev0,>=2.14.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (2.37.0)\r\n", "Requirement already satisfied: requests<3.0.0.dev0,>=2.18.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (2.32.3)\r\n", "Requirement already satisfied: grpcio<2.0dev,>=1.33.2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (1.69.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting grpcio-status<2.0.dev0,>=1.33.2 (from google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3)\r\n", " Using cached grpcio_status-1.69.0-py3-none-any.whl.metadata (1.1 kB)\r\n", "Requirement already satisfied: contourpy>=1.0.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (1.3.0)\r\n", "Requirement already satisfied: cycler>=0.10 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (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~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (4.55.3)\r\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (1.4.7)\r\n", "Requirement already satisfied: packaging>=20.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (24.2)\r\n", "Requirement already satisfied: pillow>=8 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (11.1.0)\r\n", "Requirement already satisfied: pyparsing>=2.3.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (3.2.1)\r\n", "Requirement already satisfied: python-dateutil>=2.7 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from matplotlib~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (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~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (6.5.2)\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->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (2024.2)\r\n", "Requirement already satisfied: tzdata>=2022.7 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from pandas->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (2024.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-auth<3.0.dev0,>=2.14.1->google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (5.5.0)\r\n", "Requirement already satisfied: pyasn1-modules>=0.2.1 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from google-auth<3.0.dev0,>=2.14.1->google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (0.4.1)\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.0.dev0,>=2.14.1->google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (4.9)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collecting protobuf>=3.15.0 (from cirq-google==1.3.0->tensorflow-quantum==0.7.3)\r\n", " Using cached protobuf-5.29.3-cp38-abi3-manylinux2014_x86_64.whl.metadata (592 bytes)\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~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (3.21.0)\r\n", "Requirement already satisfied: six>=1.5 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from python-dateutil>=2.7->matplotlib~=3.0->cirq-core==1.3.0->tensorflow-quantum==0.7.3) (1.17.0)\r\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from requests<3.0.0.dev0,>=2.18.0->google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (3.4.1)\r\n", "Requirement already satisfied: idna<4,>=2.5 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from requests<3.0.0.dev0,>=2.18.0->google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (3.10)\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.dev0,>=2.18.0->google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (2.3.0)\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.dev0,>=2.18.0->google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (2024.12.14)\r\n", "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /tmpfs/src/tf_docs_env/lib/python3.9/site-packages (from pyasn1-modules>=0.2.1->google-auth<3.0.dev0,>=2.14.1->google-api-core>=1.14.0->google-api-core[grpc]>=1.14.0->cirq-google==1.3.0->tensorflow-quantum==0.7.3) (0.6.1)\r\n", "Using cached tensorflow_quantum-0.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.8 MB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Using cached cirq_core-1.3.0-py3-none-any.whl (1.8 MB)\r\n", "Using cached cirq_google-1.3.0-py3-none-any.whl (598 kB)\r\n", "Using cached sympy-1.12-py3-none-any.whl (5.7 MB)\r\n", "Using cached duet-0.2.9-py3-none-any.whl (29 kB)\r\n", "Using cached google_api_core-2.24.0-py3-none-any.whl (158 kB)\r\n", "Using cached mpmath-1.3.0-py3-none-any.whl (536 kB)\r\n", "Using cached proto_plus-1.25.0-py3-none-any.whl (50 kB)\r\n", "Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)\r\n", "Using cached googleapis_common_protos-1.66.0-py2.py3-none-any.whl (221 kB)\r\n", "Using cached grpcio_status-1.69.0-py3-none-any.whl (14 kB)\r\n", "Using cached protobuf-5.29.3-cp38-abi3-manylinux2014_x86_64.whl (319 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Installing collected packages: sortedcontainers, mpmath, sympy, protobuf, duet, proto-plus, googleapis-common-protos, grpcio-status, google-api-core, cirq-core, cirq-google, tensorflow-quantum\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Attempting uninstall: protobuf\r\n", " Found existing installation: protobuf 3.20.3\r\n", " Uninstalling protobuf-3.20.3:\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Successfully uninstalled protobuf-3.20.3\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\r\n", "tensorflow 2.15.0 requires 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, but you have protobuf 5.29.3 which is incompatible.\r\n", "tensorflow-metadata 1.16.1 requires protobuf<4.21,>=3.20.3; python_version < \"3.11\", but you have protobuf 5.29.3 which is incompatible.\r\n", "tf-keras 2.18.0 requires tensorflow<2.19,>=2.18, but you have tensorflow 2.15.0 which is incompatible.\u001b[0m\u001b[31m\r\n", "\u001b[0mSuccessfully installed cirq-core-1.3.0 cirq-google-1.3.0 duet-0.2.9 google-api-core-2.24.0 googleapis-common-protos-1.66.0 grpcio-status-1.69.0 mpmath-1.3.0 proto-plus-1.25.0 protobuf-5.29.3 sortedcontainers-2.4.0 sympy-1.12 tensorflow-quantum-0.7.3\r\n" ] } ], "source": [ "!pip install tensorflow-quantum==0.7.3" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:43:56.347067Z", "iopub.status.busy": "2025-01-10T12:43:56.346800Z", "iopub.status.idle": "2025-01-10T12:43:56.440976Z", "shell.execute_reply": "2025-01-10T12:43:56.440397Z" }, "id": "4Ql5PW-ACO0J", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmpfs/tmp/ipykernel_33006/2730622109.py:2: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html\n", " import importlib, pkg_resources\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Update package resources to account for version changes.\n", "import importlib, pkg_resources\n", "\n", "importlib.reload(pkg_resources)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "TL_LvHXzPNjW" }, "source": [ "Now import TensorFlow and the module dependencies:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:43:56.443998Z", "iopub.status.busy": "2025-01-10T12:43:56.443299Z", "iopub.status.idle": "2025-01-10T12:44:00.012913Z", "shell.execute_reply": "2025-01-10T12:44:00.012124Z" }, "id": "QytLEAtoejW5", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2025-01-10 12:43:56.895591: 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", "2025-01-10 12:43:56.895636: 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", "2025-01-10 12:43:56.897203: 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": "stderr", "output_type": "stream", "text": [ "2025-01-10 12:43:59.923405: E external/local_xla/xla/stream_executor/cuda/cuda_driver.cc:274] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected\n" ] } ], "source": [ "import tensorflow as tf\n", "import tensorflow_quantum as tfq\n", "\n", "import cirq\n", "import sympy\n", "import numpy as np\n", "\n", "# visualization tools\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "from cirq.contrib.svg import SVGCircuit" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "j6331ZSsQGY3" }, "source": [ "## 1. Build a QCNN" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Qg85u3G--CGq" }, "source": [ "### 1.1 Assemble circuits in a TensorFlow graph\n", "\n", "TensorFlow Quantum (TFQ) provides layer classes designed for in-graph circuit construction. One example is the `tfq.layers.AddCircuit` layer that inherits from `tf.keras.Layer`. This layer can either prepend or append to the input batch of circuits, as shown in the following figure.\n", "\n", "\n", "\n", "The following snippet uses this layer:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.017204Z", "iopub.status.busy": "2025-01-10T12:44:00.015996Z", "iopub.status.idle": "2025-01-10T12:44:00.038628Z", "shell.execute_reply": "2025-01-10T12:44:00.038108Z" }, "id": "FhNf0G_OPLqZ", "vscode": { "languageId": "python" } }, "outputs": [], "source": [ "qubit = cirq.GridQubit(0, 0)\n", "\n", "# Define some circuits.\n", "circuit1 = cirq.Circuit(cirq.X(qubit))\n", "circuit2 = cirq.Circuit(cirq.H(qubit))\n", "\n", "# Convert to a tensor.\n", "input_circuit_tensor = tfq.convert_to_tensor([circuit1, circuit2])\n", "\n", "# Define a circuit that we want to append\n", "y_circuit = cirq.Circuit(cirq.Y(qubit))\n", "\n", "# Instantiate our layer\n", "y_appender = tfq.layers.AddCircuit()\n", "\n", "# Run our circuit tensor through the layer and save the output.\n", "output_circuit_tensor = y_appender(input_circuit_tensor, append=y_circuit)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ShZbRZCXkvk5" }, "source": [ "Examine the input tensor:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.041513Z", "iopub.status.busy": "2025-01-10T12:44:00.041123Z", "iopub.status.idle": "2025-01-10T12:44:00.045973Z", "shell.execute_reply": "2025-01-10T12:44:00.045404Z" }, "id": "ImRynsUN4BSG", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[cirq.Circuit([\n", " cirq.Moment(\n", " cirq.X(cirq.GridQubit(0, 0)),\n", " ),\n", " ])\n", " cirq.Circuit([\n", " cirq.Moment(\n", " cirq.H(cirq.GridQubit(0, 0)),\n", " ),\n", " ]) ]\n" ] } ], "source": [ "print(tfq.from_tensor(input_circuit_tensor))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "xkGU4ZTUk4gf" }, "source": [ "And examine the output tensor:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.048672Z", "iopub.status.busy": "2025-01-10T12:44:00.048186Z", "iopub.status.idle": "2025-01-10T12:44:00.051984Z", "shell.execute_reply": "2025-01-10T12:44:00.051491Z" }, "id": "tfff6dJp39Fg", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[cirq.Circuit([\n", " cirq.Moment(\n", " cirq.X(cirq.GridQubit(0, 0)),\n", " ),\n", " cirq.Moment(\n", " cirq.Y(cirq.GridQubit(0, 0)),\n", " ),\n", " ])\n", " cirq.Circuit([\n", " cirq.Moment(\n", " cirq.H(cirq.GridQubit(0, 0)),\n", " ),\n", " cirq.Moment(\n", " cirq.Y(cirq.GridQubit(0, 0)),\n", " ),\n", " ]) ]\n" ] } ], "source": [ "print(tfq.from_tensor(output_circuit_tensor))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "23JeZ7Ns5qy5" }, "source": [ "While it is possible to run the examples below without using `tfq.layers.AddCircuit`, it's a good opportunity to understand how complex functionality can be embedded into TensorFlow compute graphs." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "GcVplt9455Hi" }, "source": [ "### 1.2 Problem overview\n", "\n", "You will prepare a *cluster state* and train a quantum classifier to detect if it is \"excited\" or not. The cluster state is highly entangled but not necessarily difficult for a classical computer. For clarity, this is a simpler dataset than the one used in the paper.\n", "\n", "For this classification task you will implement a deep MERA-like QCNN architecture since:\n", "\n", "1. Like the QCNN, the cluster state on a ring is translationally invariant.\n", "2. The cluster state is highly entangled.\n", "\n", "This architecture should be effective at reducing entanglement, obtaining the classification by reading out a single qubit.\n", "\n", "\n", "\n", "An \"excited\" cluster state is defined as a cluster state that had a `cirq.rx` gate applied to any of its qubits. Qconv and QPool are discussed later in this tutorial." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "jpqtsGJH_I1d" }, "source": [ "### 1.3 Building blocks for TensorFlow\n", "\n", "\n", "\n", "One way to solve this problem with TensorFlow Quantum is to implement the following:\n", "\n", "1. The input to the model is a circuit tensor—either an empty circuit or an X gate on a particular qubit indicating an excitation.\n", "2. The rest of the model's quantum components are constructed with `tfq.layers.AddCircuit` layers.\n", "3. For inference a `tfq.layers.PQC` layer is used. This reads $\\langle \\hat{Z} \\rangle$ and compares it to a label of 1 for an excited state, or -1 for a non-excited state." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "oa7Q3m_ThDgO" }, "source": [ "### 1.4 Data\n", "Before building your model, you can generate your data. In this case it's going to be excitations to the cluster state (The original paper uses a more complicated dataset). Excitations are represented with `cirq.rx` gates. A large enough rotation is deemed an excitation and is labeled `1` and a rotation that isn't large enough is labeled `-1` and deemed not an excitation." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.054990Z", "iopub.status.busy": "2025-01-10T12:44:00.054551Z", "iopub.status.idle": "2025-01-10T12:44:00.060389Z", "shell.execute_reply": "2025-01-10T12:44:00.059812Z" }, "id": "iUrvTCU1hDgP", "vscode": { "languageId": "python" } }, "outputs": [], "source": [ "def generate_data(qubits):\n", " \"\"\"Generate training and testing data.\"\"\"\n", " n_rounds = 20 # Produces n_rounds * n_qubits datapoints.\n", " excitations = []\n", " labels = []\n", " for n in range(n_rounds):\n", " for bit in qubits:\n", " rng = np.random.uniform(-np.pi, np.pi)\n", " excitations.append(cirq.Circuit(cirq.rx(rng)(bit)))\n", " labels.append(1 if (-np.pi / 2) <= rng <= (np.pi / 2) else -1)\n", "\n", " split_ind = int(len(excitations) * 0.7)\n", " train_excitations = excitations[:split_ind]\n", " test_excitations = excitations[split_ind:]\n", "\n", " train_labels = labels[:split_ind]\n", " test_labels = labels[split_ind:]\n", "\n", " return tfq.convert_to_tensor(train_excitations), np.array(train_labels), \\\n", " tfq.convert_to_tensor(test_excitations), np.array(test_labels)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "wGsDkZnrhDgS" }, "source": [ "You can see that just like with regular machine learning you create a training and testing set to use to benchmark the model. You can quickly look at some datapoints with:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.063194Z", "iopub.status.busy": "2025-01-10T12:44:00.062664Z", "iopub.status.idle": "2025-01-10T12:44:00.094801Z", "shell.execute_reply": "2025-01-10T12:44:00.094112Z" }, "id": "eLJ-JHOihDgT", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Input: (0, 0): ───X^-0.701─── Output: -1\n", "Input: (0, 1): ───X^-0.073─── Output: 1\n" ] } ], "source": [ "sample_points, sample_labels, _, __ = generate_data(cirq.GridQubit.rect(1, 4))\n", "print('Input:', tfq.from_tensor(sample_points)[0], 'Output:', sample_labels[0])\n", "print('Input:', tfq.from_tensor(sample_points)[1], 'Output:', sample_labels[1])" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "sFiRlDt_0-DL" }, "source": [ "### 1.5 Define layers\n", "\n", "Now define the layers shown in the figure above in TensorFlow." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "s2B9geIqLWHK" }, "source": [ "#### 1.5.1 Cluster state\n", "\n", "The first step is to define the cluster state using Cirq, a Google-provided framework for programming quantum circuits. Since this is a static part of the model, embed it using the `tfq.layers.AddCircuit` functionality." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.097830Z", "iopub.status.busy": "2025-01-10T12:44:00.097402Z", "iopub.status.idle": "2025-01-10T12:44:00.101379Z", "shell.execute_reply": "2025-01-10T12:44:00.100797Z" }, "id": "qpQwVWKazU8g", "vscode": { "languageId": "python" } }, "outputs": [], "source": [ "def cluster_state_circuit(bits):\n", " \"\"\"Return a cluster state on the qubits in `bits`.\"\"\"\n", " circuit = cirq.Circuit()\n", " circuit.append(cirq.H.on_each(bits))\n", " for this_bit, next_bit in zip(bits, bits[1:] + [bits[0]]):\n", " circuit.append(cirq.CZ(this_bit, next_bit))\n", " return circuit" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "e9qX1uN740vJ" }, "source": [ "Display a cluster state circuit for a rectangle of cirq.GridQubits:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.104136Z", "iopub.status.busy": "2025-01-10T12:44:00.103740Z", "iopub.status.idle": "2025-01-10T12:44:00.271967Z", "shell.execute_reply": "2025-01-10T12:44:00.271389Z" }, "id": "9tZt0aAO4r4F", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "data": { "image/svg+xml": [ "(0, 0): (0, 1): (0, 2): (0, 3): HHHH" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SVGCircuit(cluster_state_circuit(cirq.GridQubit.rect(1, 4)))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "4xElWnRf1ZC7" }, "source": [ "#### 1.5.2 QCNN layers\n", "\n", "Define the layers that make up the model using the Cong and Lukin QCNN paper. There are a few prerequisites:\n", "\n", "* The one- and two-qubit parameterized unitary matrices from the Tucci paper.\n", "* A general parameterized two-qubit pooling operation." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.274716Z", "iopub.status.busy": "2025-01-10T12:44:00.274187Z", "iopub.status.idle": "2025-01-10T12:44:00.281129Z", "shell.execute_reply": "2025-01-10T12:44:00.280554Z" }, "id": "oNRGOqky2exY", "vscode": { "languageId": "python" } }, "outputs": [], "source": [ "def one_qubit_unitary(bit, symbols):\n", " \"\"\"Make a Cirq circuit enacting a rotation of the bloch sphere about the X,\n", " Y and Z axis, that depends on the values in `symbols`.\n", " \"\"\"\n", " return cirq.Circuit(\n", " cirq.X(bit)**symbols[0],\n", " cirq.Y(bit)**symbols[1],\n", " cirq.Z(bit)**symbols[2])\n", "\n", "\n", "def two_qubit_unitary(bits, symbols):\n", " \"\"\"Make a Cirq circuit that creates an arbitrary two qubit unitary.\"\"\"\n", " circuit = cirq.Circuit()\n", " circuit += one_qubit_unitary(bits[0], symbols[0:3])\n", " circuit += one_qubit_unitary(bits[1], symbols[3:6])\n", " circuit += [cirq.ZZ(*bits)**symbols[6]]\n", " circuit += [cirq.YY(*bits)**symbols[7]]\n", " circuit += [cirq.XX(*bits)**symbols[8]]\n", " circuit += one_qubit_unitary(bits[0], symbols[9:12])\n", " circuit += one_qubit_unitary(bits[1], symbols[12:])\n", " return circuit\n", "\n", "\n", "def two_qubit_pool(source_qubit, sink_qubit, symbols):\n", " \"\"\"Make a Cirq circuit to do a parameterized 'pooling' operation, which\n", " attempts to reduce entanglement down from two qubits to just one.\"\"\"\n", " pool_circuit = cirq.Circuit()\n", " sink_basis_selector = one_qubit_unitary(sink_qubit, symbols[0:3])\n", " source_basis_selector = one_qubit_unitary(source_qubit, symbols[3:6])\n", " pool_circuit.append(sink_basis_selector)\n", " pool_circuit.append(source_basis_selector)\n", " pool_circuit.append(cirq.CNOT(source_qubit, sink_qubit))\n", " pool_circuit.append(sink_basis_selector**-1)\n", " return pool_circuit" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "LoG0a3U_2qGA" }, "source": [ "To see what you created, print out the one-qubit unitary circuit:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.284008Z", "iopub.status.busy": "2025-01-10T12:44:00.283427Z", "iopub.status.idle": "2025-01-10T12:44:00.316600Z", "shell.execute_reply": "2025-01-10T12:44:00.315979Z" }, "id": "T5uhvF-g2rpZ", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "data": { "image/svg+xml": [ "(0, 0): X^x0Y^x1Z^x2" ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SVGCircuit(one_qubit_unitary(cirq.GridQubit(0, 0), sympy.symbols('x0:3')))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "NWuMb_Us8ar2" }, "source": [ "And the two-qubit unitary circuit:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.319522Z", "iopub.status.busy": "2025-01-10T12:44:00.319085Z", "iopub.status.idle": "2025-01-10T12:44:00.433597Z", "shell.execute_reply": "2025-01-10T12:44:00.433019Z" }, "id": "aJTdRrfS2uIo", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "data": { "image/svg+xml": [ "(0, 0): (0, 1): X^x0Y^x1Z^x2X^x3Y^x4Z^x5ZZZZ^x6YYYY^x7XXXX^x8X^x9Y^x10Z^x11X^x12Y^x13Z^x14" ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SVGCircuit(two_qubit_unitary(cirq.GridQubit.rect(1, 2), sympy.symbols('x0:15')))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "EXQD1R_V8jyk" }, "source": [ "And the two-qubit pooling circuit:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.436045Z", "iopub.status.busy": "2025-01-10T12:44:00.435802Z", "iopub.status.idle": "2025-01-10T12:44:00.535084Z", "shell.execute_reply": "2025-01-10T12:44:00.534479Z" }, "id": "DOHRbkvH2xGK", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "data": { "image/svg+xml": [ "(0, 0): (0, 1): X^x0Y^x1Z^x2X^x3Y^x4Z^x5XZ^(-x2)Y^(-x1)X^(-x0)" ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SVGCircuit(two_qubit_pool(*cirq.GridQubit.rect(1, 2), sympy.symbols('x0:6')))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "AzVauXWD3v8C" }, "source": [ "##### 1.5.2.1 Quantum convolution\n", "\n", "As in the Cong and Lukin paper, define the 1D quantum convolution as the application of a two-qubit parameterized unitary to every pair of adjacent qubits with a stride of one." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.537582Z", "iopub.status.busy": "2025-01-10T12:44:00.537370Z", "iopub.status.idle": "2025-01-10T12:44:00.541748Z", "shell.execute_reply": "2025-01-10T12:44:00.541197Z" }, "id": "1Fa19Lzb3wnR", "vscode": { "languageId": "python" } }, "outputs": [], "source": [ "def quantum_conv_circuit(bits, symbols):\n", " \"\"\"Quantum Convolution Layer following the above diagram.\n", " Return a Cirq circuit with the cascade of `two_qubit_unitary` applied\n", " to all pairs of qubits in `bits` as in the diagram above.\n", " \"\"\"\n", " circuit = cirq.Circuit()\n", " for first, second in zip(bits[0::2], bits[1::2]):\n", " circuit += two_qubit_unitary([first, second], symbols)\n", " for first, second in zip(bits[1::2], bits[2::2] + [bits[0]]):\n", " circuit += two_qubit_unitary([first, second], symbols)\n", " return circuit" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "fTzOm_t394Gj" }, "source": [ "Display the (very horizontal) circuit:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:00.544554Z", "iopub.status.busy": "2025-01-10T12:44:00.543980Z", "iopub.status.idle": "2025-01-10T12:44:01.336825Z", "shell.execute_reply": "2025-01-10T12:44:01.336191Z" }, "id": "Bi6q2nmY3z_U", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "data": { "image/svg+xml": [ "(0, 0): (0, 1): (0, 2): (0, 3): (0, 4): (0, 5): (0, 6): (0, 7): X^x0Y^x1Z^x2X^x3Y^x4Z^x5ZZZZ^x6YYYY^x7XXXX^x8X^x9Y^x10Z^x11X^x12Y^x13Z^x14X^x0Y^x1Z^x2X^x3Y^x4Z^x5ZZZZ^x6YYYY^x7XXXX^x8X^x9Y^x10Z^x11X^x12Y^x13Z^x14X^x0Y^x1Z^x2X^x3Y^x4Z^x5ZZZZ^x6YYYY^x7XXXX^x8X^x9Y^x10Z^x11X^x12Y^x13Z^x14X^x0Y^x1Z^x2X^x3Y^x4Z^x5ZZZZ^x6YYYY^x7XXXX^x8X^x9Y^x10Z^x11X^x12Y^x13Z^x14X^x0Y^x1Z^x2X^x3Y^x4Z^x5ZZZZ^x6YYYY^x7XXXX^x8X^x9Y^x10Z^x11X^x12Y^x13Z^x14X^x0Y^x1Z^x2X^x3Y^x4Z^x5ZZZZ^x6YYYY^x7XXXX^x8X^x9Y^x10Z^x11X^x12Y^x13Z^x14X^x0Y^x1Z^x2X^x3Y^x4Z^x5ZZZZ^x6YYYY^x7XXXX^x8X^x9Y^x10Z^x11X^x12Y^x13Z^x14X^x0Y^x1Z^x2X^x3Y^x4Z^x5ZZ^x6ZZYY^x7YYXX^x8XXX^x9Y^x10Z^x11X^x12Y^x13Z^x14" ], "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SVGCircuit(\n", " quantum_conv_circuit(cirq.GridQubit.rect(1, 8), sympy.symbols('x0:15')))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3svBAfap4xhP" }, "source": [ "##### 1.5.2.2 Quantum pooling\n", "\n", "A quantum pooling layer pools from $N$ qubits to $\\frac{N}{2}$ qubits using the two-qubit pool defined above." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:01.339459Z", "iopub.status.busy": "2025-01-10T12:44:01.339236Z", "iopub.status.idle": "2025-01-10T12:44:01.342921Z", "shell.execute_reply": "2025-01-10T12:44:01.342363Z" }, "id": "jD3fgcWO4yEU", "vscode": { "languageId": "python" } }, "outputs": [], "source": [ "def quantum_pool_circuit(source_bits, sink_bits, symbols):\n", " \"\"\"A layer that specifies a quantum pooling operation.\n", " A Quantum pool tries to learn to pool the relevant information from two\n", " qubits onto 1.\n", " \"\"\"\n", " circuit = cirq.Circuit()\n", " for source, sink in zip(source_bits, sink_bits):\n", " circuit += two_qubit_pool(source, sink, symbols)\n", " return circuit" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "NX83NHDP_Q_Z" }, "source": [ "Examine a pooling component circuit:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:01.345734Z", "iopub.status.busy": "2025-01-10T12:44:01.345239Z", "iopub.status.idle": "2025-01-10T12:44:01.735901Z", "shell.execute_reply": "2025-01-10T12:44:01.735281Z" }, "id": "pFXow2OX47O5", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Font family 'Arial' not found.\n" ] }, { "data": { "image/svg+xml": [ "(0, 0): (0, 1): (0, 2): (0, 3): (0, 4): (0, 5): (0, 6): (0, 7): X^x0Y^x1Z^x2X^x3Y^x4Z^x5XZ^(-x2)Y^(-x1)X^(-x0)X^x0Y^x1Z^x2X^x3Y^x4Z^x5XZ^(-x2)Y^(-x1)X^(-x0)X^x0Y^x1Z^x2X^x3Y^x4Z^x5XZ^(-x2)Y^(-x1)X^(-x0)X^x0Y^x1Z^x2X^x3Y^x4Z^x5XZ^(-x2)Y^(-x1)X^(-x0)" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_bits = cirq.GridQubit.rect(1, 8)\n", "\n", "SVGCircuit(\n", " quantum_pool_circuit(test_bits[:4], test_bits[4:], sympy.symbols('x0:6')))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "23VcPLT45Lg7" }, "source": [ "### 1.6 Model definition\n", "\n", "Now use the defined layers to construct a purely quantum CNN. Start with eight qubits, pool down to one, then measure $\\langle \\hat{Z} \\rangle$." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:01.738730Z", "iopub.status.busy": "2025-01-10T12:44:01.738479Z", "iopub.status.idle": "2025-01-10T12:44:02.985751Z", "shell.execute_reply": "2025-01-10T12:44:02.984898Z" }, "id": "vzEsY6-n5NR0", "vscode": { "languageId": "python" } }, "outputs": [ { "data": { "image/png": "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z9vbmzF2Lz1RoVCwgIAA9tRTT7Fly5YxAEwqlQqOMSIigiUmJnY7dlPpfQ/Owfbt203Oo3EuHZkp5qrMzRQjQk5P/XTV1MMHpaamsn//+9923w8F9D0U0P1jk9RPsWtra8OFCxf6nXpH7IfK+PbNYQHt6qmHK1asAMdxmDBhAlauXGnx02pXZ8/yu44s7UtlfPvo29rBmcvVUw/ffvttMMZw8+ZNzJ0719nDIWaiMr5C4joNiZSpMrPW5MC7Qn69taiMrxAFtBswVWbWmhx4V8ivtxaV8RWigHZx5paZtYY7l/alMr5CFNAuztwys9Zw59K+VMZXiMr4ujhTwdBTKVkjS3Lg3bm0L5XxFaIztIszp8ystTnw7lzal8r4ClFAuzhzysxaU34XcO/SvlTG9wH3p41R1U/HMjf101SZWaP+lt91hdK+VMb3e1TG1425Qi63K+TXUxnfe2xRxpceihG3UVFR0eP6l156CT4+PigqKnLJyp/GMr5Gpsr4WosCegBLTU1FXl4eAPB101wtJddczvhDef1lLONrl77t0itxC66eX08sRwFNiIhQQBMiIt3uocvKyqDX650xlgHnypUruHHjBt577z1nD8Wpmpqa0NbWNuDnwVKffvppt3UcY9/nvu3fvx9lZWUOHdRAZjAYoNPpBE867aG6uhoGgwETJ0606376izEGjUYDX19fZw/F7UydOhUvvPACvywIaCJOmzdv5v9cDxE3uocmREQooAkREQpoQkSEApoQEaGAJkREKKAJEREKaEJEhAKaEBGhgCZERCigCRERCmhCRIQCmhARoYAmREQooAkREQpoQkSEApoQEaGAJkREKKAJEREKaEJEhAKaEBGhgCZERCigCRERCmhCRIT++qQIGQwGfPTRR/zy1atX0dnZiRMnTvDrpk+fDk9P+s8vNlRoX6QiIiJQV1cHiUQC439ijuOg0+kwZMgQfP31104eIbEHuuQWqYULF6KrqwstLS1QqVRQqVRoaWmBVqsV/OkUIi50hhapa9euISIiAnfu3BGs9/f3x+eff47x48c7aWTEnugMLVJhYWFQKBTd1g8fPpyCWcQooEVs8eLFkEql/LKvry9++9vfOnFExN7oklvEmpqaMHLkSNy9excA4Ofnh5qaGgwfPtzJIyP2QmdoEQsODsbkyZP55YkTJ1IwixwFtMilpqYi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", "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def create_model_circuit(qubits):\n", " \"\"\"Create sequence of alternating convolution and pooling operators \n", " which gradually shrink over time.\"\"\"\n", " model_circuit = cirq.Circuit()\n", " symbols = sympy.symbols('qconv0:63')\n", " # Cirq uses sympy.Symbols to map learnable variables. TensorFlow Quantum\n", " # scans incoming circuits and replaces these with TensorFlow variables.\n", " model_circuit += quantum_conv_circuit(qubits, symbols[0:15])\n", " model_circuit += quantum_pool_circuit(qubits[:4], qubits[4:],\n", " symbols[15:21])\n", " model_circuit += quantum_conv_circuit(qubits[4:], symbols[21:36])\n", " model_circuit += quantum_pool_circuit(qubits[4:6], qubits[6:],\n", " symbols[36:42])\n", " model_circuit += quantum_conv_circuit(qubits[6:], symbols[42:57])\n", " model_circuit += quantum_pool_circuit([qubits[6]], [qubits[7]],\n", " symbols[57:63])\n", " return model_circuit\n", "\n", "\n", "# Create our qubits and readout operators in Cirq.\n", "cluster_state_bits = cirq.GridQubit.rect(1, 8)\n", "readout_operators = cirq.Z(cluster_state_bits[-1])\n", "\n", "# Build a sequential model enacting the logic in 1.3 of this notebook.\n", "# Here you are making the static cluster state prep as a part of the AddCircuit and the\n", "# \"quantum datapoints\" are coming in the form of excitation\n", "excitation_input = tf.keras.Input(shape=(), dtype=tf.dtypes.string)\n", "cluster_state = tfq.layers.AddCircuit()(\n", " excitation_input, prepend=cluster_state_circuit(cluster_state_bits))\n", "\n", "quantum_model = tfq.layers.PQC(create_model_circuit(cluster_state_bits),\n", " readout_operators)(cluster_state)\n", "\n", "qcnn_model = tf.keras.Model(inputs=[excitation_input], outputs=[quantum_model])\n", "\n", "# Show the keras plot of the model\n", "tf.keras.utils.plot_model(qcnn_model,\n", " show_shapes=True,\n", " show_layer_names=False,\n", " dpi=70)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "9jqTEe5VSbug" }, "source": [ "### 1.7 Train the model\n", "\n", "Train the model over the full batch to simplify this example." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:02.988987Z", "iopub.status.busy": "2025-01-10T12:44:02.988716Z", "iopub.status.idle": "2025-01-10T12:44:19.585208Z", "shell.execute_reply": "2025-01-10T12:44:19.584410Z" }, "id": "_TFkAm1sQZEN", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 3s - loss: 0.9643 - custom_accuracy: 0.6875" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.8868 - custom_accuracy: 0.8125" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.8793 - custom_accuracy: 0.7708" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.8695 - custom_accuracy: 0.7656" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.8544 - custom_accuracy: 0.7625" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.8491 - custom_accuracy: 0.7708" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.8493 - custom_accuracy: 0.7500" ] }, { "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\b\r", "7/7 [==============================] - 1s 133ms/step - loss: 0.8493 - custom_accuracy: 0.7500 - val_loss: 0.7326 - val_custom_accuracy: 0.7708\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 2/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.7892 - custom_accuracy: 0.7500" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.7757 - custom_accuracy: 0.8125" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.7944 - custom_accuracy: 0.7708" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.8055 - custom_accuracy: 0.7500" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.8085 - custom_accuracy: 0.7625" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.8016 - custom_accuracy: 0.7708" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.8037 - custom_accuracy: 0.7589" ] }, { "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\b\r", "7/7 [==============================] - 1s 100ms/step - loss: 0.8037 - custom_accuracy: 0.7589 - val_loss: 0.6988 - val_custom_accuracy: 0.8333\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 3/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.8515 - custom_accuracy: 0.6250" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.7456 - custom_accuracy: 0.7812" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.7806 - custom_accuracy: 0.7292" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.7686 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.7621 - custom_accuracy: 0.7375" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.7592 - custom_accuracy: 0.7500" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7600 - custom_accuracy: 0.7500" ] }, { "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\b\r", "7/7 [==============================] - 1s 96ms/step - loss: 0.7600 - custom_accuracy: 0.7500 - val_loss: 0.6644 - val_custom_accuracy: 0.7708\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 4/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.8439 - custom_accuracy: 0.6250" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.7816 - custom_accuracy: 0.7500" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.7319 - custom_accuracy: 0.7917" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.7079 - custom_accuracy: 0.8125" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.7349 - custom_accuracy: 0.7750" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.7197 - custom_accuracy: 0.7812" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7503 - custom_accuracy: 0.7500" ] }, { "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\b\r", "7/7 [==============================] - 1s 95ms/step - loss: 0.7503 - custom_accuracy: 0.7500 - val_loss: 0.6600 - val_custom_accuracy: 0.7708\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 5/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.6006 - custom_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\b\b\b\b\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6968 - custom_accuracy: 0.8125" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.7161 - custom_accuracy: 0.8125" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.7144 - custom_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\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.7420 - custom_accuracy: 0.7625" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.7408 - custom_accuracy: 0.7604" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7353 - custom_accuracy: 0.7679" ] }, { "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\b\r", "7/7 [==============================] - 1s 94ms/step - loss: 0.7353 - custom_accuracy: 0.7679 - val_loss: 0.6509 - val_custom_accuracy: 0.8333\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 6/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.7643 - custom_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\b\b\b\b\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6989 - custom_accuracy: 0.9062" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.7159 - custom_accuracy: 0.8542" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.7107 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.7106 - custom_accuracy: 0.8250" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.7037 - custom_accuracy: 0.8333" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7236 - custom_accuracy: 0.7857" ] }, { "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\b\r", "7/7 [==============================] - 1s 91ms/step - loss: 0.7236 - custom_accuracy: 0.7857 - val_loss: 0.6283 - val_custom_accuracy: 0.8125\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 7/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.8269 - custom_accuracy: 0.5625" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.7892 - custom_accuracy: 0.6875" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.8128 - custom_accuracy: 0.6875" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.7731 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.7438 - custom_accuracy: 0.7750" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.7350 - custom_accuracy: 0.8021" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7237 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - 1s 93ms/step - loss: 0.7237 - custom_accuracy: 0.8125 - val_loss: 0.6414 - val_custom_accuracy: 0.8542\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 8/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.6489 - custom_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\b\b\b\b\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6484 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6611 - custom_accuracy: 0.8333" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6634 - custom_accuracy: 0.8125" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6959 - custom_accuracy: 0.8000" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.7090 - custom_accuracy: 0.7708" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7193 - custom_accuracy: 0.7589" ] }, { "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\b\r", "7/7 [==============================] - 1s 93ms/step - loss: 0.7193 - custom_accuracy: 0.7589 - val_loss: 0.6266 - val_custom_accuracy: 0.8542\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 9/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.7804 - custom_accuracy: 0.7500" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.7134 - custom_accuracy: 0.8125" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6658 - custom_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\b\b\b\b\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6935 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.7083 - custom_accuracy: 0.8250" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.7141 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7137 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - 1s 93ms/step - loss: 0.7137 - custom_accuracy: 0.8125 - val_loss: 0.6160 - val_custom_accuracy: 0.8333\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 10/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.6894 - custom_accuracy: 0.8125" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6099 - custom_accuracy: 0.9062" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6604 - custom_accuracy: 0.8542" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6869 - custom_accuracy: 0.8125" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6795 - custom_accuracy: 0.8250" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.6985 - custom_accuracy: 0.8021" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7157 - custom_accuracy: 0.7946" ] }, { "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\b\r", "7/7 [==============================] - 1s 92ms/step - loss: 0.7157 - custom_accuracy: 0.7946 - val_loss: 0.6174 - val_custom_accuracy: 0.8542\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 11/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.6435 - custom_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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6489 - custom_accuracy: 0.9062" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6599 - custom_accuracy: 0.8542" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6752 - custom_accuracy: 0.8594" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6893 - custom_accuracy: 0.8375" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.7116 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7113 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - 1s 91ms/step - loss: 0.7113 - custom_accuracy: 0.8125 - val_loss: 0.6256 - val_custom_accuracy: 0.8542\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 12/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.7748 - custom_accuracy: 0.7500" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6865 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6535 - custom_accuracy: 0.9167" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6723 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6926 - custom_accuracy: 0.8375" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.6997 - custom_accuracy: 0.8333" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7069 - custom_accuracy: 0.8304" ] }, { "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\b\r", "7/7 [==============================] - 1s 93ms/step - loss: 0.7069 - custom_accuracy: 0.8304 - val_loss: 0.5883 - val_custom_accuracy: 0.8958\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 13/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.6431 - custom_accuracy: 0.8125" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6352 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6723 - custom_accuracy: 0.8333" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.7176 - custom_accuracy: 0.8125" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.7053 - custom_accuracy: 0.8250" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.6917 - custom_accuracy: 0.8333" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.6894 - custom_accuracy: 0.8214" ] }, { "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\b\r", "7/7 [==============================] - 1s 93ms/step - loss: 0.6894 - custom_accuracy: 0.8214 - val_loss: 0.5804 - val_custom_accuracy: 0.8958\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 14/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.6501 - custom_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\b\b\b\b\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6411 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6536 - custom_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\b\b\b\b\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6530 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6909 - custom_accuracy: 0.8250" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.6931 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.6827 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - 1s 95ms/step - loss: 0.6827 - custom_accuracy: 0.8125 - val_loss: 0.5962 - val_custom_accuracy: 0.8958\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 15/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.7262 - custom_accuracy: 0.7500" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6965 - custom_accuracy: 0.8125" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6413 - custom_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\b\b\b\b\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6724 - custom_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\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6750 - custom_accuracy: 0.8250" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.6737 - custom_accuracy: 0.8229" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.6717 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - 1s 92ms/step - loss: 0.6717 - custom_accuracy: 0.8125 - val_loss: 0.5910 - val_custom_accuracy: 0.8958\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 16/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.7736 - custom_accuracy: 0.6875" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6989 - custom_accuracy: 0.7812" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6883 - custom_accuracy: 0.8333" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6545 - custom_accuracy: 0.8594" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6839 - custom_accuracy: 0.8125" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.6570 - custom_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\b\b\b\b\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.6631 - custom_accuracy: 0.8482" ] }, { "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\b\r", "7/7 [==============================] - 1s 91ms/step - loss: 0.6631 - custom_accuracy: 0.8482 - val_loss: 0.5789 - val_custom_accuracy: 0.8958\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 17/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.6578 - custom_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\b\b\b\b\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6391 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6571 - custom_accuracy: 0.8333" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6405 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6501 - custom_accuracy: 0.8375" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.6319 - custom_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\b\b\b\b\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.6581 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - 1s 90ms/step - loss: 0.6581 - custom_accuracy: 0.8125 - val_loss: 0.5666 - val_custom_accuracy: 0.8958\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 18/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.6491 - custom_accuracy: 0.8125" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6454 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6550 - custom_accuracy: 0.8542" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6553 - custom_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\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6735 - custom_accuracy: 0.8000" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.6684 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.6500 - custom_accuracy: 0.8304" ] }, { "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\b\r", "7/7 [==============================] - 1s 91ms/step - loss: 0.6500 - custom_accuracy: 0.8304 - val_loss: 0.5543 - val_custom_accuracy: 0.9375\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 19/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.6036 - custom_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\b\b\b\b\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6327 - custom_accuracy: 0.9062" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6373 - custom_accuracy: 0.8958" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6446 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6124 - custom_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\b\b\b\b\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.6355 - custom_accuracy: 0.8333" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.6251 - custom_accuracy: 0.8304" ] }, { "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\b\r", "7/7 [==============================] - 1s 93ms/step - loss: 0.6251 - custom_accuracy: 0.8304 - val_loss: 0.5248 - val_custom_accuracy: 0.9583\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 20/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.5908 - custom_accuracy: 0.8125" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6127 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6294 - custom_accuracy: 0.8542" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.6208 - custom_accuracy: 0.8594" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.6226 - custom_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\b\b\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.5937 - custom_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\b\b\b\b\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.5941 - custom_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\b\b\b\b\b\r", "7/7 [==============================] - 1s 91ms/step - loss: 0.5941 - custom_accuracy: 0.8750 - val_loss: 0.4657 - val_custom_accuracy: 0.9583\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 21/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.7779 - custom_accuracy: 0.8125" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.6276 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.5640 - custom_accuracy: 0.8958" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.5868 - custom_accuracy: 0.8594" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.5707 - custom_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\b\b\b\b\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.5398 - custom_accuracy: 0.8958" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.5459 - custom_accuracy: 0.8839" ] }, { "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\b\r", "7/7 [==============================] - 1s 91ms/step - loss: 0.5459 - custom_accuracy: 0.8839 - val_loss: 0.3872 - val_custom_accuracy: 0.9375\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 22/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.5693 - custom_accuracy: 0.9375" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.4888 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.5733 - custom_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\b\b\b\b\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.5092 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.4734 - custom_accuracy: 0.9125" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.4809 - custom_accuracy: 0.9062" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.5098 - custom_accuracy: 0.8929" ] }, { "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\b\r", "7/7 [==============================] - 1s 90ms/step - loss: 0.5098 - custom_accuracy: 0.8929 - val_loss: 0.3442 - val_custom_accuracy: 0.9583\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 23/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.4127 - custom_accuracy: 0.9375" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.5682 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.5569 - custom_accuracy: 0.8542" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.5000 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.5133 - custom_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\b\b\b\b\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.4935 - custom_accuracy: 0.8854" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.4778 - custom_accuracy: 0.8929" ] }, { "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\b\r", "7/7 [==============================] - 1s 91ms/step - loss: 0.4778 - custom_accuracy: 0.8929 - val_loss: 0.3443 - val_custom_accuracy: 0.9375\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 24/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.4005 - custom_accuracy: 0.9375" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.3762 - custom_accuracy: 0.9062" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.4946 - custom_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\b\b\b\b\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.4634 - custom_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\b\b\b\b\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.4939 - custom_accuracy: 0.8875" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.4845 - custom_accuracy: 0.8854" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.4860 - custom_accuracy: 0.8929" ] }, { "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\b\r", "7/7 [==============================] - 1s 90ms/step - loss: 0.4860 - custom_accuracy: 0.8929 - val_loss: 0.3315 - val_custom_accuracy: 0.9583\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 25/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.5951 - custom_accuracy: 0.7500" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.5208 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.4723 - custom_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\b\b\b\b\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.4582 - custom_accuracy: 0.9062" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.4455 - custom_accuracy: 0.9125" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.4554 - custom_accuracy: 0.8958" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.4579 - custom_accuracy: 0.8929" ] }, { "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\b\r", "7/7 [==============================] - 1s 97ms/step - loss: 0.4579 - custom_accuracy: 0.8929 - val_loss: 0.3236 - val_custom_accuracy: 0.9583\n" ] } ], "source": [ "# Generate some training data.\n", "train_excitations, train_labels, test_excitations, test_labels = generate_data(\n", " cluster_state_bits)\n", "\n", "\n", "# Custom accuracy metric.\n", "@tf.function\n", "def custom_accuracy(y_true, y_pred):\n", " y_true = tf.squeeze(y_true)\n", " y_pred = tf.map_fn(lambda x: 1.0 if x >= 0 else -1.0, y_pred)\n", " return tf.keras.backend.mean(tf.keras.backend.equal(y_true, y_pred))\n", "\n", "\n", "qcnn_model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.02),\n", " loss=tf.losses.mse,\n", " metrics=[custom_accuracy])\n", "\n", "history = qcnn_model.fit(x=train_excitations,\n", " y=train_labels,\n", " batch_size=16,\n", " epochs=25,\n", " verbose=1,\n", " validation_data=(test_excitations, test_labels))" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:19.588753Z", "iopub.status.busy": "2025-01-10T12:44:19.588025Z", "iopub.status.idle": "2025-01-10T12:44:19.809234Z", "shell.execute_reply": "2025-01-10T12:44:19.808322Z" }, "id": "2tiCJOb5Qzcr", "vscode": { "languageId": "python" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB9xklEQVR4nO3dd3gUVdvH8e9ueg8hHUJCh1BCjzRBCVVR2kMRaVKUpj6IhRelWdBHRVRQFBUERRAEsSAIkV4E6b2XACmEkIQkpO3O+8eQhTVhSUKSSTb357r2ymZ2Zufekt1fzpw5R6coioIQQgghhJXQa12AEEIIIURRknAjhBBCCKsi4UYIIYQQVkXCjRBCCCGsioQbIYQQQlgVCTdCCCGEsCoSboQQQghhVSTcCCGEEMKqSLgRQgghhFWRcFMKDB06lJCQkEJtO23aNHQ6XdEWJIQQd7lw4QI6nY6FCxeWyP5CQkIYOnRokd6nfFaWLxJuLNDpdPm6bNq0SetSy6xLly7x3HPPERISgoODA76+vvTs2ZMdO3ZoXZqZq1evMm3aNA4cOKB1Kfe0adMmevXqhb+/P/b29vj6+tK9e3dWrlxpWifnS0qn0/HTTz/luo+cL4D4+HjTsqFDh6LT6WjYsCF5zdai0+kYN27cfet75513+Pnnnwv34Cy4+2/R1tYWLy8vmjZtygsvvMCxY8ce6L6Lq+a7paWlMW3atHx/jmzatMni59HSpUuLtd4ca9asYdq0aSWyL0vS09P56KOPCA8Px8PDA0dHR2rVqsW4ceM4depUidWxZMkSZs+eXWL7AzAajSxatIjw8HC8vLxwc3OjVq1aDB48mF27dpnWO3bsGNOmTePChQuF3pcWj+9B2GpdQGm2ePFis98XLVrE+vXrcy2vW7fuA+1n/vz5GI3GQm37+uuv89prrz3Q/rWyfft2unXrBsCIESMIDQ0lJiaGhQsX0qZNG+bOncvo0aM1rlJ19epVpk+fTkhICI0aNdK6nFymTp3KjBkzqFmzJs8++yzBwcFcv36dNWvW0Lt3b77//nueeuops21mzJhBr1698v3f7OHDh1m5ciW9e/cuVI3vvPMOffr0oUePHoXa3pKOHTsyePBgFEUhKSmJgwcP8u233/LZZ5/x3nvvMWHChELdb3HWnCMtLY3p06cD0L59+3xv9/zzz9O8efNcy1u2bFlUpZkEBwdz69Yt7OzsTMvWrFnD3LlzNQ048fHxdOnShb179/L444/z1FNP4erqysmTJ1m6dClffvklmZmZJVLLkiVLOHLkCC+++GKJ7A/U98DcuXN58sknGThwILa2tpw8eZI//viDatWq8dBDDwFquJk+fTrt27cv9FECLR7fg5BwY8HTTz9t9vuuXbtYv359ruX/lpaWhrOzc773c/cHRkHZ2tpia1v2XsYbN27Qp08fnJyc2L59O9WrVzfdNmHCBDp37sz48eNp3Lix6Q9U5G3FihXMmDGDPn36sGTJErP308svv8y6devIysoy26ZRo0YcOHCAVatW0atXr/vuw8nJiaCgoAIHopJSq1atXH+X7777Lt27d+ell16iTp06piBtLdq2bUufPn1KZF86nQ5HR8cS2VdBDB06lP3797NixYpcofvNN99k8uTJGlVWNIxGI5mZmXk+97GxsXz22WeMHDmSL7/80uy22bNnc+3atZIqs3RSRL6NHTtW+fdT1q5dO6VevXrKP//8o7Rt21ZxcnJSXnjhBUVRFOXnn39WunXrpgQEBCj29vZKtWrVlBkzZijZ2dlm9zFkyBAlODjY9Pv58+cVQHn//feVL774QqlWrZpib2+vNGvWTNm9e7fZtlOnTs1VE6CMHTtWWbVqlVKvXj3F3t5eCQ0NVf74449cj2njxo1K06ZNFQcHB6VatWrKvHnz8rzPvGzZskXp06ePEhQUpNjb2yuVK1dWXnzxRSUtLe2+286cOVMBlEWLFuV5+7lz5xQbGxula9euFh+roijKggULFEA5f/68aVl+n/uc1+/o0aNK+/btFScnJyUwMFB57733TOts3LhRAXJdFixYoCiKogQHBytDhgzJVVe7du2Udu3a5bqfZcuWKdOmTVMCAwMVV1dXpXfv3kpiYqKSnp6uvPDCC4qPj4/i4uKiDB06VElPT7/vc1mnTh3Fy8tLSU5Ovu+6Oe+td999V6lVq5YSFhamGI1G0+05z/G1a9dMy4YMGaK4uLgoixYtUgDlp59+MrvPnPebJXk9f3c/Z/v27VO6dOmiuLm5KS4uLsqjjz6q7Ny5876P5377v3jxomJra6u0atXKbHl6eroyZcoUpXr16qb37ssvv2z2fN+v5suXLyvDhg1TfH19TX9jX3/9da4abt26pUydOlWpWbOm4uDgoPj7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IwMHB4c81zl06BD29vZUqlQJuPd/kQaDwez3gj73D/pcWaorr/u+1/4KU0edOnUA9TTtwsgJK0OHDmX16tX52mbgwIGmvjfFeYp0UTly5Ag2NjamLw2j0UiDBg2YNWtWnuv/O2T+W8775+mnn2bIkCF5rpOfPjMl5fr16/zzzz+Aekqw0WhEry++/2uNRiO+vr58//33ed6e3z5993P3ez+nVbsg8vt5AtC3b1/atm3LqlWr+PPPP3n//fd57733WLly5X1bugv6fsvr+yQ/KlasyBNPPMETTzxh6q928eJFU9+cvBTF91R+H5+TkxNbtmxh48aN/P7776xdu5Zly5bx6KOP8ueff97z86+wJNwUk02bNnH9+nVWrlzJww8/bFp+/vx5Dau6w9fXF0dHR86cOZPrtryW/dvhw4c5deoU3377LYMHDzYtX79+fb723717d3bs2MHy5cvzPLX+woULbN26lSeffNL0x57z31xiYqKpiRPu/AeYoziee0vN8xUqVCAxMTHX8osXL5odaikOtWrVonbt2qxevZqPP/7YdAimIJ5++mneeustpk+fzhNPPHHf9QsTiCDv59DHxwdnZ2dOnjyZ67YTJ06g1+vvGzYsuXTpEps3b6Zly5amlpvq1atz8OBBOnTocN/DLveq2c3NDYPBQEREhMXtq1evzt9//01WVtY9TwIo7tPqx44dy82bN5k5cyaTJk1i9uzZZuP+VK9enSNHjhT4fu9Vd/Xq1dmwYQOtW7e2+EWd86V7+vRps7+Ta9eu5avVtHv37sycOZPvvvuuUOHm7s+Tu/378yRHQEAAY8aMYcyYMcTFxdGkSRPefvttU7ix9Hzk9/1WVJo1a8bmzZuJjo4mODj4nvstyGdlUTw+vV5Phw4d6NChA7NmzeKdd95h8uTJbNy48b5/SwUlh6WKSU4Kvfu/7szMTD777DOtSjJjY2NDREQEP//8s9lx5DNnzvDHH3/ka3swf3yKovDxxx/na//PPvss/v7+vPzyy7mad9PT0xk2bBg6nY5XXnnFtDynD9GWLVtMy1JTU/n222/vW9uDPvcuLi5A7g/CnLp27dpldobHb7/99sCHU/Jr+vTpXL9+nREjRuTZP+fPP//kt99+u+f2dx9qyjkD5X6efvppatSoYRp8Lj9cXFxyPX82NjZ06tSJ1atXm42eGhsby5IlS2jTpo1Z/5CCSEhIYMCAARgMBrPxTvr27cuVK1eYP39+rm1u3bpFamrqfWvu3bs3P/30U56h4O7xRXr37k18fDxz5szJtV7O+zPnLJe83lsPasWKFSxbtox3332X1157jf79+/P666+bjdzbu3dvDh48yKpVq+5ZY17u9TfRt29fDAYDb775Zq5tsrOzTetHRERgZ2fHp59+araf/I6C27JlS7p06cJXX32V5yHSzMxMJk6ceM/t3d3d8fb2Nvs8AXJ9ThgMhlyHZ3x9fQkMDCQjI8O0zMXFJc/DOAV5vxVETExMniNwZ2ZmEhkZiV6vN3UxuNdrVZDPygd9fAkJCbluzxkQ9e7nsahIy00xadWqFRUqVGDIkCE8//zz6HQ6Fi9eXGSHhYrCtGnT+PPPP2ndujWjR4/GYDAwZ84c6tevf99pBurUqUP16tWZOHEiV65cwd3dnZ9++inf/VQqVKjAihUr6NatG02aNMk1QvG5c+eYM2eO2WnAnTp1okqVKgwfPpyXX34ZGxsbvvnmG3x8fLh06ZJpveJ47qtXr46npyfz5s3Dzc0NFxcXwsPDqVq1KiNGjGDFihV06dKFvn37cvbsWb777juzDt3FqV+/fhw+fJi3336b/fv3M2DAANMIxWvXriUyMpIlS5ZYvI+cQ035nV7CxsaGyZMn59mR/l6aNm3Khg0bmDVrFoGBgVStWpXw8HDeeust1q9fT5s2bRgzZgy2trZ88cUXZGRk8L///S9f933q1Cm+++47FEUhOTmZgwcPsnz5clJSUpg1axZdunQxrTto0CB+/PFHnnvuOTZu3Ejr1q0xGAycOHGCH3/8kXXr1tGsWTOLNb/77rts3LiR8PBwRo4cSWhoKAkJCezbt48NGzaYPsgHDx7MokWLmDBhArt376Zt27akpqayYcMGxowZY2qZDA0NZdmyZdSqVQsvLy/q169/334wW7duJT09Pdfyhg0b0rBhQ+Li4hg9ejSPPPKIaXqMOXPmsHHjRoYOHcq2bdvQ6/W8/PLLrFixgv/85z8888wzNG3alISEBH755RfmzZtHWFjYPV9PUEfJ7dy5MzY2NvTv35927drx7LPPMnPmTA4cOECnTp2ws7Pj9OnTLF++nI8//pg+ffrg4+PDxIkTmTlzJo8//jjdunVj//79/PHHH3mefp6XRYsW0alTJ3r16kX37t3p0KEDLi4unD59mqVLlxIdHc0HH3xwz+1HjBjBu+++y4gRI2jWrBlbtmzJNWXDzZs3qVy5Mn369CEsLAxXV1c2bNjAnj17+PDDD82ej2XLljFhwgSaN2+Oq6sr3bt3L9D7rSAuX75MixYtePTRR+nQoQP+/v7ExcXxww8/cPDgQV588UXT89ioUSNsbGx47733SEpKwsHBgUcffbRAn5UP+vhmzJjBli1beOyxxwgODiYuLo7PPvuMypUr06ZNmwI//vsqkXOyrISlQfzysn37duWhhx4yDQz3yiuvKOvWrct1Sp6lQfz+jX+domhpEL9/y+uU5cjISKVx48aKvb29Ur16deWrr75SXnrpJcXR0fEez8Idx44dUyIiIhRXV1fF29tbGTlypOmU87xOr8zLhQsXlFGjRilVqlQxnYIOKBs2bMhz/b179yrh4eGKvb29UqVKFWXWrFl5ngqe3+f+Xq/fv18TRVFPu84ZWOvfj/HDDz9UKlWqpDg4OCitW7dW/vnnn3ueCv7vwddy6t+zZ4/Z8rxOy7YkMjJSefLJJxVfX1/F1tZW8fHxUbp3766sXr3atI6l99bdg33d61Twu2VlZSnVq1fP96ngJ06cUB5++GHFyckp16m++/btUzp37qy4uroqzs7OyiOPPKLs2LEjX487p2Zun0br6empNG7cWHnhhRfueUptZmam8t577yn16tVTHBwclAoVKihNmzZVpk+fbnaatKWaY2NjlbFjxypBQUGKnZ2d4u/vr3To0EH58ssvzfaVlpamTJ48WalatappvT59+pid+r5jxw6ladOmir29/X1PC7/fqeA52/bq1Utxc3NTLly4YLZ9zvABdw9Uef36dWXcuHFKpUqVTIOwDRkyxHSqe16nTWdnZyvjx49XfHx8FJ1Ol+tz6Msvv1SaNm2qODk5KW5ubkqDBg2UV155Rbl69appHYPBoEyfPl0JCAgo8CB+dz+/H3zwgdK8eXPF1dVVsbe3V2rWrKmMHz/ebDiMvD4r09LSlOHDhyseHh6Km5ub0rdvXyUuLs7seczIyFBefvllJSwszDTIZFhYmPLZZ5+Z3VdKSory1FNPKZ6enrkGucvv+y2/f0uKog4s+PHHHyudO3dWKleurNjZ2Slubm5Ky5Ytlfnz55udXq8oijJ//nylWrVqio2NjdnnYH4/Kx/08eV8PgUGBir29vZKYGCgMmDAAOXUqVP5erwFpVOUUtSUIEqFHj16cPToUU6fPl3i+46MjKRbt260adOGP/74I8+z0IQQQghLpM9NOXfr1i2z30+fPs2aNWsKNIFfUerQoQPffvstGzduZNiwYaXqMJ4QQoiyQVpuyrmAgACGDh1KtWrVuHjxIp9//jkZGRns378/1/gTQgghRFkgHYrLuS5duvDDDz8QExODg4MDLVu25J133pFgI4QQosySlhshhBBCWBXpcyOEEEIIqyLhRgghhBBWpdz1uTEajVy9ehU3N7cSGwpbCCGEEA9GURRu3rxJYGDgfedHK3fh5urVqw80V40QQgghtBMVFUXlypUtrlPuwk3O5HlRUVGFnrNGCCGEECUrOTmZoKAg0/e4JeUu3OQcinJ3d5dwI4QQQpQx+elSIh2KhRBCCGFVJNwIIYQQwqpIuBFCCCGEVSl3fW6EEEJYD4PBQFZWltZliCJib29/39O880PCjRBCiDJHURRiYmJITEzUuhRRhPR6PVWrVsXe3v6B7kfCjRBCiDInJ9j4+vri7Owsg7JagZxBdqOjo6lSpcoDvaYSboQQQpQpBoPBFGwqVqyodTmiCPn4+HD16lWys7Oxs7Mr9P1Ih2IhhBBlSk4fG2dnZ40rEUUt53CUwWB4oPuRcCOEEKJMkkNR1qeoXlMJN0IIIYSwKhJuhBBCiDIsJCSE2bNn53v9TZs2odPprPpMMwk3QgghRAnQ6XQWL9OmTSvU/e7Zs4dRo0ble/1WrVoRHR2Nh4dHofZXFmgebubOnUtISAiOjo6Eh4eze/dui+vPnj2b2rVr4+TkRFBQEP/9739JT08voWotOx+fytlrKVqXIYQQohSKjo42XWbPno27u7vZsokTJ5rWVRSF7OzsfN2vj49PgTpX29vb4+/vb9V9ljQNN8uWLWPChAlMnTqVffv2ERYWRufOnYmLi8tz/SVLlvDaa68xdepUjh8/ztdff82yZcv4v//7vxKuPLe1R6LpPHsLL/14EINR0bocIYQQpYy/v7/p4uHhgU6nM/1+4sQJ3Nzc+OOPP2jatCkODg5s27aNs2fP8uSTT+Ln54erqyvNmzdnw4YNZvf778NSOp2Or776ip49e+Ls7EzNmjX55ZdfTLf/+7DUwoUL8fT0ZN26ddStWxdXV1e6dOlCdHS0aZvs7Gyef/55PD09qVixIq+++ipDhgyhR48exfmUFZqm4WbWrFmMHDmSYcOGERoayrx583B2duabb77Jc/0dO3bQunVrnnrqKUJCQujUqRMDBgy4b2tPSWgUVAEHGz0HohJZvPOC1uUIIUS5oigKaZnZmlwUpej+oX3ttdd49913OX78OA0bNiQlJYVu3boRGRnJ/v376dKlC927d+fSpUsW72f69On07duXQ4cO0a1bNwYOHEhCQsI9109LS+ODDz5g8eLFbNmyhUuXLpm1JL333nt8//33LFiwgO3bt5OcnMzPP/9cVA+7yGk2iF9mZiZ79+5l0qRJpmV6vZ6IiAh27tyZ5zatWrXiu+++Y/fu3bRo0YJz586xZs0aBg0aVFJl35O/hyOvdq3D6z8f4X/rTtKxnj+VPJ20LksIIcqFW1kGQqes02Tfx2Z0xtm+aL5OZ8yYQceOHU2/e3l5ERYWZvr9zTffZNWqVfzyyy+MGzfunvczdOhQBgwYAMA777zDJ598wu7du+nSpUue62dlZTFv3jyqV68OwLhx45gxY4bp9k8//ZRJkybRs2dPAObMmcOaNWsK/0CLmWYtN/Hx8RgMBvz8/MyW+/n5ERMTk+c2Tz31FDNmzKBNmzbY2dlRvXp12rdvb/GwVEZGBsnJyWaX4vJUiyo0D6lAWqaB11cdLtI0L4QQwvo1a9bM7PeUlBQmTpxI3bp18fT0xNXVlePHj9+35aZhw4am6y4uLri7u9+zyweoAyLmBBuAgIAA0/pJSUnExsbSokUL0+02NjY0bdq0QI+tJJWp6Rc2bdrEO++8w2effUZ4eDhnzpzhhRde4M033+SNN97Ic5uZM2cyffr0EqlPr9cxs1dDun28lY0nr/HLwas82ahSiexbCCHKMyc7G47N6KzZvouKi4uL2e8TJ05k/fr1fPDBB9SoUQMnJyf69OlDZmamxfv599QFOp0Oo9FYoPXL8j/omoUbb29vbGxsiI2NNVseGxuLv79/ntu88cYbDBo0iBEjRgDQoEEDUlNTGTVqFJMnT85zmvRJkyYxYcIE0+/JyckEBQUV4SMxV8PXlfGP1uDD9aeY/usx2tb0wcvlwWY3FUIIYZlOpyuyQ0Olyfbt2xk6dKjpcFBKSgoXLlwo0Ro8PDzw8/Njz549PPzww4A6PcK+ffto1KhRidaSX5odlrK3t6dp06ZERkaalhmNRiIjI2nZsmWe26SlpeUKMDY2amK+V8J0cHDA3d3d7FLcnm1Xndp+biSkZvLW78eKfX9CCCGsU82aNVm5ciUHDhzg4MGDPPXUUxZbYIrL+PHjmTlzJqtXr+bkyZO88MIL3Lhxo9SeTq7p2VITJkxg/vz5fPvttxw/fpzRo0eTmprKsGHDABg8eLBZh+Pu3bvz+eefs3TpUs6fP8/69et544036N69uynklAb2tnre7d0AnQ5W7rvCllPXtC5JCCFEGTRr1iwqVKhAq1at6N69O507d6ZJkyYlXserr77KgAEDGDx4MC1btsTV1ZXOnTvj6OhY4rXkh07R+KDanDlzeP/994mJiaFRo0Z88sknhIeHA9C+fXtCQkJYuHAhoJ5n//bbb7N48WKuXLmCj48P3bt35+2338bT0zNf+0tOTsbDw4OkpKRib8WZ/utRFmy/QOUKTvz534etsslUCCFKWnp6OufPn6dq1aql9svV2hmNRurWrUvfvn158803i+x+Lb22Bfn+1jzclLSSDDepGdl0+mgLVxJvMaJNVV5/PLRY9yeEEOWBhJuSd/HiRf7880/atWtHRkYGc+bMYcGCBRw8eJC6desW2X6KKtxoPv2CNXNxsOWtnvUB+Gb7eQ5GJWpbkBBCCFEIer2ehQsX0rx5c1q3bs3hw4fZsGFDkQaboiTHSYrZI7V96dEokJ8PXOXVnw7x6/g22NlIphRCCFF2BAUFsX37dq3LyDf5li0BbzweSgVnO07E3OTLLee0LkcIIYSwahJuSkBFVwemdFf723wceZpzMnO4EEIIUWwk3JSQHo0q8XAtHzKzjUxaeRijzBwuhBBCFAsJNyVEp9Pxdo/6ONnZ8Pf5BJb9E6V1SUIIIYRVknBTgoK8nJnYuTYA76w5TmxyusYVCSGEENZHwk0JG9oqhLDKHtxMz2bq6qNalyOEEEJYHQk3JcxGr+Pd3g2x1etYezSGtUeitS5JCCFEGdG+fXtefPFF0+8hISHMnj3b4jY6nY6ff/75gfddVPdTEiTcaKBugDvPtasOwJTVR0m6laVxRUIIIYpb9+7d6dKlS563bd26FZ1Ox6FDhwp0n3v27GHUqFFFUZ7JtGnT8pztOzo6mq5duxbpvoqLhBuNjHu0BtW8XYi7mcG7f5zQuhwhhBDFbPjw4axfv57Lly/num3BggU0a9aMhg0bFug+fXx8cHZ2LqoSLfL398fBwaFE9vWgJNxoxNHOhpm9GgDww+5L7Dp3XeOKhBBCFKfHH38cHx8f02TQOVJSUli+fDk9evRgwIABVKpUCWdnZxo0aMAPP/xg8T7/fVjq9OnTPPzwwzg6OhIaGsr69etzbfPqq69Sq1YtnJ2dqVatGm+88QZZWeoRhIULFzJ9+nQOHjyITqdDp9OZ6v33YanDhw/z6KOP4uTkRMWKFRk1ahQpKXfGcRs6dCg9evTggw8+ICAggIoVKzJ27FjTvoqThBsNhVeryFPhVQCYtPIw6VkGjSsSQogySlEgM1WbSz7nn7a1tWXw4MEsXLiQu+esXr58OQaDgaeffpqmTZvy+++/c+TIEUaNGsWgQYPYvXt3vu7faDTSq1cv7O3t+fvvv5k3bx6vvvpqrvXc3NxYuHAhx44d4+OPP2b+/Pl89NFHAPTr14+XXnqJevXqER0dTXR0NP369ct1H6mpqXTu3JkKFSqwZ88eli9fzoYNGxg3bpzZehs3buTs2bNs3LiRb7/9loULF+YKd8VB5pbS2Gtd67DhWCzn41P59K/TvNy5jtYlCSFE2ZOVBu8EarPv/7sK9i75WvWZZ57h/fffZ/PmzbRv3x5QD0n17t2b4OBgJk6caFp3/PjxrFu3jh9//JEWLVrc9743bNjAiRMnWLduHYGB6nPxzjvv5Oon8/rrr5uuh4SEMHHiRJYuXcorr7yCk5MTrq6u2Nra4u/vf899LVmyhPT0dBYtWoSLi/rY58yZQ/fu3Xnvvffw8/MDoEKFCsyZMwcbGxvq1KnDY489RmRkJCNHjszX81VY0nKjMXdHO97soc4c/sXmcxy7mqxxRUIIIYpLnTp1aNWqFd988w0AZ86cYevWrQwfPhyDwcCbb75JgwYN8PLywtXVlXXr1nHp0qV83ffx48cJCgoyBRuAli1b5lpv2bJltG7dGn9/f1xdXXn99dfzvY+79xUWFmYKNgCtW7fGaDRy8uRJ07J69ephY2Nj+j0gIIC4uLgC7aswpOWmFOhcz5+u9f3540gMr608xKoxrbHR67QuSwghyg47Z7UFRat9F8Dw4cMZP348c+fOZcGCBVSvXp127drx3nvv8fHHHzN79mwaNGiAi4sLL774IpmZmUVW6s6dOxk4cCDTp0+nc+fOeHh4sHTpUj788MMi28fd7OzszH7X6XQYjcZi2dfdpOWmlJj+RD3cHG05dDmJBdvPa12OEEKULTqdemhIi4uuYP+M9u3bF71ez5IlS1i0aBHPPPMMOp2O7du38+STT/L0008TFhZGtWrVOHXqVL7vt27dukRFRREdfWf8tF27dpmts2PHDoKDg5k8eTLNmjWjZs2aXLx40Wwde3t7DAbLfUDr1q3LwYMHSU1NNS3bvn07er2e2rVr57vm4iLhppTwdXdkcre6AHz45ymiEtI0rkgIIURxcHV1pV+/fkyaNIno6GiGDh0KQM2aNVm/fj07duzg+PHjPPvss8TGxub7fiMiIqhVqxZDhgzh4MGDbN26lcmTJ5utU7NmTS5dusTSpUs5e/Ysn3zyCatWrTJbJyQkhPPnz3PgwAHi4+PJyMjIta+BAwfi6OjIkCFDOHLkCBs3bmT8+PEMGjTI1N9GSxJuSpF+zYN4qJoXt7IM/N+qw2a96YUQQliP4cOHc+PGDTp37mzqI/P666/TpEkTOnfuTPv27fH396dHjx75vk+9Xs+qVau4desWLVq0YMSIEbz99ttm6zzxxBP897//Zdy4cTRq1IgdO3bwxhtvmK3Tu3dvunTpwiOPPIKPj0+ep6M7Ozuzbt06EhISaN68OX369KFDhw7MmTOn4E9GMdAp5ewbNDk5GQ8PD5KSknB3d9e6nFzOx6fSefYWMrONzOobRq8mlbUuSQghSpX09HTOnz9P1apVcXR01LocUYQsvbYF+f6WlptSpqq3Cy9G1ARgxm/H2H/phrTgCCGEEAUg4aYUGtm2GnUD3ElMy6LnZzto9/4m3l93ghMxyRJ0hBBCiPuQcFMK2dno+XJQU7qHBeJkZ8OlhDTmbjxLl9lb6fTRFj6JPM25ayn3vyMhhBCiHJJxbkqpIC9nPh3QmLTMbCKPx/HrwatsOnmN03EpzFp/ilnrT1G/kjvdGwbyWMMAKlcomYnThBBCiNJOwk0p52xvS/ewQLqHBZKcnsWfR2P59eBVtp2J58iVZI5cSWbmHydoGlyB7g0D6NYwAF836WAnhLB+cpje+hTVaypnS5VRCamZ/HEkml8PXuXv8wmmedv0OnioWkW6hwXSpZ4/FVzstS1UCCGKmMFg4NSpU/j6+lKxYkWtyxFFKCkpiatXr1KjRo1coxsX5Ptbwo0ViE1O5/dD0fx66Cr7LyWaltvqdbSt6U33sEA6hvrh5mh37zsRQogyJDo6msTERHx9fXF2dkZXwFGCReljNBq5evUqdnZ2VKlSJddrKuHGAmsMN3eLSkjjt0Nqi86x6DuTcNrb6ulSz58XI2pSzcdVwwqFEOLBKYpCTEwMiYmJWpciipBer6dq1arY2+c+6iDhxgJrDzd3OxOXwm+HrvLrwaucvabO/2Gj19G3WRAvRtTEz1365gghyjaDwUBWVpbWZYgiYm9vj16f94ncEm4sKE/hJoeiKBy5kszsDaeIPKFONe9op+eZ1lV5tl11PJzkcJUQQojSTcKNBeUx3Nxtz4UE3v3jBHsv3gDA09mOMe2rM7hlCI52NhpXJ4QQQuRNwo0F5T3cgNqSs/5YLO+vO8npOHUwwEAPR17sWIveTSpjo5eOeUIIIUoXCTcWSLi5w2BU+GnfZWavP8XVpHQAavq68nLn2nQM9ZOzD4QQQpQaEm4skHCTW3qWgcU7LzJn4xmSbqkd85oGV+C1rnVoHuKlcXVCCCGEhBuLJNzcW9KtLL7YfJZvtp8nPcsIQIc6vrzcpTZ1/OW5EkIIoR0JNxZIuLm/2OR0Po48zbI9URiMCjod9GxciQkda8kcVkIIITQh4cYCCTf5d/ZaCh/+eZI1h2MAsLfRM6hlMGMfqYGXTOsghBCiBEm4sUDCTcEdjErkvbUn2HH2OgBuDraMergaw9pUxdVB5l4VQghR/CTcWCDhpnAURWHr6Xje/eOEaVoHVwdbejWpxOCWwdTwddO4QiGEENZMwo0FEm4ejNGo8Ouhq3wceZpzt6d0AGhVvSKDWwYTUdcPW5u8h84WQgghCkvCjQUSboqGoihsP3OdRTsvsOF4LMbb76IAD0eealGF/i2q4OPmoG2RQgghrIaEGwsk3BS9K4m3+H7XRZbtieJ6aiYAdjY6ujUIYHDLYJpUqSADAgohhHggEm4skHBTfDKyDaw5HM2inRfZfynRtDw0wJ0hrYJ5IqwSTvYyf5UQQoiCk3BjgYSbknH4chKLdl7gl4NXychWBwT0cLLjP00r8/RDwYR4u2hcoRBCiLJEwo0FEm5K1o3UTJbvjWLxrotEJdwyLW9f24fBLYNpV8tXJuoUQghxXxJuLJBwow2DUWHzqTgW7bzIppPXTMuDvJx4OjyYHo0r4WhnAwooqG9JRQEFtfOyYvpdub0Od62jmK0L4OVij7O9jMEjhBDWQsKNBRJutHchPpXvdl3kx3+iSE7PLrb9VPJ0opqPC9V9XKnu60p1Hxdq+Lji4+YgHZyFEKKMkXBjgYSb0uNWpoFfDl5h0c6LHL2anO/tdDrQgSmg6EzLbt+gQKbBeM/t3RxsqXY77FT3caW6jys1fF2o4uWCva2M0SOEEKWRhBsLJNyUThnZBkANKHeHl5z2FZ2OArW2JKRmcvZaCmfjUtSf11I5dy2FSwlppjF5/s1GryPYy5lqPq5U970r+Pi44uFs92APUAghxAORcGOBhJvyLSPbwMXraWahJycEpWYa7rldJU8nGlTyoEFlD+pX8qBBJQ+ZPFQIIUqQhBsLJNyIvCiKQmxyxu3Ak9Piowaf6KT0PLcJ9HA0BZ36ldWf3q4yKrMQQhQHCTcWSLgRBZV0K4ujV5M4eiWZw1eSOHIliXPxqXmuG3A78NQP9KBBZXfqV/LA183xgfafkW0g6VYWSWlZJN7981YWN9Oz8HN3vH0IzYWKEq6EEFZKwo0FEm5EUbiZnsXRq8kcuZLE4duX8/Gp5PXX5OfuoLbu3A49vu4OJN3KIjFNDSg5l8S0TLNlOddvZd37cNm/VXC2M/UVqu7rQg1f9XrlCs4ynpAQokyTcGOBhBtRXFIysjl29U7rzuErSZy9lpJn4CkovQ7cnezwdLLDw8kOD2d7PJ3scHGwJTrpFmfiUriSeOue+7K31VPN28XUwlP9duip5uMi4wEJIcoECTcWSLgRJSk1I5tj0XdaeI5cSeJmerYaUJzs8HTO+Wmfe5nT7WXOdrg52KK/T8vLrUwD5+NTOXPXWWJn4lI4F59KZva9T42v5OlkGgdIPS1eDT7ervYyHpAQotSQcGOBhBtR3hiMClcT1dadnA7TZ253mE64PYt7XtwdbU0tPDktPjV8Xani5YytjYwHJIQoWRJuLJBwI8Qd/x4PKCf0RN1Iu+chLjsbHcEVXcwGQcxp+XFzlPGAhBDFoyDf33KwXYhyzMvFHi8XL5qHeJktT88ycOF6KmfjUu8KPSmcu5bKrSwDZ+LUZRBrtp2fu4NZS8/DtXyo5uNago9ICCGk5UbrcoQoU4xGhejk9LsGQbzT2nPtZkau9W31OkY+XI3nH62Jk72NBhULIaxFmTssNXfuXN5//31iYmIICwvj008/pUWLFnmu2759ezZv3pxrebdu3fj999/vuy8JN0IUj6RbWZy7a9Tn/ZdusOtcAqDO/v7mk/VpX9tX4yqFEGVVmQo3y5YtY/DgwcybN4/w8HBmz57N8uXLOXnyJL6+uT8IExISyMy80wny+vXrhIWF8dVXXzF06ND77k/CjRAlZ93RGKb9ctQ0yvPjDQOY8ngovu4PNrChEKL8KVPhJjw8nObNmzNnzhwAjEYjQUFBjB8/ntdee+2+28+ePZspU6YQHR2Ni4vLfdeXcCNEyUrJyOaj9adYsP08RgXcHG15pUsdBraoct/T24UQIkdBvr81PZ8zMzOTvXv3EhERYVqm1+uJiIhg586d+bqPr7/+mv79+98z2GRkZJCcnGx2KTaGLDDeezwRIcojVwdb3ng8lF/GtaFhZQ9upmfzxs9H6D1vB8eji/HvUQhRbmkabuLj4zEYDPj5+Zkt9/PzIyYm5r7b7969myNHjjBixIh7rjNz5kw8PDxMl6CgoAeuO0+p12FxT9jyfvHcvxBlXP1KHqwa05pp3UNxdbBl/6VEHv90GzPXHCctM1vr8oQQVqRMj8T19ddf06BBg3t2PgaYNGkSSUlJpktUVFTxFHNuI1zYCpvegeO/Fs8+hCjjbPQ6hrauyoYJ7eha3x+DUeGLLefoOGsLkcdj738HQgiRD5qGG29vb2xsbIiNNf9Qi42Nxd/f3+K2qampLF26lOHDh1tcz8HBAXd3d7NLsWjQB8KfU6+vfBZijxbPfoSwAv4ejnz+dFO+HtKMSp5OXEm8xfBv/2H0d3uJud35WAghCkvTcGNvb0/Tpk2JjIw0LTMajURGRtKyZUuL2y5fvpyMjAyefvrp4i4z/zq9DVUfhqxU+GEApCVoXZEQpVqHun6sn/Awzz5cDRu9jj+OxBAxazMLt5/HYNR8lAohRBml+WGpCRMmMH/+fL799luOHz/O6NGjSU1NZdiwYQAMHjyYSZMm5dru66+/pkePHlSsWLGkS743G1v4z7dQIQQSL8LyIWonYyHEPTnb2zKpW11+HdeGRkGepGRkM+3XY/T8bDtHriRpXZ4QogzSPNz069ePDz74gClTptCoUSMOHDjA2rVrTZ2ML126RHR0tNk2J0+eZNu2bfc9JKUJZy/o/wPYucD5LfDn61pXJESZEBrozk+jW/Fmj/q4Odpy6HIST8zZxoxfj5GSIR2OhRD5p/k4NyWtxMa5Of4rLLt9yOyJOdBkUPHtSwgrE5eczozfjvHbIfUfmwAPR6Y9UY9OoX7odDI2jhDlUZkaxK+kleggfpveU8+e0tvB0N+hSnjx7k8IK7PpZBxvrD5CVMItACo429E8xIsWVdVLaIA7tjaaN0ALIUqAhBsLSjTcGI1qv5vjv4CLL4zaBB6VinefQliZW5kGPv3rNAu2X+BWlsHsNhd7G5oEV6DF7cATFuSJo51M0CmENZJwY0GJT7+QkQLfdIbYIxDYGIb9AXZOxb9fIaxMZraRw1eS2HMhgd3nE9hzIYGb6eZ9cext9IQFedCiqhfNQ7xoGlwBN0c7jSoWQhQlCTcWaDK31I0L8OUjcCsBGvSFXl+C9BsQ4oEYjAonY26aws7uCwlcu5lhto5ep3ZUbhFSkRZVK9A8xIuKrg4aVSyEeBASbizQbOLM81tgUQ9QDNDxTWj9fMntW4hyQFEULlxPY8/5BP6+3bJzKSEt13rVfVxoUbUibWp406GurxzGEqKMkHBjgaazgu+eD2smgk4PTy2HmhH330YIUWgxSensvpDAnvNq687J2Jtmt3s629GzcSX6N69CbX83jaoUQuSHhBsLNA03igK/Pg/7FoGDB4z8C7xrlGwNQpRjN1Iz+efiDf4+d53fD0cTfddUD42CPOnfPIjHwwJxdbDVsEohRF4k3FigabgByM6Eb7tD1C6oWBNGRoKjR8nXIUQ5ZzAqbDl9jWW7o9hwPJbs29M9ONvb0L1hIP1aBNE4yFPG1RGilJBwY4Hm4QYgJQ6+bA/JV6BmZxjwA+jluL8QWrl2M4OV+y6zbE8U5+JTTctr+bnSr3kVejauhJeLvYYVCiEk3FhQKsINwNX98E0XyE6HNv+FiGna1SKEANROyf9cvMEPuy+x5nA06VlGQD3FvFM9P/o3r0Kr6hXR66U1R4iSJuHGglITbgAOr4Cfbs+P1ftraNBH23qEECZJt7L45eBVftwTxeG7JvCsXMGJfs2C6NOsMgEeMmaVECVFwo0FpSrcAKyfCttng60TPLMWAhtpXZEQ4l+OXEnix3+iWLX/imngQL0O2tf2pV/zIB6t44udTAMhRLGScGNBqQs3RgP80B9O/wnuldQpGlx9ta5KCJGHW5kG1h6NZunuKP4+n2Ba7u3qwGMN/OkY6k94NS8JOkIUAwk3FpS6cAOQngTzO8D10xD0EAz5FWyl86IQpdm5ayn8+M9lVuy9THzKnZGR3RxteaS2LxGhfrSv7YO7TP8gRJGQcGNBqQw3APGn1YCTkQRNhkD3j2WKBiHKgCyDkS2nrvHn0VgiT8QSn5Jpus3ORsdD1SoSUdePiFA/KnlKHx0hCkvCjQWlNtwAnF4P3/8HUKDbB9BipNYVCSEKwGBUOBCVyPpjsaw/FsPZa6lmt9cLdCeirh8dQ/2oF+guY+gIUQASbiwo1eEGYNts2DAV9LYw6Geo2lbrioQQhXTuWgobjsey/lgsey/ewHjXp22ghyMRoWrQCa9aEXtb6acjhCUSbiwo9eFGUWDlSDi8HJy8IPxZ8K4J3rWhYnWwk2ZtIcqi6ykZRJ6IY8OxWLacvmYaQwfAzcGW9nV8iajrS/vavng4ST8dIf5Nwo0FpT7cAGTdUgf4iz7wrxt04FkFfGqDd607oce7FrhU1KJSIUQhpGcZ2HY6ng3HY9lwPM6sQ7KtXkezkAo0qORBHX936gS4UcPXFQdbGcVclG8SbiwoE+EG4FYi7P8Orh2Ha6cg/qR6VtW9OHmpIcen1u3gc/viWUWmdhCiFDMaFfZHJZoOX52JS8m1jo1eR3UfF1PYqXv7p7+7o/TbEeWGhBsLyky4+TdFgdR4iL8ddOJPq9evnYKkS/fezsYBKtZQW3kCG0Pd7urhLSFEqXQ+PpW/z13nRMxNjkcncyLmJkm3svJc19PZjjr+btTxd6dugPqzlp8bTvbyD42wPhJuLCiz4caSzDS4fuZ28Mm5nFYvhozc6/s1gNAnIfQJ9RCXEKLUUhSFmOR0TkTf5HhMMieib3IiJpmz11IxGHN/fOt0ULWiC3Vuh506/m40quKJr5ujBtULUXQk3FhgleHmXowGSLykhpxrJ+DcRji3GRTDnXV86qhBp+4T4FdPxtYRoozIyDZwJi7FFHbUlp6bZv137la/kjuP1valfR1fwip7YiOTf4oyRsKNBeUq3OQlLQFOroFjv8DZv8B4V3O3V3W1NSf0SQhoJEFHiDLo2s0MTsaoged49E2OXk3iRMxNs3W8XOxpV8uHR+r48nBNbzydZUR0UfpJuLGg3Iebu91KhFPr4NhqOLPB/BCWZxW1NSe0B1RqCnoZg0OIsurazQw2n7rGxhNxbDl9zTT5J6gTgDapUoFH6vjySG1f6ga4SSdlUSpJuLFAws09ZNxUJ+88tlodKTkr7c5t7pXUjsihT0JQuJx9JUQZlmUwsvfiDTaejGPjiThOxZqfneXv7sgjdXxoX9uXNjW8cXGw1ahSIcxJuLFAwk0+ZKapLTnHVqstO5l3NWm7+kGdx9WgE9JWWnSEKOMu30hj00m1VWf72XizwQXtbfS0qOp1u1XHh2o+rhpWKso7CTcWSLgpoKx0tSPysdVwYo06sWeOkLbwn4Xg4q1ZeUKIopOeZWDXuetsOnmNv07EcSkhzez2kIrOPFLHl9HtquPrLmdfiZIl4cYCCTcPIDsTzm+BYz/DkZWQlQoeQdD/ewgI07o6IUQRUhSFc/GpbDwRx8aTcew+n0CWQf26CPRwZOEzLajl56ZxlaI8kXBjgYSbIhJ3HJY+BQnnwNYJnvgUGv5H66qEEMUkJSObbafj+d+6E5y7loq7oy3zBzcjvJpM/SJKRkG+v6XDhCgc37ow8i+o0RGyb8HKEbBuMhiy77+tEKLMcXWwpUt9f356rhVNgyuQnJ7NoK938/uhaK1LEyIXCTei8JwqwFPLoM0E9fedc+D73upYOkIIq1TBxZ7vR4TTuZ4fmQYj437Yx9fbzmtdlhBmJNyIB6O3gYipasdiO2c4twm+bA8xRzQuTAhRXBztbPhsYFOGtAxGUeDN347x5m/HMOYxHYQQWpBwI4pGvZ4wfD14BkPiRfi6IxxdVfJ13EqEfYvVsXrKV3cyIUqUjV7HtCfq8VrXOgB8ve0845fuJyPbcJ8thSh+0qFYFK20BFjxjHr6OKiHrB59vfgH/kuOhl2fwT8L7ozLU6mZ2qpU9eHi3bcQ5dzP+6/w8oqDZBkUwqt68eWgZng422ldlrAycraUBRJuSoAhGyKnwY5P1d9rdITeX4GTZ9HvK/4M7PgYDi4FQ6a6rGINSL56Z5Tlao9AhylQqUnR718IAcD2M/E8t3gvNzOyqeXnysJhLQj0dNK6LGFFJNxYIOGmBB1aDr+MV8+m8qoO/ZeAb52iue/Le2H7R3D8N+D2WzjoIWjzItTsDKnXYMv7sHfhnclBQ5+ER14Hn1pFU4MQwszx6GSGLthNbHIGfu4OLBzWgroB8jkrioaEGwsk3JSw6IOwdCAkRYG9K/T8Auo+Xrj7UhQ4EwnbZ8OFrXeW1+qqhpoqD+XeJuE8bJoJh34EFNDpodFAaP8aeFQuXB1CiHu6kniLod/s5nRcCm4OtnwxqCmtasgo5uLBSbixQMKNBlLjYfnQO4Gk3avQ7rX8z0tlyFZHRd42G2IPq8v0ttCgL7R+Xh1z535ij8Jfb8HJNervNg7QYqTaJ8hFBiEToiglpWUxcvE/7D6fgJ2Njg/+E8aTjSppXZYo4yTcWCDhRiOGLPjzDfj7c/X3Wl2h15fgaOE1yEyDA9+rfXcSL6rL7Fyg6VBoOaZwLS9Ru2HDdLi4Tf3d3g1ajYOWY8FBhpIXoqikZxl4aflB0yB/r3Wtw7MPV0On02lcmSirJNxYIOFGYwd+gF9fAEMGeNdS++F41zRfJy0B9nwFf8+DtOvqMueKEP4cNB8Bzl4PVoOiwNlIiJyhHjbLuf+2E6HZM2AnEwIKURSMRoW31xw3DfI3tFUIbzweio1eAo4oOAk3Fki4KQWu7INlT0PyFXBwh17zoXYXSLoMOz9TOwFnparrelaBVs+r/WTsnYu2DqMRjq9WD1ddP6Mu8whS++M07A82tkW7PyHKqa+2nuOt348D0KWeP7P7N8LRrpiHhxBWR8KNBRJuSomUOPhxMFzaCeig+iPqjOPG23NT+TVQOwmH9ij+kGHIVg9/bXoXbl5Vl3nXUsfnqfsESDO6EA/st0NXmbDsIJkGI82CKzB/cDMquNhrXZYoQyTcWCDhphTJzoR1k9RDUDlC2qqhpnqHkg8VWbfUWrbOglu358cKbKKOkVOtvYQcIR7QrnPXGbXoH5LTs6nm48K3w1oQ5FXELbLCakm4sUDCTSl06Ee4sA2aDIHKTbWuBtKT1UlAd8y5c3jMpy40egoa9gM3P23rKw5Zt+D8Vrh1Axr0Kf4RpUW5dSr2JkO/2c3VpHR83BxYMLQ59St5aF2WKAMk3Fgg4UbkW8o12Poh7F0A2enqMp0N1Oyo9gGq1QVsy3CzeuIlOLUOTv+pHhLMeYwPv6wekhOimMQkpTN0wW5OxNzE1cGWH0Y+RIPKEnCEZRJuLJBwIwosPQmOrFT75Vzec2e5kxc07KsGnYCG2tWXX4ZsiPobTq+DU3/CtePmt7v6Q0oMoIOnf4IaHTQpU5QPyelZjPhWHQvH29Wen0a3Iriii9ZliVJMwo0FEm7EA7l2Sg05B5feDgK3+TWAxgPVgQVL06CAqdfhzHq1heZspBrUcuj0EBQONTtBrc7gGwq//VdtqXL2hue2gXuAdrULq3czPYv+X+7i6NVkgis6s+K5Vvi4OWhdliilJNxYIOFGFAlDtjrz+f7v1FGPcybt1NupQaHx01AjAmxKeGZkRYGYQ2rLzOl1cPkfTHNvAThVUCcyrdUZqj+ae8ygrHT4KkIdCTq4NQz+RU6JF8Uq7mY6vT/fQVTCLepXcmfpqJa4Osh7TuQm4cYCCTeiyKUlwJGf1KATfeDOchdf9bBV46fzN0VEYWWkwLlNapg5vR5uRpvf7tcAanVSJxSt3Oz+nYWvn4UvHobMFHVgww5vFFvpQgCcj0+lz+c7uJ6aSZsa3nwztDn2tvmcnkWUGxJuLJBwI4pV7FE4sEQ9bJUWf2d5YGO1b0793nmPsJydoYaUzNuXjBTIvAmZqXksv+tn2nW1H1BOyxGAnbN66nrNTurFoxBz+hz5CVY8g9r/ZoXaCiVEMTp0OZH+X+4iLdPAE2GBzO7XCL2MZCzuIuHGAgk3okQYstSzkA4sgVNr7wxOaGMPfvXVU68zUyDjdoAxZj3Y/iqEqC0ztTpBcJuimULitwnwz9fq1BTPbQP3wAe/TyEs2HLqGs8s3EO2UWF4m6q8/lhdmYtKmEi4sUDCjShxKdfg8I+w/3uIO2p5XVsncHAFexd1Uk8HV7C//buDq7rMdN1VnewzsIk6P1dRfwlkpcPXERBzGKq0giG/Sv8bUex+3n+FF5cdAGBS1zo82666tgWJUkPCjQUSboRmFAVij6jjy9i73hVcbl+3cyl94eH6WfiinXqIrO1L6mjNQhSz+VvO8fYadaiCWX3D6NWkssYVidJAwo0FEm6EKKAjK2HFMPX6wJ+gpvS/EcXv7d+PMX/reWz1Or4a0oz2tX21LklorCDf39IdXQhhWf1e0HyEen3VKEi6om09olyY1LUuPRoFkm1UGP3dPg5EJWpdkihDJNwIIe6v09sQEKaenfXTcHWcHyGKkV6v4399wmhb05tbWQaeWbiHc9dStC5LlBESboQQ92fnCP9ZCA7ucGknbHxL64pEOWBvq2fe001pWNmDhNRMBn+zm7jkdK3LEmWAhBshRP54VYMnPlWvb/tIHTBQiGLm4mDLN0ObE1LRmcs3bjFkwR6S0x9w6ARh9TQPN3PnziUkJARHR0fCw8PZvXu3xfUTExMZO3YsAQEBODg4UKtWLdasWVNC1QpRztXrAS1GqddXSv8bUTK8XR1Y9Ew43q4OHI9OZtSif8jINmhdlijFNA03y5YtY8KECUydOpV9+/YRFhZG586diYuLy3P9zMxMOnbsyIULF1ixYgUnT55k/vz5VKpUiBFYhRCF0+kttf/NrQR1FGOD/Bctil+Vis4sHNYcVwdbdp1LYMKygxiM5epkX1EAmp4KHh4eTvPmzZkzZw4ARqORoKAgxo8fz2uvvZZr/Xnz5vH+++9z4sQJ7OwKNyGhnAouRBFIOKeOf5ORDK1fhI7Tta5IlBM7zsQzdMEeMg1GhrQMZtoT9WQU43KiTJwKnpmZyd69e4mIuDNmhl6vJyIigp07d+a5zS+//ELLli0ZO3Ysfn5+1K9fn3feeQeD4d7NkxkZGSQnJ5tdhBAPyKsaPKn+U8L22XBqnabliPKjVQ1vZvULQ6eDb3de5LNNZ7UuSZRCmoWb+Ph4DAYDfn5+Zsv9/PyIiYnJc5tz586xYsUKDAYDa9as4Y033uDDDz/krbfufebGzJkz8fDwMF2CgoKK9HEIUW6FPgktnlWvr3oWki5rW48oNx5vGMjUx0MBeH/dSX7cE6VxRaK00bxDcUEYjUZ8fX358ssvadq0Kf369WPy5MnMmzfvnttMmjSJpKQk0yUqSv4IhCgynd5UZzy/dUP634gSNbR1Vca0V+edmrTqMJHHYzWuSJQmmoUbb29vbGxsiI01f0PGxsbi7++f5zYBAQHUqlULGxsb07K6desSExNDZmZmnts4ODjg7u5udhFCFBFbB+izABw8IOpviJyhdUX3F38Glg+DL9vDz2Ng52dwfgukJWhdmSiglzvX5j9NK2MwKoxdso+9F29oXZIoJTSbpc/e3p6mTZsSGRlJjx49ALVlJjIyknHjxuW5TevWrVmyZAlGoxG9Xs1lp06dIiAgAHt7+5IqXQhxN6+qav+bHwfBjk8guDXU7qJ1VbmlJcDm/8Ge+WC8PcLy1f3m67gFgn998Kt/+2cDqFgd9Da5709oTqfTMbNXA66nZvLXiTieWbiHn0a3pIavm9alCY1perbUsmXLGDJkCF988QUtWrRg9uzZ/Pjjj5w4cQI/Pz8GDx5MpUqVmDlzJgBRUVHUq1ePIUOGMH78eE6fPs0zzzzD888/z+TJk/O1TzlbSohi8ser8Pc8cKoAz24Fz1LSvy07E/Z8BZvfg/REdVnNztCwL8SfVmdqjzkMiRfz3t7WEXzr3g48DdSffvXAybOkHoG4j1uZBp76ahf7LyVS28+N359vg61Nmep1IfKhIN/fmrXcAPTr149r164xZcoUYmJiaNSoEWvXrjV1Mr506ZKphQYgKCiIdevW8d///peGDRtSqVIlXnjhBV599VWtHoIQIkfHNyFqN1zdp/a/GbYGbAo3ZEORUBQ4+Qf8+Tok3D6jxrcedH4Lqj+ae/30ZIg7pgad2CMQc0T9PStNbeH5dyuPR9BdLTz1oVp7CTwacbK34avBzegwazMnY2+yZPclBrcM0bosoSFNW260IC03QhSjGxdg3sOQkQStxqsD/mkh+hCs+z+4sFX93cUHHn0dGg8q2CEmo0F9THcHntgjkJTHiQl2zhA2AMKfA59aRfIwRMEs3nmBN1YfxcPJjk0T21PBRborWJOCfH9LuBFCFK3jv8Kyp9XrPb+A+n3ApoQaiW/GwF9vwv7vAQVsHKDlWGg7ARyKsB/GrUSIPXrnkFbU3xB/6s7t1TvAQ6PVn3o5PFJSsg1GHv90GydibjLooWDe7FFf65JEEZJwY4GEGyFKwNpJsOsz9bqDB1RrBzU7Qo0IcA8s+v1lpsHOueqEnlmp6rL6vSFiGnhWKfr9/ZuiqGdc/T1PPRTG7Y/VijUh/Fm1RcfBtfjrEOw8e50B83eh18GaF9pSx18+562FhBsLJNwIUQKyM9XDQkdWqGPg3M2vPtToADU6QpWHHqxfjtGo7mPDNEi+PYln5ebQ+R0IalH4+30QCedg93zYtxgyb6rLHDygySB10tEKwdrUVY6M+X4vaw7H0LJaRZaMDJfpGayEhBsLJNwIUYKMBrUj7un1cGY9XNmHqVUDwN7NvFXHo3L+7/vSLrWF6Oo+9XePILWlpn5vKA1fZhk34cAStTUn4Zy6TKeH2t3UQ1bBrUtHnVYoKiGNiFmbycg28vnAJnRtEKB1SaIISLixQMKNEBpKvQ5n/1KDzplISIs3v92nLtSMuN2q0xJs8+gQeuMCrJ8Kx35Wf7d3VfvUPDQG7JyK+xEUnNGoPt5dn8G5TXeW+zeA8NFqGLNz1Kw8azXrz5N88tcZKnk6EflSOxztZKyisk7CjQUSboQoJYxGiD4AZzaoLTtX/gHFeOd2Oxe1VadGhNqy4+gBWz+EXZ+DIVNtBWk8SD0LytVXs4dRIHHH1Zacg8sg+5a6zNkbmj0DzYeDW96js4uCS8vMpsOHm4lOSmdCx1o836Gm1iWJByThxgIJN0KUUmkJcG4jnN6gBp7UOPPbbR0hO129Xq09dHpbHWOmLEpLgH3fwu6vIPn2hKN6O6jXEx56Dio11bY+K/HLwas8/8N+HO30/PVSewI9S2HLnsi3Yg83UVFR6HQ6KldWj4/v3r2bJUuWEBoayqhRowpXdQmRcCNEGWA0QswhNeSc2aAODqgY1LOPOr8NNTtZR38VQzac+BV2zYOoXXeWV26h9sup+0TJnUZvhRRFod8Xu9h9IYEnwgL5ZEBjrUsSD6DYw03btm0ZNWoUgwYNIiYmhtq1a1OvXj1Onz7N+PHjmTJlSqGLL24SboQog24lwo3z6plWWo56XJyu7ldDzpGfwHh7dnX3yhA+CpoMVqe1EAV25EoS3edsQ1Fg+XMtaR7ipXVJopAK8v1dqNGljhw5QosW6mmWP/74I/Xr12fHjh18//33LFy4sDB3KYQQ9+bkCYGNrTfYgPr4en0B/z0K7V5V++IkX4b1U2BWKPz+kjoXliiQ+pU86N9cHeto2i9HMRjLVU+McqtQ4SYrKwsHBwcANmzYwBNPPAFAnTp1iI6OLrrqhBCivHHzg0f+Tw05T85VW6uy0tTJP+c0g+//o55xVr66Sz6QiZ1q4eZoy9Gryfz4Tx5TZwirU6hwU69ePebNm8fWrVtZv349Xbp0AeDq1atUrFixSAsUQohyyc4RGj8Nz22DIb+q4+Ogg9N/wuKe8NlDsHehOjqzsKiiqwMvRqjzfb2/7iRJt7I0rkgUt0KFm/fee48vvviC9u3bM2DAAMLCwgD45ZdfTIerhBBCFAGdDqo+DAN+gPF71Yk57V3h2gn49QX4KBQ2TIfkq1pXWqoNbhlMDV9XElIz+XiDHN6zdoU+FdxgMJCcnEyFCnc6uV24cAFnZ2d8fUvvmBPSoVgIUealJ6mTg/49DxIvqsv0tuqp5OGjobKcSp6XLaeuMfib3djqdax9sS01fItwMlVR7Iq9Q/GtW7fIyMgwBZuLFy8ye/ZsTp48WaqDjRBCWAVHD2g5Bp7fD/2+h+A2YMyGw8vhq0fh605wdJV6qrkwebiWDxF1/cg2Kkz/9RjlbJi3cqVQ4ebJJ59k0aJFACQmJhIeHs6HH35Ijx49+Pzzz4u0QCGEEPegt4G6j8Ow32HUZnX2cb0dRP0Ny4fCx2Gw/ePck5eWY288Xhd7Gz1bT8cTeTzu/huIMqlQ4Wbfvn20bdsWgBUrVuDn58fFixdZtGgRn3zySZEWKIQQIh8CG0HPebdPJX/tHqeSn9G6Ss0FV3RheNuqALz5+zEysg0aVySKQ6HCTVpaGm5u6rHKP//8k169eqHX63nooYe4ePFikRYohBCiANz84JFJt08l/+xfp5I3he/7qhN4luNDMmMfqYGvmwMXr6fxzbYLWpcjikGhwk2NGjX4+eefiYqKYt26dXTq1AmAuLg46aQrhBClgZ0jNB5451TyWl1RTyVfB4uehM9bw77FkJWudaUlztXBlle71AFgzl+niUsuf8+BtStUuJkyZQoTJ04kJCSEFi1a0LJlS0BtxWncWObuEEKIUiPnVPKnlqqnkrcYpc64HncUfhkHH9WDje9ASvnqf9KzcSUaBXmSmmng3bUntC5HFLFCnwoeExNDdHQ0YWFh6PVqRtq9ezfu7u7UqVOnSIssSnIquBCi3LuVCPsWwe4vIen2iL029lC/jzphZ0BDTcsrKQeiEukxdzsAq8a0onEVmb+rNCv2iTPvdvnyZQDTDOGlnYQbIYS4LWdW8p2fweXdd5aHtIWHxkCtzuoZWVZs4vKDrNh7mbAgT1aNboVebwWzzVupYh/nxmg0MmPGDDw8PAgODiY4OBhPT0/efPNNjEZjoYoWQghRwmxuD/w3Yj2MiIT6vUFnAxe2wtIB8GlT+PsLyEjRutJi80qX2rjY23AwKpGV+69oXY4oIoUKN5MnT2bOnDm8++677N+/n/379/POO+/w6aef8sYbbxR1jUIIIYpb5WbQ5xt48RC0fhEcPeHGefjjFfVU8nWTIfGS1lUWOV83R8Z3qAnAe2tPkJIhAx9ag0IdlgoMDGTevHmm2cBzrF69mjFjxnDlSulNv3JYSggh8iEzFQ7+ALs+h+u3x8fR6aFud+j0NngGaVtfEcrINtD5oy1cuJ7Gs+2qMalrXa1LEnko9sNSCQkJeXYarlOnDgkJCYW5SyGEEKWJvQs0HwFj98BTy6Fae1CMcGw1fPs4JEdrXWGRcbC14Y3HQwH4Ztt5zsenalyReFCFCjdhYWHMmTMn1/I5c+bQsGH56GUvhBDlgl4PtTrB4NXw3HaoEAI3LsDiHpB6XePiis6jdXxpV8uHLIPC278f07oc8YAKdVhq8+bNPPbYY1SpUsU0xs3OnTuJiopizZo1pqkZSiM5LCWEEA/gxkX4pgvcvAoBYeoAgY4eWldVJM7EpdBl9hayjQrfPtOCdrV8tC5J3KXYD0u1a9eOU6dO0bNnTxITE0lMTKRXr14cPXqUxYsXF6poIYQQZUCFYLUVx9kbog+q0zlkWsdhnBq+rgxtFQLAjF+PkmWQs3/Lqgce5+ZuBw8epEmTJhgMpXciMmm5EUKIIhB9SO17k54E1R6BAUvVKR/KuOT0LB55fxPXUzN5/bG6jGhbTeuSxG3F3nIjhBCinAtoCAN/UqdyOLcRVjwDhiytq3pg7o52vNy5NgAfbzjNtZsZGlckCkPCjRBCiMIJag4DfgAbBzj5O/w8GqxgINf/NAuiQSUPbmZk8+Ky/RiM5XcG9bJKwo0QQojCq9YO+i4CvS0cXg6/T4Ci6+2gCRu9jll9w3C2t2H7mevMWn9S65JEAdkWZOVevXpZvD0xMfFBahFCCFEW1e4Cvb6En0bA3gXqGDmd3lJnJC+javq58V7vhoz/YT9zN56lUVAFOob6aV2WyKcCtdx4eHhYvAQHBzN48ODiqlUIIURpVb83dP9Evb5zDmx+T9t6ikD3sECGtQ4BYMKPB7ggg/uVGUV6tlRZIGdLCSFEMdo1D9a+ql7v9Da0GqdtPQ8oM9vIgPm72HvxBnX83Vg1pjVO9tY9U3ppJWdLCSGE0MZDz8Gjr6vX/5wMexdqWs6DsrfVM/epJni72nMi5iav/3yEctYmUCZJuBFCCFG02k6E1i+o1399EQ4t17ScB+Xv4cgnAxqj18FP+y7zw+4orUsS9yHhRgghRNHS6SBiujrxJgqsehZO/K51VQ+kVXVvXumiThg97ZejHIxK1LYgYZGEGyGEEEVPp4Ou70PYAFAMsHwonN2odVUP5NmHq9Ep1I9Mg5Ex3+8jITVT65LEPUi4EUIIUTz0enhiDtTtDoZMWPoUXNqldVWFptPp+KBvGFW9XbiSeIsXlsoAf6WVhBshhBDFx8YWen8NNSIgKw2+/w9cPaB1VYXm7mjH5083wdFOz9bT8XwceVrrkkQeJNwIIYQoXrYO0HcxBLeGjGRY3BPiTmhdVaHV8XdnZq8GAHwSeZqNJ+I0rkj8m4QbIYQQxc/eWZ05PLAJ3EqARU9Cwnmtqyq0no0rM+ihYABeXHaAqIQ0jSsSd5NwI4QQomQ4usPTP4FvKKTEwKInIOmK1lUV2uuP1yUsyJOkW1mM/n4v6VkGrUsSt0m4EUIIUXKcvWDQz+BVDRIvweIekFk2Wz0cbG34fGATKjjbceRKMtN+Oap1SeI2CTdCCCFKlpsfDF4Nrv4Qfwr2L9a6okIL9HTikwGN0elg6Z4oftwjA/yVBhJuhBBClDzPKtDuZfX69k8gu+yOGdO2pg8vdawFwOurj3DkSpLGFQkJN0IIIbTR6Glw8YXky3C4bE/RMKZ9DTrU8SUz28jo7/eSlJaldUnlmoQbIYQQ2rBzhJZj1evbZ4PRqGk5D0Kv1zGrbyOCvJyISrjFi8v2Y5QB/jQj4UYIIYR2mj0Djh5q35sTv2ldzQPxcLbj84FNcbDVs/HkNeZuPKN1SeWWhBshhBDacXSH5iPV69tmgVK2WzvqV/LgzR71AZi14RRbTl3TuKLyScKNEEIIbT00Gmyd4Op+OFe2J9cE6NssiP7Ng1AUeGHpfq4k3tK6pHJHwo0QQghtuXhD0yHq9a2ztK2liEx7oh4NKnlwIy2LMd/tJSNbBvgrSRJuhBBCaK/lONDbwoWtELVH62oemKOdDZ8NbIKHkx0HLycx49djWpdUrki4EUIIoT3PIGjYX72+zTpab4K8nJndvxE6HXz/9yV+2ntZ65LKDQk3QgghSoc2LwI6OLkGYq2jpeOR2r48/2hNACatOsw/FxI0rqh8kHAjhBCidPCuCXW7q9e3z9a0lKL0fIeaRNT1IzPbyIhF/3DuWorWJVk9CTdCCCFKj7YT1J+HV8CNC5qWUlRs9Do+GdCIsMoeJKZlMXTBHuJTMrQuy6qVinAzd+5cQkJCcHR0JDw8nN27d99z3YULF6LT6cwujo6OJVitEEKIYhPYGKo/CopBnXPKSjjb2/L10OYEeTlxKSGN4d/+Q1pmttZlWS3Nw82yZcuYMGECU6dOZd++fYSFhdG5c2fi4uLuuY27uzvR0dGmy8WLF0uwYiGEEMWqze3Wm/3fwc1YbWspQt6uDiwc1gJPZzsORiXy/A8HMMgUDcVC83Aza9YsRo4cybBhwwgNDWXevHk4OzvzzTff3HMbnU6Hv7+/6eLn51eCFQshhChWIW2gcnMwZMCuz7SupkhV93Hlq8HNsLfVs+F4LNN/PYpSxkdlLo00DTeZmZns3buXiIgI0zK9Xk9ERAQ7d+6853YpKSkEBwcTFBTEk08+ydGjR++5bkZGBsnJyWYXIYQQpZhOB21fUq/v+RpuJWpaTlFrFuLF7H7qKeKLdl5k/tZzWpdkdTQNN/Hx8RgMhlwtL35+fsTExOS5Te3atfnmm29YvXo13333HUajkVatWnH5ct7jB8ycORMPDw/TJSgoqMgfhxBCiCJWszP4hkLmTdgzX+tqily3BgFM7lYXgHfWnODXg1c1rsi6aH5YqqBatmzJ4MGDadSoEe3atWPlypX4+PjwxRdf5Ln+pEmTSEpKMl2ioqJKuGIhhBAFptdDm/+q13d9Dplp2tZTDIa3qcrQViEAvPTjQXaflzFwioqm4cbb2xsbGxtiY807jMXGxuLv75+v+7Czs6Nx48acOZP31PIODg64u7ubXYQQQpQB9XqBZzCkXYd9i7SupsjpdDreeDyUzvX8yDQYGbnoH87EyRg4RUHTcGNvb0/Tpk2JjIw0LTMajURGRtKyZct83YfBYODw4cMEBAQUV5lCCCG0YGMLrV9Qr+/4FLIzta2nGNjodczu15jGVTxJupXF0AW7ibuZrnVZZZ7mh6UmTJjA/Pnz+fbbbzl+/DijR48mNTWVYcOGATB48GAmTZpkWn/GjBn8+eefnDt3jn379vH0009z8eJFRowYodVDEEIIUVwaDQRXP0i+DIeXa11NsXCyt+Grwc0IqejM5Ru3GL5QxsB5UJqHm379+vHBBx8wZcoUGjVqxIEDB1i7dq2pk/GlS5eIjo42rX/jxg1GjhxJ3bp16datG8nJyezYsYPQ0FCtHoIQQojiYucILceq17d9BEaDtvUUk4q3x8DxcrHn8JUkxi3ZT7bBqHVZZZZOKWcn2CcnJ+Ph4UFSUpL0vxFCiLIg4yZ8VA/Sk6DvIgh9UuuKis2+SzcY8OUuMrKNDAyvwls96qPT6bQuq1QoyPe35i03QgghhEUObtBilHp96yyw4v/Jm1SpwMf9G6PTwfd/X2LeZhkDpzAk3AghhCj9wkeDnTNEH4BzG7Wuplh1qe/PlMfVrhbvrT3B6gNXNK6o7JFwI4QQovRzqQhNhqjXt87StpYSMKx1VYa3qQrAy8sPsevc9SLfR9KtLH4/FM3E5Qd5eflBUjKspxOzrdYFCCGEEPnSahzs+QoubIWoPRDUXOuKitXkbnW5mniLP47EMGrRP/w0uhU1/dwKfX+KonA6LoW/TsSx8UQc/1y8YTZx57n4VL59pgWuDmU/GkiHYiGEEGXHz2PhwHdQuxsM+EHraopdepaBgV/9zd6LN6jk6cSqMa3wdXfM9/a3Mg3sOBvPxpNxbDxxjSuJt8xur+7jQpsa3qzaf4Xk9GyaBVdgYSkNOAX5/pZwI4QQouyIPw1zmgMKjN4JftY/DMiN1Ex6fb6D8/Gp1At058dnW+JiIXxcup7GxpNx/HUijp3nrpOZfeeUcntbPa2qV+SR2r48UtuXKhWdATh0OZGBX/3NzfRsmodUYMGw0hdwJNxYIOFGCCHKuB8Hw7HV0KAv9La+STXzcvF6Kr0+28H11Eza1/bhq8HNsLVRu81mZhv550KCerjpZBxnr6WabVvJ04lH6vjwaB1fWlbzxsneJs99HIxK5Omv7wSchcNaWAxRJU3CjQUSboQQooy7egC+bAc6G3h+H1QI0bqiEnEgKpH+X+4kPcvIf5pWpllIBTaeuMa2M/FmnYFt9TqahVRQW2fq+FLT1zXfY+UciEpk0Fd/czMjmxYhXiwY1rzUBBwJNxZIuBFCCCuwuBecjYRmw+Fx6z97Ksf6Y7E8u/gfjP/65vZ2daB9bbV1pk1Nb9wd7Qq9D7OAU9WLBUNLR8CRcGOBhBshhLACF7bBwsfAxgFePAxuflpXVGKW/H2J6b8epU6AO4/W9uWROj7UD/RAry+6kYz3X7rB4K93mwLOwmHNcbbXNuBIuLFAwo0QQlgBRYGvO8Hl3erM4R1naF2R1dl3O+CkZGQTXlU9RKVlwJHpF4QQQlg3nQ7avqRe3/MN3LqhbT1WqEmVCiwarp419ff5BJ5ZuKfMzFYu4UYIIUTZVKsz+NaDzJuw+yutq7FKTapUMA3st+tcAsMX/sOtzNI/M7uEGyGEEGWTTgdt/qte//tzyEzTth4r1TS4At8+0xwXext2nrvOMwv3lPqAI+FGCCFE2VWvp3oqeNp12LdI62qsVtNgLxYNb2EKOMO/Ld0BR8KNEEKIssvGVu1QDLDjU8jO1LYeK9Y02Itvn1EDzo6z1xmxqPQGHAk3Qgghyrawp8DVD5Ivw+Efta7GqjULuRNwtp+5zshF/5CeVfoCjoQbIYQQZZudI7Qcq17/e562tZQDzUK8WPhMC5ztbdh2Jp4R35a+gCPhRgghRNnXeBDobSHmMMQd17oaq9f8dgtOTsApbS04Em6EEEKUfc5eULOTev2QHJoqCc1DvFg4TA04W0+XroAj4UYIIYR1aPAf9efhFWA0altLOZEz91ROwBm1eG+pCDgSboQQQliH2l3B3g2SLkHULq2rKTfCq1VkwdDmONnZsOXUNZ4tBQFHwo0QQgjrYOcEoU+o1+XQVIkKr1aRBcPUgLP51DWe+07bgCPhRgghhPXIOTR1dJWMeVPCHqpWkW9ut+C4OthiW4SzlBeUtvOXCyGEEEWp6sPg6g8pMXBmPdR5TOuKypWW1Suyckwravq6YmujXfuJtNwIIYSwHnobaNBHvS6HpjRRN8Bd02ADEm6EEEJYm4Z91Z8n/4D0JG1rEZqQcCOEEMK6+DcE79pgyIDjv2pdjdCAhBshhBDWRaeDhrc7Fh9apm0tQhMSboQQQlifnLOmzm+F5Kva1iJKnIQbIYQQ1qdCCAQ9BChw5CetqxElTMKNEEII65TTsVgOTZU7Em6EEEJYp3o9ZabwckrCjRBCCOvk7AU1OqrXZcybckXCjRBCCOuVc2hKZgovVyTcCCGEsF5mM4X/rXU1ooRIuBFCCGG9zGYKl47F5YWEGyGEENZNZgovdyTcCCGEsG45M4WnJ6ozhQurJ+FGCCGEdZOZwssdCTdCCCGsX86hqVNrZabwckDCjRBCCOsXEKbOFJ6dLjOFlwMSboQQQlg/s5nC5dCUtZNwI4QQonwwzRS+RWYKt3ISboQQQpQPMlN4uSHhRgghRPkhh6bKBQk3Qgghyo96vW7PFH4I4k5oXY0oJhJuhBBClB93zxR+WFpvrJWEGyGEEOVLzkzhh5bLTOFWSsKNEEKI8kVmCrd6Em6EEEKUL3ZOULe7el1mCrdKEm6EEEKUPzmHpo79LDOFWyEJN0IIIcqfnJnCb92AMxu0rkYUMQk3Qgghyh+zmcLl0JS1kXAjhBCifJKZwq2WhBshhBDlU0AYeNeSmcKtkIQbIYQQ5ZNOd9eYNzKgnzWRcCOEEKL8MpspPFrbWkSRkXAjhBCi/DKbKXyF1tWIIlIqws3cuXMJCQnB0dGR8PBwdu/ena/tli5dik6no0ePHsVboBBCCOslM4VbHc3DzbJly5gwYQJTp05l3759hIWF0blzZ+Li4ixud+HCBSZOnEjbtm1LqFIhhBBWKbSnzBRuZTQPN7NmzWLkyJEMGzaM0NBQ5s2bh7OzM9988809tzEYDAwcOJDp06dTrVq1EqxWCCGE1XGpKDOFWxlNw01mZiZ79+4lIiLCtEyv1xMREcHOnTvvud2MGTPw9fVl+PDh991HRkYGycnJZhchhBDCTM6hqcMyU7g10DTcxMfHYzAY8PPzM1vu5+dHTExMntts27aNr7/+mvnz5+drHzNnzsTDw8N0CQoKeuC6hRBCWJlat2cKT5SZwq2B5oelCuLmzZsMGjSI+fPn4+3tna9tJk2aRFJSkukSFRVVzFUKIYQoc+yd78wULoemyjxbLXfu7e2NjY0NsbGxZstjY2Px9/fPtf7Zs2e5cOEC3bt3Ny0z3m4+tLW15eTJk1SvXt1sGwcHBxwcHIqheiGEEFal4X/g4BI4ugq6vAe29lpXJApJ05Ybe3t7mjZtSmRkpGmZ0WgkMjKSli1b5lq/Tp06HD58mAMHDpguTzzxBI888ggHDhyQQ05CCCEKr2o7cPWTmcKtgKYtNwATJkxgyJAhNGvWjBYtWjB79mxSU1MZNmwYAIMHD6ZSpUrMnDkTR0dH6tevb7a9p6cnQK7lQgghRIHobaB+H9g1Vz00Vaeb1hWJQtI83PTr149r164xZcoUYmJiaNSoEWvXrjV1Mr506RJ6fZnqGiSEEKKsathXDTcn/4D0ZHB017oiUQg6RVEUrYsoScnJyXh4eJCUlIS7u7xphRBC3EVRYG4LiD8FT34GjQdqXZG4rSDf39IkIoQQQuTQ6aBBzkzhy7StRRSahBshhBDibg36qD9lpvAyS8KNEEIIcTevqndmCt/0jtbViEKQcCOEEEL8W8RU9ee+RXBuk6aliIKTcCOEEEL8W3AraD5Svf7L85CZqm09okAk3AghhBB5iZgKHkGQeBEi39S6GlEAEm6EEEKIvDi4QffZ6vW/50HUbk3LEfkn4UYIIYS4lxoREPYUoMDqcZCdoXVFIh8k3AghhBCWdH4bXHwh/iRs/p/W1Yh8kHAjhBBCWOLsBY99qF7f9hFEH9K2HnFfEm6EEEKI+wl9AkKfBMUAq8eCIVvrioQFEm6EEEKI/Oj6Pjh6Qswh2PGJ1tUICyTcCCGEEPnh5gdd3lWvb3oX4k9rW4+4Jwk3QgghRH6F9VfPoDJkqGdPGY1aVyTyIOFGCCGEyC+dDh6fDfauELUL9nyldUUiDxJuhBBCiILwDIKIaer1DdPgxkUtqxF5kHAjhBBCFFSz4RDcGrJS4dcXQFG0rkjcRcKNEEIIUVB6PXT/BGwd4dxGOLBE64rEXSTcCCGEEIXhXQPaT1Kvr5sEN2O0rUeYSLgRQgghCqvlOAhoBOlJ8PtLcniqlJBwI4QQQhSWjS08ORf0tnDiNzj2s9YVCSTcCCGEEA/Gvz60fUm9vuZlSEvQth4h4UYIIYR4YG1fAp86kHoN1k7SuppyT8KNEEII8aBsHdTDUzo9HFoKp/7UuqJyTcKNEEIIURQqN4OHxqjXf3sR0pM1Lac8k3AjhBBCFJVHJkOFEEi+oo5eLDQh4UYIIYQoKvbO8MSn6vV/voYL27Stp5yScCOEEEIUpaoPQ9Oh6vVfxkNmmqbllEcSboQQQoii1nEGuAVCwjnY9I7W1ZQ7Em6EEEKIouboAd1nq9d3zoUrezUtp7yRcCOEEEIUh1qdocF/QDHC6vGQnal1ReWGrdYFCCGEEFary3twdiPEHYUVw6BiDUC5PQfV7Z93X7/XT8VovszGHuo8DtXag06n2cMrrXSKUr5m+UpOTsbDw4OkpCTc3d21LkcIIYS1O/ITrHimeO7bvwG0fhFCe6jzXFmxgnx/S7gRQgghipOiwN6FEH8K0N1padHpbv+uv+t6Hj91+n8tA5KvwsGlkHX7TCyPKtByDDQeBA6uJf4QS4KEGwsk3AghhLAKaQmw52v4ex6kxavLHD2h+QgIfxZcfTUtr6hJuLFAwo0QQgirknULDv4AO+ZAwll1mY0DhPWHVuPBu6a29RURCTcWSLgRQghhlYwGOLkGtn8Ml/fcXqiDOo9Bq+ehSrim5T0oCTcWSLgRQghh1RQFLu1SQ86pP+4sDwpXQ07tbqAveyPBSLixQMKNEEKIcuPaSdjxKRxaBobb4+xUrAmtxkHD/mDnqG19BSDhxgIJN0IIIcqdmzFqx+M930BGkrrMxRfCR0Gz4eDspW19+SDhxgIJN0IIIcqtjJuwbxHs/AySL6vL7FzUzse1u0Jwa3Vm81JIwo0FEm6EEEKUe4YsOLISdnwCsUfuLLdxgJDWUCNCvXjXKjUjIEu4sUDCjRBCCHGbosC5jXBsNZzecKc1J4dHENTooAadqg+rE4JqRMKNBRJuhBBCiDwoijqK8pkN6uXCdjBk3LldZ6OecZUTdvwbluhZVxJuLJBwI4QQQuRDZhpc3H4n7Fw/Y367iw9Uvx10qj8CLt7FWo6EGwsk3AghhBCFkHAezkbCmUg4txmyUu+6UQeBje/01anUtMgn8pRwY4GEGyGEEOIBZWdC1K7brTp/Qexh89u9qsH4fUXaGbkg39/WPT+6EEIIIYqerb3awbjqw9BxBiRHw9m/1LBz9i8IbKLpWVYSboQQQgjxYNwDoPFA9WI0QHqSpuWUvcklhBBCCFF66W00H/FYwo0QQgghrIqEGyGEEEJYFQk3QgghhLAqEm6EEEIIYVUk3AghhBDCqki4EUIIIYRVkXAjhBBCCKsi4UYIIYQQVkXCjRBCCCGsSqkIN3PnziUkJARHR0fCw8PZvXv3PddduXIlzZo1w9PTExcXFxo1asTixYtLsFohhBBClGaah5tly5YxYcIEpk6dyr59+wgLC6Nz587ExcXlub6XlxeTJ09m586dHDp0iGHDhjFs2DDWrVtXwpULIYQQojTSKYqiaFlAeHg4zZs3Z86cOQAYjUaCgoIYP348r732Wr7uo0mTJjz22GO8+eab9123IFOmCyGEEKJ0KMj3t6YtN5mZmezdu5eIiAjTMr1eT0REBDt37rzv9oqiEBkZycmTJ3n44YfzXCcjI4Pk5GSzixBCCCGsl62WO4+Pj8dgMODn52e23M/PjxMnTtxzu6SkJCpVqkRGRgY2NjZ89tlndOzYMc91Z86cyfTp03Mtl5AjhBBClB0539v5OeCkabgpLDc3Nw4cOEBKSgqRkZFMmDCBatWq0b59+1zrTpo0iQkTJph+v3LlCqGhoQQFBZVgxUIIIYQoCjdv3sTDw8PiOpqGG29vb2xsbIiNjTVbHhsbi7+//z230+v11KhRA4BGjRpx/PhxZs6cmWe4cXBwwMHBwfS7q6srUVFRuLm5odPpiuaB3JacnExQUBBRUVHSn0dD8jqUDvI6lA7yOpQO8jo8OEVRuHnzJoGBgfddV9NwY29vT9OmTYmMjKRHjx6A2qE4MjKScePG5ft+jEYjGRkZ+VpXr9dTuXLlwpSbb+7u7vLmLQXkdSgd5HUoHeR1KB3kdXgw92uxyaH5YakJEyYwZMgQmjVrRosWLZg9ezapqakMGzYMgMGDB1OpUiVmzpwJqH1omjVrRvXq1cnIyGDNmjUsXryYzz//XMuHIYQQQohSQvNw069fP65du8aUKVOIiYmhUaNGrF271tTJ+NKlS+j1d07qSk1NZcyYMVy+fBknJyfq1KnDd999R79+/bR6CEIIIYQoRTQPNwDjxo2752GoTZs2mf3+1ltv8dZbb5VAVQXn4ODA1KlTzfr4iJInr0PpIK9D6SCvQ+kgr0PJ0nwQPyGEEEKIoqT59AtCCCGEEEVJwo0QQgghrIqEGyGEEEJYFQk3QgghhLAqEm6KyNy5cwkJCcHR0ZHw8HB2796tdUnlzrRp09DpdGaXOnXqaF2W1duyZQvdu3cnMDAQnU7Hzz//bHa7oihMmTKFgIAAnJyciIiI4PTp09oUa8Xu9zoMHTo0199Hly5dtCnWSs2cOZPmzZvj5uaGr68vPXr04OTJk2brpKenM3bsWCpWrIirqyu9e/fONUq/eHASborAsmXLmDBhAlOnTmXfvn2EhYXRuXNn4uLitC6t3KlXrx7R0dGmy7Zt27QuyeqlpqYSFhbG3Llz87z9f//7H5988gnz5s3j77//xsXFhc6dO5Oenl7ClVq3+70OAF26dDH7+/jhhx9KsELrt3nzZsaOHcuuXbtYv349WVlZdOrUidTUVNM6//3vf/n1119Zvnw5mzdv5urVq/Tq1UvDqq2UIh5YixYtlLFjx5p+NxgMSmBgoDJz5kwNqyp/pk6dqoSFhWldRrkGKKtWrTL9bjQaFX9/f+X99983LUtMTFQcHByUH374QYMKy4d/vw6KoihDhgxRnnzySU3qKa/i4uIUQNm8ebOiKOp7387OTlm+fLlpnePHjyuAsnPnTq3KtErScvOAMjMz2bt3LxEREaZler2eiIgIdu7cqWFl5dPp06cJDAykWrVqDBw4kEuXLmldUrl2/vx5YmJizP4+PDw8CA8Pl78PDWzatAlfX19q167N6NGjuX79utYlWbWkpCQAvLy8ANi7dy9ZWVlmfw916tShSpUq8vdQxCTcPKD4+HgMBoNpuogcfn5+xMTEaFRV+RQeHs7ChQtZu3Ytn3/+OefPn6dt27bcvHlT69LKrZy/Afn70F6XLl1YtGgRkZGRvPfee2zevJmuXbtiMBi0Ls0qGY1GXnzxRVq3bk39+vUB9e/B3t4eT09Ps3Xl76HolYrpF4QoCl27djVdb9iwIeHh4QQHB/Pjjz8yfPhwDSsTQnv9+/c3XW/QoAENGzakevXqbNq0iQ4dOmhYmXUaO3YsR44ckX5/GpGWmwfk7e2NjY1Nrt7usbGx+Pv7a1SVAPD09KRWrVqcOXNG61LKrZy/Afn7KH2qVauGt7e3/H0Ug3HjxvHbb7+xceNGKleubFru7+9PZmYmiYmJZuvL30PRk3DzgOzt7WnatCmRkZGmZUajkcjISFq2bKlhZSIlJYWzZ88SEBCgdSnlVtWqVfH39zf7+0hOTubvv/+Wvw+NXb58mevXr8vfRxFSFIVx48axatUq/vrrL6pWrWp2e9OmTbGzszP7ezh58iSXLl2Sv4ciJoelisCECRMYMmQIzZo1o0WLFsyePZvU1FSGDRumdWnlysSJE+nevTvBwcFcvXqVqVOnYmNjw4ABA7QuzaqlpKSY/fd//vx5Dhw4gJeXF1WqVOHFF1/krbfeombNmlStWpU33niDwMBAevTooV3RVsjS6+Dl5cX06dPp3bs3/v7+nD17lldeeYUaNWrQuXNnDau2LmPHjmXJkiWsXr0aNzc3Uz8aDw8PnJyc8PDwYPjw4UyYMAEvLy/c3d0ZP348LVu25KGHHtK4eiuj9ela1uLTTz9VqlSpotjb2ystWrRQdu3apXVJ5U6/fv2UgIAAxd7eXqlUqZLSr18/5cyZM1qXZfU2btyoALkuQ4YMURRFPR38jTfeUPz8/BQHBwelQ4cOysmTJ7Ut2gpZeh3S0tKUTp06KT4+PoqdnZ0SHBysjBw5UomJidG6bKuS1/MPKAsWLDCtc+vWLWXMmDFKhQoVFGdnZ6Vnz55KdHS0dkVbKZ2iKErJRyohhBBCiOIhfW6EEEIIYVUk3AghhBDCqki4EUIIIYRVkXAjhBBCCKsi4UYIIYQQVkXCjRBCCCGsioQbIYQQQlgVCTdCiHJJp9Px888/a12GEKIYSLgRQpS4oUOHotPpcl26dOmidWlCCCsgc0sJITTRpUsXFixYYLbMwcFBo2qEENZEWm6EEJpwcHDA39/f7FKhQgVAPWT0+eef07VrV5ycnKhWrRorVqww2/7w4cM8+uijODk5UbFiRUaNGkVKSorZOt988w316tXDwcGBgIAAxo0bZ3Z7fHw8PXv2xNnZmZo1a/LLL7+Ybrtx4wYDBw7Ex8cHJycnatasmSuMCSFKJwk3QohS6Y033qB3794cPHiQgQMH0r9/f44fPw5AamoqnTt3pkKFCuzZs4fly5ezYcMGs/Dy+eefM3bsWEaNGsXhw4f55ZdfqFGjhtk+pk+fTt++fTl06BDdunVj4MCBJCQkmPZ/7Ngx/vjjD44fP87nn3+Ot7d3yT0BQojC03rmTiFE+TNkyBDFxsZGcXFxMbu8/fbbiqKosys/99xzZtuEh4cro0ePVhRFUb788kulQoUKSkpKiun233//XdHr9aaZrgMDA5XJkyffswZAef31102/p6SkKIDyxx9/KIqiKN27d1eGDRtWNA9YCFGipM+NEEITjzzyCJ9//rnZMi8vL9P1li1bmt3WsmVLDhw4AMDx48cJCwvDxcXFdHvr1q0xGo2cPHkSnU7H1atX6dChg8UaGjZsaLru4uKCu7s7cXFxAIwePZrevXuzb98+OnXqRI8ePWjVqlWhHqsQomRJuBFCaMLFxSXXYaKi4uTklK/17OzszH7X6XQYjUYAunbtysWLF1mzZg3r16+nQ4cOjB07lg8++KDI6xVCFC3pcyOEKJV27dqV6/e6desCULduXQ4ePEhqaqrp9u3bt6PX66lduzZubm6EhIQQGRn5QDX4+PgwZMgQvvvuO2bPns2XX375QPcnhCgZ0nIjhNBERkYGMTExZstsbW1NnXaXL19Os2bNaNOmDd9//z27d+/m66+/BmDgwIFMnTqVIUOGMG3aNK5du8b48eMZNGgQfn5+AEybNo3nnnsOX19funbtys2bN9m+fTvjx4/PV31TpkyhadOm1KtXj4yMDH777TdTuBJClG4SboQQmli7di0BAQFmy2rXrs2JEycA9UympUuXMmbMGAICAvjhhx8IDQ0FwNnZmXXr1vHCCy/QvHlznJ2d6d27N7NmzTLd15AhQ0hPT+ejjz5i4sSJeHt706dPn3zXZ29vz6RJk7hw4QJOTk60bduWpUuXFsEjF0IUN52iKIrWRQghxN10Oh2rVq2iR48eWpcihCiDpM+NEEIIIayKhBshhBBCWBXpcyOEKHXkaLkQ4kFIy40QQgghrIqEGyGEEEJYFQk3QgghhLAqEm6EEEIIYVUk3AghhBDCqki4EUIIIYRVkXAjhBBCCKsi4UYIIYQQVkXCjRBCCCGsyv8Dxi8vbIGAZK8AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['loss'][1:], label='Training')\n", "plt.plot(history.history['val_loss'][1:], label='Validation')\n", "plt.title('Training a Quantum CNN to Detect Excited Cluster States')\n", "plt.xlabel('Epochs')\n", "plt.ylabel('Loss')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "GyrkcEReQ5Bc" }, "source": [ "## 2. Hybrid models\n", "\n", "You don't have to go from eight qubits to one qubit using quantum convolution—you could have done one or two rounds of quantum convolution and fed the results into a classical neural network. This section explores quantum-classical hybrid models." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "A2tOK22t7Kjm" }, "source": [ "### 2.1 Hybrid model with a single quantum filter\n", "\n", "Apply one layer of quantum convolution, reading out $\\langle \\hat{Z}_n \\rangle$ on all bits, followed by a densely-connected neural network.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "lKXuOApgWYFa" }, "source": [ "#### 2.1.1 Model definition" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:19.812789Z", "iopub.status.busy": "2025-01-10T12:44:19.812186Z", "iopub.status.idle": "2025-01-10T12:44:20.007539Z", "shell.execute_reply": "2025-01-10T12:44:20.006737Z" }, "id": "Ut-U1hBkQ8Fs", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmpfs/src/tf_docs_env/lib/python3.9/site-packages/keras/src/initializers/initializers.py:120: UserWarning: The initializer RandomUniform is unseeded and being called multiple times, which will return identical values each time (even if the initializer is unseeded). Please update your code to provide a seed to the initializer, or avoid using the same initializer instance more than once.\n", " warnings.warn(\n" ] }, { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 1-local operators to read out\n", "readouts = [cirq.Z(bit) for bit in cluster_state_bits[4:]]\n", "\n", "\n", "def multi_readout_model_circuit(qubits):\n", " \"\"\"Make a model circuit with less quantum pool and conv operations.\"\"\"\n", " model_circuit = cirq.Circuit()\n", " symbols = sympy.symbols('qconv0:21')\n", " model_circuit += quantum_conv_circuit(qubits, symbols[0:15])\n", " model_circuit += quantum_pool_circuit(qubits[:4], qubits[4:],\n", " symbols[15:21])\n", " return model_circuit\n", "\n", "\n", "# Build a model enacting the logic in 2.1 of this notebook.\n", "excitation_input_dual = tf.keras.Input(shape=(), dtype=tf.dtypes.string)\n", "\n", "cluster_state_dual = tfq.layers.AddCircuit()(\n", " excitation_input_dual, prepend=cluster_state_circuit(cluster_state_bits))\n", "\n", "quantum_model_dual = tfq.layers.PQC(\n", " multi_readout_model_circuit(cluster_state_bits),\n", " readouts)(cluster_state_dual)\n", "\n", "d1_dual = tf.keras.layers.Dense(8)(quantum_model_dual)\n", "\n", "d2_dual = tf.keras.layers.Dense(1)(d1_dual)\n", "\n", "hybrid_model = tf.keras.Model(inputs=[excitation_input_dual], outputs=[d2_dual])\n", "\n", "# Display the model architecture\n", "tf.keras.utils.plot_model(hybrid_model,\n", " show_shapes=True,\n", " show_layer_names=False,\n", " dpi=70)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "qDqoLZJuWcgH" }, "source": [ "#### 2.1.2 Train the model" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:20.010394Z", "iopub.status.busy": "2025-01-10T12:44:20.010138Z", "iopub.status.idle": "2025-01-10T12:44:30.950854Z", "shell.execute_reply": "2025-01-10T12:44:30.950191Z" }, "id": "EyYw9kYIRCE7", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 3s - loss: 1.0470 - custom_accuracy: 0.5625" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 1.0748 - custom_accuracy: 0.4375" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 1.0279 - custom_accuracy: 0.5312" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 1.0187 - custom_accuracy: 0.5208" ] }, { "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\b\r", "7/7 [==============================] - 1s 92ms/step - loss: 1.0159 - custom_accuracy: 0.5179 - val_loss: 1.0093 - val_custom_accuracy: 0.3958\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 2/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.9897 - custom_accuracy: 0.5625" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 1.0030 - custom_accuracy: 0.4583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.9942 - custom_accuracy: 0.5875" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.9899 - custom_accuracy: 0.6161" ] }, { "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\b\r", "7/7 [==============================] - 0s 64ms/step - loss: 0.9899 - custom_accuracy: 0.6161 - val_loss: 0.9553 - val_custom_accuracy: 0.8125\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 3/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.9630 - custom_accuracy: 0.7500" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.9541 - custom_accuracy: 0.7292" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.9299 - custom_accuracy: 0.7250" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.9317 - custom_accuracy: 0.7411" ] }, { "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\b\r", "7/7 [==============================] - 0s 61ms/step - loss: 0.9317 - custom_accuracy: 0.7411 - val_loss: 0.8141 - val_custom_accuracy: 0.8542\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 4/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.8449 - custom_accuracy: 0.8125" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.7579 - custom_accuracy: 0.8542" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.7769 - custom_accuracy: 0.8000" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7544 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - 0s 61ms/step - loss: 0.7544 - custom_accuracy: 0.8125 - val_loss: 0.5967 - val_custom_accuracy: 0.8750\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 5/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.6289 - custom_accuracy: 0.8125" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.5892 - custom_accuracy: 0.8333" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.7183 - custom_accuracy: 0.8000" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.6727 - custom_accuracy: 0.8304" ] }, { "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\b\r", "7/7 [==============================] - 0s 61ms/step - loss: 0.6727 - custom_accuracy: 0.8304 - val_loss: 0.7394 - val_custom_accuracy: 0.7708\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 6/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.5468 - custom_accuracy: 0.8125" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.6720 - custom_accuracy: 0.7917" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.5896 - custom_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\b\b\b\b\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.5776 - custom_accuracy: 0.8839" ] }, { "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\b\r", "7/7 [==============================] - 0s 60ms/step - loss: 0.5776 - custom_accuracy: 0.8839 - val_loss: 0.4036 - val_custom_accuracy: 0.9167\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 7/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.3893 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.3407 - custom_accuracy: 0.8958" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.4423 - custom_accuracy: 0.8375" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.4326 - custom_accuracy: 0.8571" ] }, { "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\b\r", "7/7 [==============================] - 0s 59ms/step - loss: 0.4326 - custom_accuracy: 0.8571 - val_loss: 0.3918 - val_custom_accuracy: 0.8958\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 8/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.5556 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.3997 - custom_accuracy: 0.9167" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2891 - custom_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\b\b\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.2957 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 0s 59ms/step - loss: 0.2957 - custom_accuracy: 0.9643 - val_loss: 0.1578 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 9/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.3478 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2077 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2077 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.2192 - custom_accuracy: 0.9554" ] }, { "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\b\r", "7/7 [==============================] - 0s 59ms/step - loss: 0.2192 - custom_accuracy: 0.9554 - val_loss: 0.1255 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 10/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2096 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1853 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1932 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1944 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 59ms/step - loss: 0.1944 - custom_accuracy: 0.9732 - val_loss: 0.1515 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 11/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1166 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1257 - custom_accuracy: 0.9792" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1775 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.2123 - custom_accuracy: 0.9554" ] }, { "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\b\r", "7/7 [==============================] - 0s 60ms/step - loss: 0.2123 - custom_accuracy: 0.9554 - val_loss: 0.1618 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 12/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2769 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2034 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2130 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.2083 - custom_accuracy: 0.9554" ] }, { "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\b\r", "7/7 [==============================] - 0s 59ms/step - loss: 0.2083 - custom_accuracy: 0.9554 - val_loss: 0.1303 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 13/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.3166 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2664 - custom_accuracy: 0.9375" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2640 - custom_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\b\b\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.2612 - custom_accuracy: 0.9464" ] }, { "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\b\r", "7/7 [==============================] - 0s 60ms/step - loss: 0.2612 - custom_accuracy: 0.9464 - val_loss: 0.1475 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 14/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.0865 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2129 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2036 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.2116 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 0s 60ms/step - loss: 0.2116 - custom_accuracy: 0.9643 - val_loss: 0.1490 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 15/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.0670 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1465 - custom_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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1873 - custom_accuracy: 0.9750" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.2025 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 0s 58ms/step - loss: 0.2025 - custom_accuracy: 0.9643 - val_loss: 0.1660 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 16/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1803 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1396 - custom_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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1955 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.2039 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 0s 58ms/step - loss: 0.2039 - custom_accuracy: 0.9643 - val_loss: 0.1171 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 17/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2124 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2279 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2132 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1836 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 59ms/step - loss: 0.1836 - custom_accuracy: 0.9732 - val_loss: 0.1212 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 18/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2157 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1815 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1864 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1774 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 58ms/step - loss: 0.1774 - custom_accuracy: 0.9732 - val_loss: 0.1192 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 19/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2745 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2330 - custom_accuracy: 0.9375" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1906 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1733 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 58ms/step - loss: 0.1733 - custom_accuracy: 0.9732 - val_loss: 0.1291 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 20/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1254 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2010 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1995 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1767 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 59ms/step - loss: 0.1767 - custom_accuracy: 0.9732 - val_loss: 0.1279 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 21/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1976 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2023 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1654 - custom_accuracy: 0.9750" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1748 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 59ms/step - loss: 0.1748 - custom_accuracy: 0.9732 - val_loss: 0.1294 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 22/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1983 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1374 - custom_accuracy: 0.9792" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1494 - custom_accuracy: 0.9750" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1870 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 58ms/step - loss: 0.1870 - custom_accuracy: 0.9732 - val_loss: 0.1395 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 23/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1561 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2129 - custom_accuracy: 0.9792" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1905 - custom_accuracy: 0.9750" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1950 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 59ms/step - loss: 0.1950 - custom_accuracy: 0.9732 - val_loss: 0.1501 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 24/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2146 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1945 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1709 - custom_accuracy: 0.9750" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1866 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 0s 59ms/step - loss: 0.1866 - custom_accuracy: 0.9643 - val_loss: 0.1474 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 25/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1012 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1570 - custom_accuracy: 0.9792" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2006 - custom_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\b\b\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1988 - custom_accuracy: 0.9554" ] }, { "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\b\r", "7/7 [==============================] - 0s 58ms/step - loss: 0.1988 - custom_accuracy: 0.9554 - val_loss: 0.1452 - val_custom_accuracy: 1.0000\n" ] } ], "source": [ "hybrid_model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.02),\n", " loss=tf.losses.mse,\n", " metrics=[custom_accuracy])\n", "\n", "hybrid_history = hybrid_model.fit(x=train_excitations,\n", " y=train_labels,\n", " batch_size=16,\n", " epochs=25,\n", " verbose=1,\n", " validation_data=(test_excitations,\n", " test_labels))" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:30.953947Z", "iopub.status.busy": "2025-01-10T12:44:30.953464Z", "iopub.status.idle": "2025-01-10T12:44:31.167187Z", "shell.execute_reply": "2025-01-10T12:44:31.166517Z" }, "id": "yL3jhGiBRJHt", "vscode": { "languageId": "python" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['val_custom_accuracy'], label='QCNN')\n", "plt.plot(hybrid_history.history['val_custom_accuracy'], label='Hybrid CNN')\n", "plt.title('Quantum vs Hybrid CNN performance')\n", "plt.xlabel('Epochs')\n", "plt.legend()\n", "plt.ylabel('Validation Accuracy')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "NCNiNvheRNzq" }, "source": [ "As you can see, with very modest classical assistance, the hybrid model will usually converge faster than the purely quantum version." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "nVUtWLZnRRDE" }, "source": [ "### 2.2 Hybrid convolution with multiple quantum filters\n", "\n", "Now let's try an architecture that uses multiple quantum convolutions and a classical neural network to combine them.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Ldo_m5P3YBV7" }, "source": [ "#### 2.2.1 Model definition" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:31.170223Z", "iopub.status.busy": "2025-01-10T12:44:31.169750Z", "iopub.status.idle": "2025-01-10T12:44:31.480825Z", "shell.execute_reply": "2025-01-10T12:44:31.479874Z" }, "id": "W3TkNVm9RTBj", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmpfs/src/tf_docs_env/lib/python3.9/site-packages/keras/src/initializers/initializers.py:120: UserWarning: The initializer RandomUniform is unseeded and being called multiple times, which will return identical values each time (even if the initializer is unseeded). Please update your code to provide a seed to the initializer, or avoid using the same initializer instance more than once.\n", " warnings.warn(\n", "/tmpfs/src/tf_docs_env/lib/python3.9/site-packages/keras/src/initializers/initializers.py:120: UserWarning: The initializer RandomUniform is unseeded and being called multiple times, which will return identical values each time (even if the initializer is unseeded). Please update your code to provide a seed to the initializer, or avoid using the same initializer instance more than once.\n", " warnings.warn(\n", "/tmpfs/src/tf_docs_env/lib/python3.9/site-packages/keras/src/initializers/initializers.py:120: UserWarning: The initializer RandomUniform is unseeded and being called multiple times, which will return identical values each time (even if the initializer is unseeded). Please update your code to provide a seed to the initializer, or avoid using the same initializer instance more than once.\n", " warnings.warn(\n" ] }, { "data": { "image/png": "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7r33Xnn++efNZlOWlJQoj8twcnKS0NBQOXnypIiIrF692uzxKiaTSQICApTlSZMmiYj5Izf0er2EhITIkSNHlDaSkpLEaDSKq6urDBs2TGbOnCkAxGAwiIjI9evXZfDgweLs7CxDhgyR3NxcKS0tlVmzZimPAenXr59s27atQXE1pt3q/amr7fpYM0vaUp9Xmz59uri7u0vPnj0lLS1NDAaDAJAFCxZYjH3Dhg3So0cPSU5Olh49eoher5fnnntOeayONfXXVXdSUpJ4enpKdnZ2vf3AWdK2k5OTI+7u7nLp0iUREUlJSTE7/u+cDS0icvXqVfHz8zNb39RxXt+YeOWVV2TChAkW96O8vLzGI5s6d+6sbC8uLhZXV9caZQDI7NmzzeqKjIyU+fPnN65DqQbOkm5fNCK8E709qKyshJubG27duqV2KFQLg8GAgoKCGveDtZSNGzdiyZIl+PHHH1Vpv1pgYCD27t0Lf39/VeNoKxITE/H5559j69atcHCwrwtKx44dw9KlS7FlyxazyVbN5euvv8aMGTNw+PBhODk5NXt77UFsbCxCQkIQFRWldijUAuzrNwgREdnMiy++iKeffhrJyclqh1LDoEGDkJKS0iLJYlVVFRITE7Fnzx4mi0SNpK2/CBG1ZbGxsVi/fj2AXyaumEwmuLu7qxwV2cr48ePVDkF1Dg4O2Lhxo9phELVqPMNI1M6tW7fO7JEnTBaJiOhuTBiJiIiIyCImjERERERkEe9hbEcqKyvxySefqB0G1aKyshKpqal2N5O1pRUVFWH//v3w8fFROxQiqse//vUvhISEqB0GtRA+VqedEBGMGzdO7TCoDjdv3kSnTp3UDkN1hYWFMBgMqibOJpMJ169fR58+fVSLgai1iIuLQ2hoqNphUAtgwkhEdIdPPvkEH330EZKSktQOhYjIbrTv619EREREVC8mjERERERkERNGIiIiIrKICSMRERERWcSEkYiIiIgsYsJIRERERBYxYSQiIiIii5gwEhEREZFFTBiJiIiIyCImjERERERkERNGIiIiIrKICSMRERERWcSEkYiIiIgsYsJIRERERBYxYSQiIiIii5gwEhEREZFFTBiJiIiIyCImjERERERkERNGIiIiIrKICSMRERERWcSEkYiIiIgsYsJIRERERBYxYSQiIiIii7RqB0BEpLaffvoJFRUV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uHEjlixZgh9//FG1GADA2dkZJSUljfpsYmIiPv/8c2zduhUODvZ1kejYsWNYunQptmzZYjaxqDG+/vprzJgxA4cPH4aTk1ODPx8fHw+j0Yhp06Y1KQ4i+oV9/bYhIiKLXnzxRTz99NNITk5WO5QaBg0ahJSUlCYni1VVVUhMTMSePXsalSwSke1p1Q6AiKglxMbGYv369QB+mbhiMpng7u6uclSNM378eLVDaFYODg7YuHGj2mEQ0R14hpGI2oV169aZPQamtSaLRERqYMJIRERERBYxYSQiIiIii5gwEhEREZFFnPRCZEOFhYV46aWX1A7DLhUXF+PWrVvsH/zyWB32Q/M6evSo8vYeImo6PoeRyEbKy8uRlJSkdhjURMePH8fXX3+N6dOnqx0KNdFDDz2EPn36qB0GUZvAM4xENuLo6IgJEyaoHQY1kZubGy5fvsyfJRHRHXgPIxERERFZxISRiIiIiCxiwkhEREREFjFhJCIiIiKLmDASERERkUVMGImIiIjIIiaMRERERGQRE0YiIiIisogJIxERERFZxISRiIiIiCxiwkhEREREFjFhJCIiIiKLmDASERERkUVMGImIiIjIIiaMRERERGQRE0YiIiIisogJIxERERFZxISRiIiIiCxiwkhEREREFjFhJCIiIiKLmDASERERkUVMGImIiIjIIiaMRERERGSRRkRE7SCIiNSUmJiI69evAwDOnj2L77//HmPHjlW2R0dHw8fHR63wiIhUx4SRiNq9KVOmYMOGDajt16Grqyvy8vKg1WpViIyIyD7wkjQRtXvR0dFwdXWtsd7BwQHjxo1jskhE7R4TRiJq90JCQuDi4lJjvaurK1588UUVIiIisi9MGImIAERGRkKn05mtc3R0REhIiEoRERHZDyaMREQAoqKizBJGrVaLSZMmQaPRqBgVEZF9YMJIRAQgKCgIXl5eyrJer0dUVJR6ARER2REmjEREv3rppZfg7OwMAHB3d0ffvn1VjoiIyD4wYSQi+tXEiRPh4OAAJycnxMTEqB0OEZHd4HMYiYjuEBwcjDNnziArKws9e/ZUOxwiIrvAh4sRNaM///nP+Pbbb9UOw27dvn0bTk5O6NChg9qhKPR6Pdzc3DB//vwWa7O4uBharRaOjo4t1mZb9Ne//rXGTHcisg2eYSRqRs888wwCAwMxYMAAtUOxS4sX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", "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "excitation_input_multi = tf.keras.Input(shape=(), dtype=tf.dtypes.string)\n", "\n", "cluster_state_multi = tfq.layers.AddCircuit()(\n", " excitation_input_multi, prepend=cluster_state_circuit(cluster_state_bits))\n", "\n", "# apply 3 different filters and measure expectation values\n", "\n", "quantum_model_multi1 = tfq.layers.PQC(\n", " multi_readout_model_circuit(cluster_state_bits),\n", " readouts)(cluster_state_multi)\n", "\n", "quantum_model_multi2 = tfq.layers.PQC(\n", " multi_readout_model_circuit(cluster_state_bits),\n", " readouts)(cluster_state_multi)\n", "\n", "quantum_model_multi3 = tfq.layers.PQC(\n", " multi_readout_model_circuit(cluster_state_bits),\n", " readouts)(cluster_state_multi)\n", "\n", "# concatenate outputs and feed into a small classical NN\n", "concat_out = tf.keras.layers.concatenate(\n", " [quantum_model_multi1, quantum_model_multi2, quantum_model_multi3])\n", "\n", "dense_1 = tf.keras.layers.Dense(8)(concat_out)\n", "\n", "dense_2 = tf.keras.layers.Dense(1)(dense_1)\n", "\n", "multi_qconv_model = tf.keras.Model(inputs=[excitation_input_multi],\n", " outputs=[dense_2])\n", "\n", "# Display the model architecture\n", "tf.keras.utils.plot_model(multi_qconv_model,\n", " show_shapes=True,\n", " show_layer_names=True,\n", " dpi=70)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "2eNhDWwKY9N4" }, "source": [ "#### 2.2.2 Train the model" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:31.484203Z", "iopub.status.busy": "2025-01-10T12:44:31.483551Z", "iopub.status.idle": "2025-01-10T12:44:44.986589Z", "shell.execute_reply": "2025-01-10T12:44:44.985896Z" }, "id": "suRvxcAKRZK6", "vscode": { "languageId": "python" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 5s - loss: 1.1082 - custom_accuracy: 0.3125" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 1.0876 - custom_accuracy: 0.2500" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 1.0586 - custom_accuracy: 0.2917" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 1.0409 - custom_accuracy: 0.3906" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 1.0220 - custom_accuracy: 0.4750" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 1.0090 - custom_accuracy: 0.5521" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 1.0004 - custom_accuracy: 0.5982" ] }, { "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\b\r", "7/7 [==============================] - 2s 112ms/step - loss: 1.0004 - custom_accuracy: 0.5982 - val_loss: 0.8883 - val_custom_accuracy: 0.9375\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 2/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.8859 - custom_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\b\b\b\b\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.8833 - custom_accuracy: 0.8125" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.8500 - custom_accuracy: 0.7812" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.8163 - custom_accuracy: 0.8000" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.7788 - custom_accuracy: 0.8125" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.7796 - custom_accuracy: 0.7857" ] }, { "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\b\r", "7/7 [==============================] - 1s 76ms/step - loss: 0.7796 - custom_accuracy: 0.7857 - val_loss: 0.4550 - val_custom_accuracy: 0.8750\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 3/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.5802 - custom_accuracy: 0.7500" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.4710 - custom_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\b\b\b\b\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.4776 - custom_accuracy: 0.8594" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.4361 - custom_accuracy: 0.8875" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.3783 - custom_accuracy: 0.9018" ] }, { "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\b\r", "7/7 [==============================] - 0s 73ms/step - loss: 0.3783 - custom_accuracy: 0.9018 - val_loss: 0.1615 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 4/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1912 - custom_accuracy: 0.9375" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.1646 - custom_accuracy: 0.9688" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1473 - custom_accuracy: 0.9792" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1483 - custom_accuracy: 0.9844" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.2104 - custom_accuracy: 0.9583" ] }, { "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\b\r", "7/7 [==============================] - 0s 69ms/step - loss: 0.2220 - custom_accuracy: 0.9554 - val_loss: 0.1605 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 5/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2673 - custom_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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.1842 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1716 - custom_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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1962 - custom_accuracy: 0.9844" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1806 - custom_accuracy: 0.9875" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1872 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 1s 76ms/step - loss: 0.1872 - custom_accuracy: 0.9732 - val_loss: 0.1499 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 6/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2393 - custom_accuracy: 0.9375" ] }, { "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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.2072 - custom_accuracy: 0.9688" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1919 - custom_accuracy: 0.9844" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1976 - custom_accuracy: 0.9896" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.2077 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 72ms/step - loss: 0.2077 - custom_accuracy: 0.9732 - val_loss: 0.1606 - val_custom_accuracy: 0.9792\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 7/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1375 - custom_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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.1397 - custom_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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1802 - custom_accuracy: 0.9688" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1527 - custom_accuracy: 0.9750" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1773 - custom_accuracy: 0.9688" ] }, { "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\b\r", "7/7 [==============================] - 0s 70ms/step - loss: 0.1833 - custom_accuracy: 0.9732 - val_loss: 0.1602 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 8/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.3386 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2345 - custom_accuracy: 0.9583" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.2258 - custom_accuracy: 0.9688" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2126 - custom_accuracy: 0.9750" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.2082 - custom_accuracy: 0.9688" ] }, { "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\b\r", "7/7 [==============================] - 1s 79ms/step - loss: 0.1959 - custom_accuracy: 0.9732 - val_loss: 0.1711 - val_custom_accuracy: 0.9583\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 9/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.0999 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1760 - custom_accuracy: 0.9792" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1616 - custom_accuracy: 0.9844" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1829 - custom_accuracy: 0.9688" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1924 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 0s 73ms/step - loss: 0.1924 - custom_accuracy: 0.9643 - val_loss: 0.1611 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 10/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1452 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1918 - custom_accuracy: 0.9583" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.2108 - custom_accuracy: 0.9375" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1951 - custom_accuracy: 0.9375" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.2019 - custom_accuracy: 0.9375" ] }, { "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\b\r", "7/7 [==============================] - 0s 71ms/step - loss: 0.2019 - custom_accuracy: 0.9375 - val_loss: 0.1662 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 11/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1698 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2215 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1998 - custom_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\b\b\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1910 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 0s 68ms/step - loss: 0.1910 - custom_accuracy: 0.9643 - val_loss: 0.1484 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 12/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2582 - custom_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\b\b\b\b\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2282 - custom_accuracy: 0.9375" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.2027 - custom_accuracy: 0.9531" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2093 - custom_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\b\b\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1913 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 0s 71ms/step - loss: 0.1913 - custom_accuracy: 0.9643 - val_loss: 0.1518 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 13/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1911 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1841 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2023 - custom_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\b\b\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1864 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 1s 74ms/step - loss: 0.1864 - custom_accuracy: 0.9643 - val_loss: 0.1262 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 14/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1190 - custom_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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.1288 - custom_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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1543 - custom_accuracy: 0.9844" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1925 - custom_accuracy: 0.9583" ] }, { "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\b\r", "7/7 [==============================] - 1s 74ms/step - loss: 0.1854 - custom_accuracy: 0.9643 - val_loss: 0.1393 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 15/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1120 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1693 - custom_accuracy: 0.9583" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1545 - custom_accuracy: 0.9688" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1613 - custom_accuracy: 0.9688" ] }, { "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\b\r", "7/7 [==============================] - 0s 73ms/step - loss: 0.1720 - custom_accuracy: 0.9643 - val_loss: 0.1230 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 16/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2099 - custom_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\b\b\b\b\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.1551 - custom_accuracy: 0.9375" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1553 - custom_accuracy: 0.9531" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1578 - custom_accuracy: 0.9625" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1693 - custom_accuracy: 0.9583" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1712 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 1s 82ms/step - loss: 0.1712 - custom_accuracy: 0.9643 - val_loss: 0.1307 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 17/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1244 - custom_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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.1171 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1415 - custom_accuracy: 0.9792" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2056 - custom_accuracy: 0.9375" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1851 - custom_accuracy: 0.9554" ] }, { "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\b\r", "7/7 [==============================] - 0s 70ms/step - loss: 0.1851 - custom_accuracy: 0.9554 - val_loss: 0.1556 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 18/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.0538 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1601 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1725 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1777 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 74ms/step - loss: 0.1777 - custom_accuracy: 0.9732 - val_loss: 0.1461 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 19/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1744 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1710 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1729 - custom_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\b\b\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1639 - custom_accuracy: 0.9583" ] }, { "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\b\r", "7/7 [==============================] - 0s 74ms/step - loss: 0.1747 - custom_accuracy: 0.9554 - val_loss: 0.1293 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 20/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.0793 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1915 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1933 - custom_accuracy: 0.9625" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1792 - custom_accuracy: 0.9688" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1702 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 72ms/step - loss: 0.1702 - custom_accuracy: 0.9732 - val_loss: 0.1504 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 21/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2908 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1926 - custom_accuracy: 0.9792" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1927 - custom_accuracy: 0.9750" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1770 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 0s 70ms/step - loss: 0.1770 - custom_accuracy: 0.9732 - val_loss: 0.1516 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 22/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1753 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1657 - custom_accuracy: 0.9792" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1582 - custom_accuracy: 0.9844" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.1642 - custom_accuracy: 0.9750" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1697 - custom_accuracy: 0.9792" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1871 - custom_accuracy: 0.9732" ] }, { "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\b\r", "7/7 [==============================] - 1s 81ms/step - loss: 0.1871 - custom_accuracy: 0.9732 - val_loss: 0.1490 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 23/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.2462 - custom_accuracy: 0.9375" ] }, { "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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.1782 - custom_accuracy: 0.9792" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1979 - custom_accuracy: 0.9844" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1964 - custom_accuracy: 0.9792" ] }, { "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\b\r", "7/7 [==============================] - 0s 70ms/step - loss: 0.1951 - custom_accuracy: 0.9732 - val_loss: 0.1236 - val_custom_accuracy: 1.0000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 24/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1973 - custom_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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.1794 - custom_accuracy: 0.9688" ] }, { "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\b\r", "4/7 [================>.............] - ETA: 0s - loss: 0.1710 - custom_accuracy: 0.9688" ] }, { "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\b\r", "6/7 [========================>.....] - ETA: 0s - loss: 0.1915 - custom_accuracy: 0.9583" ] }, { "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\b\r", "7/7 [==============================] - 0s 68ms/step - loss: 0.1788 - custom_accuracy: 0.9554 - val_loss: 0.1805 - val_custom_accuracy: 0.9792\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 25/25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/7 [===>..........................] - ETA: 0s - loss: 0.1247 - custom_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\b\r", "2/7 [=======>......................] - ETA: 0s - loss: 0.1570 - custom_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\b\r", "3/7 [===========>..................] - ETA: 0s - loss: 0.2205 - custom_accuracy: 0.9583" ] }, { "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\b\r", "5/7 [====================>.........] - ETA: 0s - loss: 0.2154 - custom_accuracy: 0.9625" ] }, { "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\b\r", "7/7 [==============================] - ETA: 0s - loss: 0.1938 - custom_accuracy: 0.9643" ] }, { "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\b\r", "7/7 [==============================] - 1s 73ms/step - loss: 0.1938 - custom_accuracy: 0.9643 - val_loss: 0.1533 - val_custom_accuracy: 1.0000\n" ] } ], "source": [ "multi_qconv_model.compile(\n", " optimizer=tf.keras.optimizers.Adam(learning_rate=0.02),\n", " loss=tf.losses.mse,\n", " metrics=[custom_accuracy])\n", "\n", "multi_qconv_history = multi_qconv_model.fit(x=train_excitations,\n", " y=train_labels,\n", " batch_size=16,\n", " epochs=25,\n", " verbose=1,\n", " validation_data=(test_excitations,\n", " test_labels))" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "colab": {}, "colab_type": "code", "execution": { "iopub.execute_input": "2025-01-10T12:44:44.990018Z", "iopub.status.busy": "2025-01-10T12:44:44.989457Z", "iopub.status.idle": "2025-01-10T12:44:45.212840Z", "shell.execute_reply": "2025-01-10T12:44:45.212218Z" }, "id": "-6NR7yAQRmOU", "vscode": { "languageId": "python" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['val_custom_accuracy'][:25], label='QCNN')\n", "plt.plot(hybrid_history.history['val_custom_accuracy'][:25], label='Hybrid CNN')\n", "plt.plot(multi_qconv_history.history['val_custom_accuracy'][:25],\n", " label='Hybrid CNN \\n Multiple Quantum Filters')\n", "plt.title('Quantum vs Hybrid CNN performance')\n", "plt.xlabel('Epochs')\n", "plt.legend()\n", "plt.ylabel('Validation Accuracy')\n", "plt.show()" ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "qcnn.ipynb", "private_outputs": true, "provenance": [], "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "language": "python", "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.21" } }, "nbformat": 4, "nbformat_minor": 0 }