Download this file

1743 lines (1743 with data), 130.7 kB

{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "machine_shape": "hm"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "8XnVMPBXmtRa"
      },
      "source": [
        "# TensorNetworks in Neural Networks.\n",
        "\n",
        "Here, we have a small toy example of how to use a TN inside of a fully connected neural network.\n",
        "\n",
        "First off, let's install tensornetwork"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7HGRsYNAFxME"
      },
      "source": [
        "# !pip install tensornetwork\n",
        "\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import tensorflow as tf\n",
        "# Import tensornetwork\n",
        "import tensornetwork as tn\n",
        "from keras.optimizers import Adam\n",
        "import random\n",
        "import time\n",
        "# Set the backend to tesorflow\n",
        "# (default is numpy)\n",
        "tn.set_default_backend(\"tensorflow\")\n",
        "np.random.seed(42)\n",
        "random.seed(42)\n",
        "tf.random.set_seed(42)"
      ],
      "execution_count": 171,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "g1OMCo5XmrYu"
      },
      "source": [
        "# TensorNetwork layer definition\n",
        "\n",
        "Here, we define the TensorNetwork layer we wish to use to replace the fully connected layer. Here, we simply use a 2 node Matrix Product Operator network to replace the normal dense weight matrix.\n",
        "\n",
        "We TensorNetwork's NCon API to keep the code short."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wvSMKtPufnLp"
      },
      "source": [
        "class TNLayer(tf.keras.layers.Layer):\n",
        "\n",
        "  def __init__(self):\n",
        "    super(TNLayer, self).__init__()\n",
        "    # Create the variables for the layer.\n",
        "    self.a_var = tf.Variable(tf.random.normal(shape=(32, 32, 2),\n",
        "                                              stddev=1.0/32.0),\n",
        "                             name=\"a\", trainable=True)\n",
        "    self.b_var = tf.Variable(tf.random.normal(shape=(32, 32, 2),\n",
        "                                              stddev=1.0/32.0),\n",
        "                             name=\"b\", trainable=True)\n",
        "    self.bias = tf.Variable(tf.zeros(shape=(32, 32)),\n",
        "                            name=\"bias\", trainable=True)\n",
        "\n",
        "  def call(self, inputs):\n",
        "    # Define the contraction.\n",
        "    # We break it out so we can parallelize a batch using\n",
        "    # tf.vectorized_map (see below).\n",
        "    def f(input_vec, a_var, b_var, bias_var):\n",
        "      # Reshape to a matrix instead of a vector.\n",
        "      input_vec = tf.reshape(input_vec, (32, 32))\n",
        "\n",
        "      # Now we create the network.\n",
        "      a = tn.Node(a_var)\n",
        "      b = tn.Node(b_var)\n",
        "      x_node = tn.Node(input_vec)\n",
        "      a[1] ^ x_node[0]\n",
        "      b[1] ^ x_node[1]\n",
        "      a[2] ^ b[2]\n",
        "\n",
        "      # The TN should now look like this\n",
        "      #   |     |\n",
        "      #   a --- b\n",
        "      #    \\   /\n",
        "      #      x\n",
        "\n",
        "      # Now we begin the contraction.\n",
        "      c = a @ x_node\n",
        "      result = (c @ b).tensor\n",
        "\n",
        "      # To make the code shorter, we also could've used Ncon.\n",
        "      # The above few lines of code is the same as this:\n",
        "      # result = tn.ncon([x, a_var, b_var], [[1, 2], [-1, 1, 3], [-2, 2, 3]])\n",
        "\n",
        "      # Finally, add bias.\n",
        "      return result + bias_var\n",
        "\n",
        "    # To deal with a batch of items, we can use the tf.vectorized_map\n",
        "    # function.\n",
        "    # https://www.tensorflow.org/api_docs/python/tf/vectorized_map\n",
        "    result = tf.vectorized_map(\n",
        "        lambda vec: f(vec, self.a_var, self.b_var, self.bias), inputs)\n",
        "    return tf.nn.relu(tf.reshape(result, (-1, 1024)))"
      ],
      "execution_count": 172,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "V-CVqIhPnhY_"
      },
      "source": [
        "# Smaller model\n",
        "These two models are effectively the same, but notice how the TN layer has nearly 10x fewer parameters."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XPBvnB95jg4b",
        "outputId": "6cd03b3c-a3fe-4beb-ee54-f01d8599d1b9",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        }
      },
      "source": [
        "Dense = tf.keras.layers.Dense\n",
        "fc_model = tf.keras.Sequential(\n",
        "    [\n",
        "     tf.keras.Input(shape=(2,)),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     Dense(1, activation=None)])\n",
        "fc_model.summary()"
      ],
      "execution_count": 173,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model: \"sequential_28\"\n",
            "_________________________________________________________________\n",
            " Layer (type)                Output Shape              Param #   \n",
            "=================================================================\n",
            " dense_70 (Dense)            (None, 1024)              3072      \n",
            "                                                                 \n",
            " dense_71 (Dense)            (None, 1024)              1049600   \n",
            "                                                                 \n",
            " dense_72 (Dense)            (None, 1)                 1025      \n",
            "                                                                 \n",
            "=================================================================\n",
            "Total params: 1053697 (4.02 MB)\n",
            "Trainable params: 1053697 (4.02 MB)\n",
            "Non-trainable params: 0 (0.00 Byte)\n",
            "_________________________________________________________________\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bbKsmK8wIFTp",
        "outputId": "dc67bd4a-4188-4246-e97d-d94adc5c9f69",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        }
      },
      "source": [
        "tn_model = tf.keras.Sequential(\n",
        "    [\n",
        "     tf.keras.Input(shape=(2,)),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     # Here, we replace the dense layer with our MPS.\n",
        "     TNLayer(),\n",
        "     TNLayer(),\n",
        "     TNLayer(),\n",
        "     Dense(1, activation=None)])\n",
        "tn_model.summary()"
      ],
      "execution_count": 174,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model: \"sequential_29\"\n",
            "_________________________________________________________________\n",
            " Layer (type)                Output Shape              Param #   \n",
            "=================================================================\n",
            " dense_73 (Dense)            (None, 1024)              3072      \n",
            "                                                                 \n",
            " tn_layer_42 (TNLayer)       (None, 1024)              5120      \n",
            "                                                                 \n",
            " tn_layer_43 (TNLayer)       (None, 1024)              5120      \n",
            "                                                                 \n",
            " tn_layer_44 (TNLayer)       (None, 1024)              5120      \n",
            "                                                                 \n",
            " dense_74 (Dense)            (None, 1)                 1025      \n",
            "                                                                 \n",
            "=================================================================\n",
            "Total params: 19457 (76.00 KB)\n",
            "Trainable params: 19457 (76.00 KB)\n",
            "Non-trainable params: 0 (0.00 Byte)\n",
            "_________________________________________________________________\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GWwoYp0WnsLA"
      },
      "source": [
        "# Training a model\n",
        "\n",
        "You can train the TN model just as you would a normal neural network model! Here, we give an example of how to do it in Keras."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qDFzOC7sDBJ-"
      },
      "source": [
        "X = np.concatenate([np.random.randn(20, 2) + np.array([3, 3]),\n",
        "                    np.random.randn(20, 2) + np.array([-3, -3]),\n",
        "                    np.random.randn(20, 2) + np.array([-3, 3]),\n",
        "                    np.random.randn(20, 2) + np.array([3, -3])])\n",
        "\n",
        "Y = np.concatenate([np.ones((40)), -np.ones((40))])"
      ],
      "execution_count": 175,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since beginning of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "19TWP-1eKURB",
        "outputId": "e02c312a-e463-4ca5-f5f9-4bc735c55a6c"
      },
      "execution_count": 176,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since beginning of run: 1710116599.7136858\n",
            "Mon Mar 11 00:23:19 2024\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "crc0q1vbIyTj",
        "outputId": "afd0e59f-f742-4549-fba2-58cf0da65f24",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        }
      },
      "source": [
        "optimizer = Adam(learning_rate=0.0008)\n",
        "tn_model.compile(optimizer=optimizer, loss=\"mean_squared_error\")\n",
        "tn_model.fit(X, Y, epochs=300, verbose=2)"
      ],
      "execution_count": 177,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/300\n",
            "3/3 - 2s - loss: 1.0015 - 2s/epoch - 710ms/step\n",
            "Epoch 2/300\n",
            "3/3 - 0s - loss: 1.0014 - 22ms/epoch - 7ms/step\n",
            "Epoch 3/300\n",
            "3/3 - 0s - loss: 1.0005 - 21ms/epoch - 7ms/step\n",
            "Epoch 4/300\n",
            "3/3 - 0s - loss: 1.0001 - 19ms/epoch - 6ms/step\n",
            "Epoch 5/300\n",
            "3/3 - 0s - loss: 1.0004 - 20ms/epoch - 7ms/step\n",
            "Epoch 6/300\n",
            "3/3 - 0s - loss: 0.9998 - 20ms/epoch - 7ms/step\n",
            "Epoch 7/300\n",
            "3/3 - 0s - loss: 0.9996 - 19ms/epoch - 6ms/step\n",
            "Epoch 8/300\n",
            "3/3 - 0s - loss: 0.9991 - 20ms/epoch - 7ms/step\n",
            "Epoch 9/300\n",
            "3/3 - 0s - loss: 0.9979 - 19ms/epoch - 6ms/step\n",
            "Epoch 10/300\n",
            "3/3 - 0s - loss: 0.9954 - 18ms/epoch - 6ms/step\n",
            "Epoch 11/300\n",
            "3/3 - 0s - loss: 0.9901 - 18ms/epoch - 6ms/step\n",
            "Epoch 12/300\n",
            "3/3 - 0s - loss: 0.9791 - 18ms/epoch - 6ms/step\n",
            "Epoch 13/300\n",
            "3/3 - 0s - loss: 0.9576 - 19ms/epoch - 6ms/step\n",
            "Epoch 14/300\n",
            "3/3 - 0s - loss: 0.9171 - 19ms/epoch - 6ms/step\n",
            "Epoch 15/300\n",
            "3/3 - 0s - loss: 0.8426 - 20ms/epoch - 7ms/step\n",
            "Epoch 16/300\n",
            "3/3 - 0s - loss: 0.7048 - 19ms/epoch - 6ms/step\n",
            "Epoch 17/300\n",
            "3/3 - 0s - loss: 0.4874 - 22ms/epoch - 7ms/step\n",
            "Epoch 18/300\n",
            "3/3 - 0s - loss: 0.2041 - 19ms/epoch - 6ms/step\n",
            "Epoch 19/300\n",
            "3/3 - 0s - loss: 0.0678 - 18ms/epoch - 6ms/step\n",
            "Epoch 20/300\n",
            "3/3 - 0s - loss: 0.1192 - 19ms/epoch - 6ms/step\n",
            "Epoch 21/300\n",
            "3/3 - 0s - loss: 0.0425 - 19ms/epoch - 6ms/step\n",
            "Epoch 22/300\n",
            "3/3 - 0s - loss: 0.0257 - 23ms/epoch - 8ms/step\n",
            "Epoch 23/300\n",
            "3/3 - 0s - loss: 0.0392 - 20ms/epoch - 7ms/step\n",
            "Epoch 24/300\n",
            "3/3 - 0s - loss: 0.0364 - 18ms/epoch - 6ms/step\n",
            "Epoch 25/300\n",
            "3/3 - 0s - loss: 0.0217 - 19ms/epoch - 6ms/step\n",
            "Epoch 26/300\n",
            "3/3 - 0s - loss: 0.0134 - 21ms/epoch - 7ms/step\n",
            "Epoch 27/300\n",
            "3/3 - 0s - loss: 0.0167 - 19ms/epoch - 6ms/step\n",
            "Epoch 28/300\n",
            "3/3 - 0s - loss: 0.0166 - 18ms/epoch - 6ms/step\n",
            "Epoch 29/300\n",
            "3/3 - 0s - loss: 0.0115 - 19ms/epoch - 6ms/step\n",
            "Epoch 30/300\n",
            "3/3 - 0s - loss: 0.0103 - 19ms/epoch - 6ms/step\n",
            "Epoch 31/300\n",
            "3/3 - 0s - loss: 0.0107 - 23ms/epoch - 8ms/step\n",
            "Epoch 32/300\n",
            "3/3 - 0s - loss: 0.0102 - 21ms/epoch - 7ms/step\n",
            "Epoch 33/300\n",
            "3/3 - 0s - loss: 0.0089 - 20ms/epoch - 7ms/step\n",
            "Epoch 34/300\n",
            "3/3 - 0s - loss: 0.0082 - 19ms/epoch - 6ms/step\n",
            "Epoch 35/300\n",
            "3/3 - 0s - loss: 0.0080 - 20ms/epoch - 7ms/step\n",
            "Epoch 36/300\n",
            "3/3 - 0s - loss: 0.0077 - 20ms/epoch - 7ms/step\n",
            "Epoch 37/300\n",
            "3/3 - 0s - loss: 0.0073 - 19ms/epoch - 6ms/step\n",
            "Epoch 38/300\n",
            "3/3 - 0s - loss: 0.0069 - 18ms/epoch - 6ms/step\n",
            "Epoch 39/300\n",
            "3/3 - 0s - loss: 0.0067 - 19ms/epoch - 6ms/step\n",
            "Epoch 40/300\n",
            "3/3 - 0s - loss: 0.0065 - 20ms/epoch - 7ms/step\n",
            "Epoch 41/300\n",
            "3/3 - 0s - loss: 0.0063 - 18ms/epoch - 6ms/step\n",
            "Epoch 42/300\n",
            "3/3 - 0s - loss: 0.0061 - 19ms/epoch - 6ms/step\n",
            "Epoch 43/300\n",
            "3/3 - 0s - loss: 0.0059 - 19ms/epoch - 6ms/step\n",
            "Epoch 44/300\n",
            "3/3 - 0s - loss: 0.0058 - 18ms/epoch - 6ms/step\n",
            "Epoch 45/300\n",
            "3/3 - 0s - loss: 0.0055 - 19ms/epoch - 6ms/step\n",
            "Epoch 46/300\n",
            "3/3 - 0s - loss: 0.0054 - 19ms/epoch - 6ms/step\n",
            "Epoch 47/300\n",
            "3/3 - 0s - loss: 0.0053 - 17ms/epoch - 6ms/step\n",
            "Epoch 48/300\n",
            "3/3 - 0s - loss: 0.0052 - 19ms/epoch - 6ms/step\n",
            "Epoch 49/300\n",
            "3/3 - 0s - loss: 0.0050 - 19ms/epoch - 6ms/step\n",
            "Epoch 50/300\n",
            "3/3 - 0s - loss: 0.0048 - 19ms/epoch - 6ms/step\n",
            "Epoch 51/300\n",
            "3/3 - 0s - loss: 0.0047 - 18ms/epoch - 6ms/step\n",
            "Epoch 52/300\n",
            "3/3 - 0s - loss: 0.0046 - 17ms/epoch - 6ms/step\n",
            "Epoch 53/300\n",
            "3/3 - 0s - loss: 0.0045 - 19ms/epoch - 6ms/step\n",
            "Epoch 54/300\n",
            "3/3 - 0s - loss: 0.0044 - 19ms/epoch - 6ms/step\n",
            "Epoch 55/300\n",
            "3/3 - 0s - loss: 0.0042 - 18ms/epoch - 6ms/step\n",
            "Epoch 56/300\n",
            "3/3 - 0s - loss: 0.0042 - 17ms/epoch - 6ms/step\n",
            "Epoch 57/300\n",
            "3/3 - 0s - loss: 0.0040 - 18ms/epoch - 6ms/step\n",
            "Epoch 58/300\n",
            "3/3 - 0s - loss: 0.0039 - 19ms/epoch - 6ms/step\n",
            "Epoch 59/300\n",
            "3/3 - 0s - loss: 0.0038 - 18ms/epoch - 6ms/step\n",
            "Epoch 60/300\n",
            "3/3 - 0s - loss: 0.0037 - 18ms/epoch - 6ms/step\n",
            "Epoch 61/300\n",
            "3/3 - 0s - loss: 0.0036 - 19ms/epoch - 6ms/step\n",
            "Epoch 62/300\n",
            "3/3 - 0s - loss: 0.0035 - 19ms/epoch - 6ms/step\n",
            "Epoch 63/300\n",
            "3/3 - 0s - loss: 0.0034 - 19ms/epoch - 6ms/step\n",
            "Epoch 64/300\n",
            "3/3 - 0s - loss: 0.0033 - 21ms/epoch - 7ms/step\n",
            "Epoch 65/300\n",
            "3/3 - 0s - loss: 0.0033 - 19ms/epoch - 6ms/step\n",
            "Epoch 66/300\n",
            "3/3 - 0s - loss: 0.0032 - 17ms/epoch - 6ms/step\n",
            "Epoch 67/300\n",
            "3/3 - 0s - loss: 0.0031 - 19ms/epoch - 6ms/step\n",
            "Epoch 68/300\n",
            "3/3 - 0s - loss: 0.0030 - 19ms/epoch - 6ms/step\n",
            "Epoch 69/300\n",
            "3/3 - 0s - loss: 0.0029 - 18ms/epoch - 6ms/step\n",
            "Epoch 70/300\n",
            "3/3 - 0s - loss: 0.0029 - 18ms/epoch - 6ms/step\n",
            "Epoch 71/300\n",
            "3/3 - 0s - loss: 0.0028 - 16ms/epoch - 5ms/step\n",
            "Epoch 72/300\n",
            "3/3 - 0s - loss: 0.0027 - 18ms/epoch - 6ms/step\n",
            "Epoch 73/300\n",
            "3/3 - 0s - loss: 0.0026 - 18ms/epoch - 6ms/step\n",
            "Epoch 74/300\n",
            "3/3 - 0s - loss: 0.0026 - 17ms/epoch - 6ms/step\n",
            "Epoch 75/300\n",
            "3/3 - 0s - loss: 0.0025 - 17ms/epoch - 6ms/step\n",
            "Epoch 76/300\n",
            "3/3 - 0s - loss: 0.0024 - 19ms/epoch - 6ms/step\n",
            "Epoch 77/300\n",
            "3/3 - 0s - loss: 0.0024 - 21ms/epoch - 7ms/step\n",
            "Epoch 78/300\n",
            "3/3 - 0s - loss: 0.0023 - 17ms/epoch - 6ms/step\n",
            "Epoch 79/300\n",
            "3/3 - 0s - loss: 0.0023 - 18ms/epoch - 6ms/step\n",
            "Epoch 80/300\n",
            "3/3 - 0s - loss: 0.0022 - 18ms/epoch - 6ms/step\n",
            "Epoch 81/300\n",
            "3/3 - 0s - loss: 0.0022 - 18ms/epoch - 6ms/step\n",
            "Epoch 82/300\n",
            "3/3 - 0s - loss: 0.0021 - 18ms/epoch - 6ms/step\n",
            "Epoch 83/300\n",
            "3/3 - 0s - loss: 0.0020 - 19ms/epoch - 6ms/step\n",
            "Epoch 84/300\n",
            "3/3 - 0s - loss: 0.0020 - 17ms/epoch - 6ms/step\n",
            "Epoch 85/300\n",
            "3/3 - 0s - loss: 0.0019 - 19ms/epoch - 6ms/step\n",
            "Epoch 86/300\n",
            "3/3 - 0s - loss: 0.0019 - 20ms/epoch - 7ms/step\n",
            "Epoch 87/300\n",
            "3/3 - 0s - loss: 0.0018 - 17ms/epoch - 6ms/step\n",
            "Epoch 88/300\n",
            "3/3 - 0s - loss: 0.0018 - 16ms/epoch - 5ms/step\n",
            "Epoch 89/300\n",
            "3/3 - 0s - loss: 0.0018 - 20ms/epoch - 7ms/step\n",
            "Epoch 90/300\n",
            "3/3 - 0s - loss: 0.0017 - 20ms/epoch - 7ms/step\n",
            "Epoch 91/300\n",
            "3/3 - 0s - loss: 0.0017 - 20ms/epoch - 7ms/step\n",
            "Epoch 92/300\n",
            "3/3 - 0s - loss: 0.0016 - 20ms/epoch - 7ms/step\n",
            "Epoch 93/300\n",
            "3/3 - 0s - loss: 0.0016 - 20ms/epoch - 7ms/step\n",
            "Epoch 94/300\n",
            "3/3 - 0s - loss: 0.0015 - 22ms/epoch - 7ms/step\n",
            "Epoch 95/300\n",
            "3/3 - 0s - loss: 0.0015 - 20ms/epoch - 7ms/step\n",
            "Epoch 96/300\n",
            "3/3 - 0s - loss: 0.0014 - 18ms/epoch - 6ms/step\n",
            "Epoch 97/300\n",
            "3/3 - 0s - loss: 0.0014 - 19ms/epoch - 6ms/step\n",
            "Epoch 98/300\n",
            "3/3 - 0s - loss: 0.0014 - 17ms/epoch - 6ms/step\n",
            "Epoch 99/300\n",
            "3/3 - 0s - loss: 0.0013 - 18ms/epoch - 6ms/step\n",
            "Epoch 100/300\n",
            "3/3 - 0s - loss: 0.0013 - 19ms/epoch - 6ms/step\n",
            "Epoch 101/300\n",
            "3/3 - 0s - loss: 0.0013 - 17ms/epoch - 6ms/step\n",
            "Epoch 102/300\n",
            "3/3 - 0s - loss: 0.0012 - 21ms/epoch - 7ms/step\n",
            "Epoch 103/300\n",
            "3/3 - 0s - loss: 0.0012 - 19ms/epoch - 6ms/step\n",
            "Epoch 104/300\n",
            "3/3 - 0s - loss: 0.0011 - 18ms/epoch - 6ms/step\n",
            "Epoch 105/300\n",
            "3/3 - 0s - loss: 0.0011 - 19ms/epoch - 6ms/step\n",
            "Epoch 106/300\n",
            "3/3 - 0s - loss: 0.0011 - 19ms/epoch - 6ms/step\n",
            "Epoch 107/300\n",
            "3/3 - 0s - loss: 0.0010 - 17ms/epoch - 6ms/step\n",
            "Epoch 108/300\n",
            "3/3 - 0s - loss: 0.0010 - 17ms/epoch - 6ms/step\n",
            "Epoch 109/300\n",
            "3/3 - 0s - loss: 9.7369e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 110/300\n",
            "3/3 - 0s - loss: 9.4740e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 111/300\n",
            "3/3 - 0s - loss: 9.0842e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 112/300\n",
            "3/3 - 0s - loss: 8.9660e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 113/300\n",
            "3/3 - 0s - loss: 8.6739e-04 - 21ms/epoch - 7ms/step\n",
            "Epoch 114/300\n",
            "3/3 - 0s - loss: 8.3268e-04 - 22ms/epoch - 7ms/step\n",
            "Epoch 115/300\n",
            "3/3 - 0s - loss: 8.1979e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 116/300\n",
            "3/3 - 0s - loss: 7.7655e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 117/300\n",
            "3/3 - 0s - loss: 7.6282e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 118/300\n",
            "3/3 - 0s - loss: 7.3074e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 119/300\n",
            "3/3 - 0s - loss: 7.2868e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 120/300\n",
            "3/3 - 0s - loss: 6.9617e-04 - 17ms/epoch - 6ms/step\n",
            "Epoch 121/300\n",
            "3/3 - 0s - loss: 6.4209e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 122/300\n",
            "3/3 - 0s - loss: 6.3411e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 123/300\n",
            "3/3 - 0s - loss: 6.1109e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 124/300\n",
            "3/3 - 0s - loss: 5.9409e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 125/300\n",
            "3/3 - 0s - loss: 5.6619e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 126/300\n",
            "3/3 - 0s - loss: 5.4002e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 127/300\n",
            "3/3 - 0s - loss: 5.3094e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 128/300\n",
            "3/3 - 0s - loss: 5.0043e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 129/300\n",
            "3/3 - 0s - loss: 4.7346e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 130/300\n",
            "3/3 - 0s - loss: 4.6048e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 131/300\n",
            "3/3 - 0s - loss: 4.3404e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 132/300\n",
            "3/3 - 0s - loss: 4.2393e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 133/300\n",
            "3/3 - 0s - loss: 4.0264e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 134/300\n",
            "3/3 - 0s - loss: 3.8347e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 135/300\n",
            "3/3 - 0s - loss: 3.6527e-04 - 22ms/epoch - 7ms/step\n",
            "Epoch 136/300\n",
            "3/3 - 0s - loss: 3.5142e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 137/300\n",
            "3/3 - 0s - loss: 3.3269e-04 - 21ms/epoch - 7ms/step\n",
            "Epoch 138/300\n",
            "3/3 - 0s - loss: 3.2750e-04 - 21ms/epoch - 7ms/step\n",
            "Epoch 139/300\n",
            "3/3 - 0s - loss: 3.1428e-04 - 21ms/epoch - 7ms/step\n",
            "Epoch 140/300\n",
            "3/3 - 0s - loss: 2.8974e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 141/300\n",
            "3/3 - 0s - loss: 2.7492e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 142/300\n",
            "3/3 - 0s - loss: 2.5961e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 143/300\n",
            "3/3 - 0s - loss: 2.4579e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 144/300\n",
            "3/3 - 0s - loss: 2.3497e-04 - 21ms/epoch - 7ms/step\n",
            "Epoch 145/300\n",
            "3/3 - 0s - loss: 2.2134e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 146/300\n",
            "3/3 - 0s - loss: 2.2088e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 147/300\n",
            "3/3 - 0s - loss: 1.9680e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 148/300\n",
            "3/3 - 0s - loss: 1.9151e-04 - 21ms/epoch - 7ms/step\n",
            "Epoch 149/300\n",
            "3/3 - 0s - loss: 1.8367e-04 - 21ms/epoch - 7ms/step\n",
            "Epoch 150/300\n",
            "3/3 - 0s - loss: 1.7079e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 151/300\n",
            "3/3 - 0s - loss: 1.7148e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 152/300\n",
            "3/3 - 0s - loss: 1.5495e-04 - 21ms/epoch - 7ms/step\n",
            "Epoch 153/300\n",
            "3/3 - 0s - loss: 1.4401e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 154/300\n",
            "3/3 - 0s - loss: 1.3381e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 155/300\n",
            "3/3 - 0s - loss: 1.2964e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 156/300\n",
            "3/3 - 0s - loss: 1.2116e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 157/300\n",
            "3/3 - 0s - loss: 1.1359e-04 - 24ms/epoch - 8ms/step\n",
            "Epoch 158/300\n",
            "3/3 - 0s - loss: 1.0472e-04 - 21ms/epoch - 7ms/step\n",
            "Epoch 159/300\n",
            "3/3 - 0s - loss: 9.7977e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 160/300\n",
            "3/3 - 0s - loss: 9.3697e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 161/300\n",
            "3/3 - 0s - loss: 8.8780e-05 - 20ms/epoch - 7ms/step\n",
            "Epoch 162/300\n",
            "3/3 - 0s - loss: 8.1465e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 163/300\n",
            "3/3 - 0s - loss: 7.9619e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 164/300\n",
            "3/3 - 0s - loss: 7.4473e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 165/300\n",
            "3/3 - 0s - loss: 6.6965e-05 - 20ms/epoch - 7ms/step\n",
            "Epoch 166/300\n",
            "3/3 - 0s - loss: 6.0900e-05 - 20ms/epoch - 7ms/step\n",
            "Epoch 167/300\n",
            "3/3 - 0s - loss: 5.7546e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 168/300\n",
            "3/3 - 0s - loss: 5.4167e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 169/300\n",
            "3/3 - 0s - loss: 5.1279e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 170/300\n",
            "3/3 - 0s - loss: 4.6435e-05 - 20ms/epoch - 7ms/step\n",
            "Epoch 171/300\n",
            "3/3 - 0s - loss: 4.4171e-05 - 20ms/epoch - 7ms/step\n",
            "Epoch 172/300\n",
            "3/3 - 0s - loss: 4.0457e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 173/300\n",
            "3/3 - 0s - loss: 3.7785e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 174/300\n",
            "3/3 - 0s - loss: 3.5848e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 175/300\n",
            "3/3 - 0s - loss: 3.4106e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 176/300\n",
            "3/3 - 0s - loss: 3.2581e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 177/300\n",
            "3/3 - 0s - loss: 2.9255e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 178/300\n",
            "3/3 - 0s - loss: 2.5879e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 179/300\n",
            "3/3 - 0s - loss: 2.5635e-05 - 20ms/epoch - 7ms/step\n",
            "Epoch 180/300\n",
            "3/3 - 0s - loss: 2.2704e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 181/300\n",
            "3/3 - 0s - loss: 2.3012e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 182/300\n",
            "3/3 - 0s - loss: 2.0772e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 183/300\n",
            "3/3 - 0s - loss: 1.8907e-05 - 16ms/epoch - 5ms/step\n",
            "Epoch 184/300\n",
            "3/3 - 0s - loss: 1.7193e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 185/300\n",
            "3/3 - 0s - loss: 1.6698e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 186/300\n",
            "3/3 - 0s - loss: 1.4654e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 187/300\n",
            "3/3 - 0s - loss: 1.3944e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 188/300\n",
            "3/3 - 0s - loss: 1.3056e-05 - 20ms/epoch - 7ms/step\n",
            "Epoch 189/300\n",
            "3/3 - 0s - loss: 1.2240e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 190/300\n",
            "3/3 - 0s - loss: 1.1719e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 191/300\n",
            "3/3 - 0s - loss: 1.2128e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 192/300\n",
            "3/3 - 0s - loss: 1.0905e-05 - 16ms/epoch - 5ms/step\n",
            "Epoch 193/300\n",
            "3/3 - 0s - loss: 1.0245e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 194/300\n",
            "3/3 - 0s - loss: 1.0087e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 195/300\n",
            "3/3 - 0s - loss: 9.0799e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 196/300\n",
            "3/3 - 0s - loss: 8.4623e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 197/300\n",
            "3/3 - 0s - loss: 7.9503e-06 - 16ms/epoch - 5ms/step\n",
            "Epoch 198/300\n",
            "3/3 - 0s - loss: 7.1813e-06 - 16ms/epoch - 5ms/step\n",
            "Epoch 199/300\n",
            "3/3 - 0s - loss: 6.8179e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 200/300\n",
            "3/3 - 0s - loss: 6.6122e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 201/300\n",
            "3/3 - 0s - loss: 6.7784e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 202/300\n",
            "3/3 - 0s - loss: 5.6490e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 203/300\n",
            "3/3 - 0s - loss: 5.3810e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 204/300\n",
            "3/3 - 0s - loss: 5.1298e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 205/300\n",
            "3/3 - 0s - loss: 5.0699e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 206/300\n",
            "3/3 - 0s - loss: 4.9727e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 207/300\n",
            "3/3 - 0s - loss: 4.4079e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 208/300\n",
            "3/3 - 0s - loss: 4.3408e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 209/300\n",
            "3/3 - 0s - loss: 4.1186e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 210/300\n",
            "3/3 - 0s - loss: 4.4171e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 211/300\n",
            "3/3 - 0s - loss: 3.6973e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 212/300\n",
            "3/3 - 0s - loss: 3.8007e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 213/300\n",
            "3/3 - 0s - loss: 3.6158e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 214/300\n",
            "3/3 - 0s - loss: 3.5230e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 215/300\n",
            "3/3 - 0s - loss: 3.2452e-06 - 21ms/epoch - 7ms/step\n",
            "Epoch 216/300\n",
            "3/3 - 0s - loss: 3.2238e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 217/300\n",
            "3/3 - 0s - loss: 3.1084e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 218/300\n",
            "3/3 - 0s - loss: 2.9768e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 219/300\n",
            "3/3 - 0s - loss: 2.9318e-06 - 21ms/epoch - 7ms/step\n",
            "Epoch 220/300\n",
            "3/3 - 0s - loss: 2.8047e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 221/300\n",
            "3/3 - 0s - loss: 2.8237e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 222/300\n",
            "3/3 - 0s - loss: 2.7017e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 223/300\n",
            "3/3 - 0s - loss: 2.8396e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 224/300\n",
            "3/3 - 0s - loss: 2.6481e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 225/300\n",
            "3/3 - 0s - loss: 2.7584e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 226/300\n",
            "3/3 - 0s - loss: 2.6194e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 227/300\n",
            "3/3 - 0s - loss: 2.4337e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 228/300\n",
            "3/3 - 0s - loss: 2.5148e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 229/300\n",
            "3/3 - 0s - loss: 2.5407e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 230/300\n",
            "3/3 - 0s - loss: 2.5172e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 231/300\n",
            "3/3 - 0s - loss: 2.6693e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 232/300\n",
            "3/3 - 0s - loss: 2.2396e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 233/300\n",
            "3/3 - 0s - loss: 2.7291e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 234/300\n",
            "3/3 - 0s - loss: 2.1610e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 235/300\n",
            "3/3 - 0s - loss: 2.2757e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 236/300\n",
            "3/3 - 0s - loss: 2.6119e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 237/300\n",
            "3/3 - 0s - loss: 2.2704e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 238/300\n",
            "3/3 - 0s - loss: 2.2446e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 239/300\n",
            "3/3 - 0s - loss: 2.0343e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 240/300\n",
            "3/3 - 0s - loss: 2.0721e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 241/300\n",
            "3/3 - 0s - loss: 2.0042e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 242/300\n",
            "3/3 - 0s - loss: 1.8262e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 243/300\n",
            "3/3 - 0s - loss: 1.8235e-06 - 16ms/epoch - 5ms/step\n",
            "Epoch 244/300\n",
            "3/3 - 0s - loss: 1.8631e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 245/300\n",
            "3/3 - 0s - loss: 1.7779e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 246/300\n",
            "3/3 - 0s - loss: 1.8697e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 247/300\n",
            "3/3 - 0s - loss: 1.9131e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 248/300\n",
            "3/3 - 0s - loss: 1.7147e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 249/300\n",
            "3/3 - 0s - loss: 1.7146e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 250/300\n",
            "3/3 - 0s - loss: 1.6269e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 251/300\n",
            "3/3 - 0s - loss: 1.6331e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 252/300\n",
            "3/3 - 0s - loss: 1.5760e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 253/300\n",
            "3/3 - 0s - loss: 1.5502e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 254/300\n",
            "3/3 - 0s - loss: 1.4998e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 255/300\n",
            "3/3 - 0s - loss: 1.4930e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 256/300\n",
            "3/3 - 0s - loss: 1.4808e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 257/300\n",
            "3/3 - 0s - loss: 1.4142e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 258/300\n",
            "3/3 - 0s - loss: 1.6525e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 259/300\n",
            "3/3 - 0s - loss: 2.0381e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 260/300\n",
            "3/3 - 0s - loss: 1.5545e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 261/300\n",
            "3/3 - 0s - loss: 1.9676e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 262/300\n",
            "3/3 - 0s - loss: 1.3628e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 263/300\n",
            "3/3 - 0s - loss: 1.4598e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 264/300\n",
            "3/3 - 0s - loss: 1.3826e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 265/300\n",
            "3/3 - 0s - loss: 1.2999e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 266/300\n",
            "3/3 - 0s - loss: 1.4594e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 267/300\n",
            "3/3 - 0s - loss: 1.3916e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 268/300\n",
            "3/3 - 0s - loss: 1.4274e-06 - 21ms/epoch - 7ms/step\n",
            "Epoch 269/300\n",
            "3/3 - 0s - loss: 1.3114e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 270/300\n",
            "3/3 - 0s - loss: 1.2768e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 271/300\n",
            "3/3 - 0s - loss: 1.1880e-06 - 21ms/epoch - 7ms/step\n",
            "Epoch 272/300\n",
            "3/3 - 0s - loss: 1.2023e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 273/300\n",
            "3/3 - 0s - loss: 1.1532e-06 - 22ms/epoch - 7ms/step\n",
            "Epoch 274/300\n",
            "3/3 - 0s - loss: 1.3477e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 275/300\n",
            "3/3 - 0s - loss: 1.1903e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 276/300\n",
            "3/3 - 0s - loss: 1.0872e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 277/300\n",
            "3/3 - 0s - loss: 1.2705e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 278/300\n",
            "3/3 - 0s - loss: 1.0919e-06 - 21ms/epoch - 7ms/step\n",
            "Epoch 279/300\n",
            "3/3 - 0s - loss: 1.1345e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 280/300\n",
            "3/3 - 0s - loss: 1.1269e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 281/300\n",
            "3/3 - 0s - loss: 1.0486e-06 - 21ms/epoch - 7ms/step\n",
            "Epoch 282/300\n",
            "3/3 - 0s - loss: 1.0718e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 283/300\n",
            "3/3 - 0s - loss: 9.9868e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 284/300\n",
            "3/3 - 0s - loss: 1.1415e-06 - 21ms/epoch - 7ms/step\n",
            "Epoch 285/300\n",
            "3/3 - 0s - loss: 1.0605e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 286/300\n",
            "3/3 - 0s - loss: 1.0485e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 287/300\n",
            "3/3 - 0s - loss: 1.0810e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 288/300\n",
            "3/3 - 0s - loss: 9.1669e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 289/300\n",
            "3/3 - 0s - loss: 1.0442e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 290/300\n",
            "3/3 - 0s - loss: 9.8594e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 291/300\n",
            "3/3 - 0s - loss: 9.6123e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 292/300\n",
            "3/3 - 0s - loss: 1.0154e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 293/300\n",
            "3/3 - 0s - loss: 8.8122e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 294/300\n",
            "3/3 - 0s - loss: 9.5349e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 295/300\n",
            "3/3 - 0s - loss: 8.8601e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 296/300\n",
            "3/3 - 0s - loss: 9.8480e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 297/300\n",
            "3/3 - 0s - loss: 9.1483e-07 - 20ms/epoch - 7ms/step\n",
            "Epoch 298/300\n",
            "3/3 - 0s - loss: 8.5093e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 299/300\n",
            "3/3 - 0s - loss: 8.6663e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 300/300\n",
            "3/3 - 0s - loss: 7.9975e-07 - 19ms/epoch - 6ms/step\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<keras.src.callbacks.History at 0x7bae94a25750>"
            ]
          },
          "metadata": {},
          "execution_count": 177
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "n-aNP4n3sqG_",
        "outputId": "46f7e844-dc82-4f6d-e85a-e81effcd63c3",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 443
        }
      },
      "source": [
        "# Plotting code, feel free to ignore.\n",
        "h = 1.0\n",
        "x_min, x_max = X[:, 0].min() - 5, X[:, 0].max() + 5\n",
        "y_min, y_max = X[:, 1].min() - 5, X[:, 1].max() + 5\n",
        "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n",
        "                     np.arange(y_min, y_max, h))\n",
        "\n",
        "# here \"model\" is your model's prediction (classification) function\n",
        "Z = tn_model.predict(np.c_[xx.ravel(), yy.ravel()])\n",
        "\n",
        "# Put the result into a color plot\n",
        "Z = Z.reshape(xx.shape)\n",
        "plt.contourf(xx, yy, Z)\n",
        "plt.axis('off')\n",
        "\n",
        "# Plot also the training points\n",
        "plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)"
      ],
      "execution_count": 178,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "14/14 [==============================] - 0s 4ms/step\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.collections.PathCollection at 0x7bae742b5060>"
            ]
          },
          "metadata": {},
          "execution_count": 178
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLm0lEQVR4nO3dd3gc130v/O+Z2b6LDhCFIAj23quo3qjmIsuSZcmJHMdOHDvtOrHjm+ubvH6dONfpb+wktmPFr20pjhxLitUsSjQlSpQoUey9NwBE79i+O3PuHwuAKNsAbJ/v53n0iMQOdg4kAOc7p/yOkFJKEBERkWEp2W4AERERZRfDABERkcExDBARERkcwwAREZHBMQwQEREZHMMAERGRwTEMEBERGRzDABERkcGZkr3wvpovprMdRDQDwWVzUvZeAwuscV8fmivivh5oCMZ9vbG+K+m23F1zJulrHy4+lPS1REayZE5rwms4MkBERGRwDANEREQGxzBARERkcAwDREREBscwQEREZHAMA0SUMol2EhBRbmIYIKK8x22FRDPDMEBERGRwDANEREQGxzBARERkcAwDREREBscwQEREZHAMA0SUk6ZySBERzQzDABERkcExDBARERkcwwAREZHBMQwQUcY01ndluwlEFAXDABERkcExDBARERkcwwAREZHBMQwQEREZHMMAERGRwTEMEFHShuaKbDeBiNKAYYCIiMjgGAaIiIgMjmGAiIjI4BgGiIiIDI5hgIiIyOAYBoiIiAyOYYCIiMjgGAaIiIgMjmGAiIjI4BgGiIiIDI5hgIiIyOAYBoiIiAyOYYCI8trDxYey3QSivMcwQEREZHAMA0SUc+6uOZPtJhAZCsMAEWVEY31XtptARDEwDBARERkcwwAREZHBMQwQEREZHMMAERGRwTEMEBERGRzDABERkcExDBARERkcwwAREZHBMQwQUUoEGoLZbgIRTRPDABERkcExDBARERkcwwAREZHBMQwQEREZHMMAERGRwTEMEBERGRzDABERkcExDBARERkcwwAREZHBMQwQEREZHMMAEaVdY31XtptARHEwDBARERkcwwAREZHBMQwQUU65u+ZMtptAZDgMA0RERAbHMEBERGRwDANEREQGxzBARERkcAwDRJS3Hi4+lO0mEBUEhgEiIiKDYxggIiIyOIYBIiIig2MYICIi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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since end of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "wfZCzuq9KY9b",
        "outputId": "84ba7060-d0ad-4c2f-872d-7893c5a4cc2a"
      },
      "execution_count": 179,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since end of run: 1710116609.0409498\n",
            "Mon Mar 11 00:23:29 2024\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since beginning of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "Ft6S13x6KuEQ",
        "outputId": "69f667b1-c04f-4ae4-ec24-ebf858d4c4a7"
      },
      "execution_count": 180,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since beginning of run: 1710116609.0548553\n",
            "Mon Mar 11 00:23:29 2024\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BMxSJo5gtOmQ"
      },
      "source": [
        "# VS Fully Connected"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NKQx7stYswzU",
        "outputId": "2087be34-76a5-491c-ca03-1588bd81639d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 11458
        }
      },
      "source": [
        "optimizer = Adam(learning_rate=0.0008)\n",
        "fc_model.compile(optimizer=optimizer, loss=\"mean_squared_error\")\n",
        "fc_model.fit(X, Y, epochs=300, verbose=2)\n",
        "# Plotting code, feel free to ignore.\n",
        "h = 1.0\n",
        "x_min, x_max = X[:, 0].min() - 5, X[:, 0].max() + 5\n",
        "y_min, y_max = X[:, 1].min() - 5, X[:, 1].max() + 5\n",
        "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n",
        "                     np.arange(y_min, y_max, h))\n",
        "\n",
        "# here \"model\" is your model's prediction (classification) function\n",
        "Z = fc_model.predict(np.c_[xx.ravel(), yy.ravel()])\n",
        "\n",
        "# Put the result into a color plot\n",
        "Z = Z.reshape(xx.shape)\n",
        "plt.contourf(xx, yy, Z)\n",
        "plt.axis('off')\n",
        "\n",
        "# Plot also the training points\n",
        "plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)"
      ],
      "execution_count": 181,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/300\n",
            "3/3 - 1s - loss: 0.5161 - 664ms/epoch - 221ms/step\n",
            "Epoch 2/300\n",
            "3/3 - 0s - loss: 0.1710 - 25ms/epoch - 8ms/step\n",
            "Epoch 3/300\n",
            "3/3 - 0s - loss: 0.0914 - 26ms/epoch - 9ms/step\n",
            "Epoch 4/300\n",
            "3/3 - 0s - loss: 0.0979 - 21ms/epoch - 7ms/step\n",
            "Epoch 5/300\n",
            "3/3 - 0s - loss: 0.0707 - 25ms/epoch - 8ms/step\n",
            "Epoch 6/300\n",
            "3/3 - 0s - loss: 0.0745 - 22ms/epoch - 7ms/step\n",
            "Epoch 7/300\n",
            "3/3 - 0s - loss: 0.0677 - 26ms/epoch - 9ms/step\n",
            "Epoch 8/300\n",
            "3/3 - 0s - loss: 0.0649 - 21ms/epoch - 7ms/step\n",
            "Epoch 9/300\n",
            "3/3 - 0s - loss: 0.0547 - 21ms/epoch - 7ms/step\n",
            "Epoch 10/300\n",
            "3/3 - 0s - loss: 0.0633 - 24ms/epoch - 8ms/step\n",
            "Epoch 11/300\n",
            "3/3 - 0s - loss: 0.0519 - 23ms/epoch - 8ms/step\n",
            "Epoch 12/300\n",
            "3/3 - 0s - loss: 0.0509 - 24ms/epoch - 8ms/step\n",
            "Epoch 13/300\n",
            "3/3 - 0s - loss: 0.0487 - 25ms/epoch - 8ms/step\n",
            "Epoch 14/300\n",
            "3/3 - 0s - loss: 0.0504 - 24ms/epoch - 8ms/step\n",
            "Epoch 15/300\n",
            "3/3 - 0s - loss: 0.0505 - 24ms/epoch - 8ms/step\n",
            "Epoch 16/300\n",
            "3/3 - 0s - loss: 0.0524 - 26ms/epoch - 9ms/step\n",
            "Epoch 17/300\n",
            "3/3 - 0s - loss: 0.0598 - 21ms/epoch - 7ms/step\n",
            "Epoch 18/300\n",
            "3/3 - 0s - loss: 0.0503 - 25ms/epoch - 8ms/step\n",
            "Epoch 19/300\n",
            "3/3 - 0s - loss: 0.0519 - 26ms/epoch - 9ms/step\n",
            "Epoch 20/300\n",
            "3/3 - 0s - loss: 0.0452 - 22ms/epoch - 7ms/step\n",
            "Epoch 21/300\n",
            "3/3 - 0s - loss: 0.0430 - 20ms/epoch - 7ms/step\n",
            "Epoch 22/300\n",
            "3/3 - 0s - loss: 0.0434 - 25ms/epoch - 8ms/step\n",
            "Epoch 23/300\n",
            "3/3 - 0s - loss: 0.0467 - 23ms/epoch - 8ms/step\n",
            "Epoch 24/300\n",
            "3/3 - 0s - loss: 0.0399 - 24ms/epoch - 8ms/step\n",
            "Epoch 25/300\n",
            "3/3 - 0s - loss: 0.0374 - 27ms/epoch - 9ms/step\n",
            "Epoch 26/300\n",
            "3/3 - 0s - loss: 0.0404 - 24ms/epoch - 8ms/step\n",
            "Epoch 27/300\n",
            "3/3 - 0s - loss: 0.0513 - 26ms/epoch - 9ms/step\n",
            "Epoch 28/300\n",
            "3/3 - 0s - loss: 0.0435 - 22ms/epoch - 7ms/step\n",
            "Epoch 29/300\n",
            "3/3 - 0s - loss: 0.0456 - 22ms/epoch - 7ms/step\n",
            "Epoch 30/300\n",
            "3/3 - 0s - loss: 0.0402 - 23ms/epoch - 8ms/step\n",
            "Epoch 31/300\n",
            "3/3 - 0s - loss: 0.0413 - 25ms/epoch - 8ms/step\n",
            "Epoch 32/300\n",
            "3/3 - 0s - loss: 0.0428 - 23ms/epoch - 8ms/step\n",
            "Epoch 33/300\n",
            "3/3 - 0s - loss: 0.0438 - 23ms/epoch - 8ms/step\n",
            "Epoch 34/300\n",
            "3/3 - 0s - loss: 0.0401 - 22ms/epoch - 7ms/step\n",
            "Epoch 35/300\n",
            "3/3 - 0s - loss: 0.0345 - 23ms/epoch - 8ms/step\n",
            "Epoch 36/300\n",
            "3/3 - 0s - loss: 0.0330 - 24ms/epoch - 8ms/step\n",
            "Epoch 37/300\n",
            "3/3 - 0s - loss: 0.0437 - 24ms/epoch - 8ms/step\n",
            "Epoch 38/300\n",
            "3/3 - 0s - loss: 0.0404 - 24ms/epoch - 8ms/step\n",
            "Epoch 39/300\n",
            "3/3 - 0s - loss: 0.0291 - 22ms/epoch - 7ms/step\n",
            "Epoch 40/300\n",
            "3/3 - 0s - loss: 0.0419 - 25ms/epoch - 8ms/step\n",
            "Epoch 41/300\n",
            "3/3 - 0s - loss: 0.0353 - 21ms/epoch - 7ms/step\n",
            "Epoch 42/300\n",
            "3/3 - 0s - loss: 0.0333 - 25ms/epoch - 8ms/step\n",
            "Epoch 43/300\n",
            "3/3 - 0s - loss: 0.0332 - 22ms/epoch - 7ms/step\n",
            "Epoch 44/300\n",
            "3/3 - 0s - loss: 0.0404 - 26ms/epoch - 9ms/step\n",
            "Epoch 45/300\n",
            "3/3 - 0s - loss: 0.0323 - 23ms/epoch - 8ms/step\n",
            "Epoch 46/300\n",
            "3/3 - 0s - loss: 0.0377 - 23ms/epoch - 8ms/step\n",
            "Epoch 47/300\n",
            "3/3 - 0s - loss: 0.0340 - 25ms/epoch - 8ms/step\n",
            "Epoch 48/300\n",
            "3/3 - 0s - loss: 0.0303 - 23ms/epoch - 8ms/step\n",
            "Epoch 49/300\n",
            "3/3 - 0s - loss: 0.0346 - 24ms/epoch - 8ms/step\n",
            "Epoch 50/300\n",
            "3/3 - 0s - loss: 0.0261 - 22ms/epoch - 7ms/step\n",
            "Epoch 51/300\n",
            "3/3 - 0s - loss: 0.0290 - 23ms/epoch - 8ms/step\n",
            "Epoch 52/300\n",
            "3/3 - 0s - loss: 0.0270 - 21ms/epoch - 7ms/step\n",
            "Epoch 53/300\n",
            "3/3 - 0s - loss: 0.0257 - 22ms/epoch - 7ms/step\n",
            "Epoch 54/300\n",
            "3/3 - 0s - loss: 0.0266 - 24ms/epoch - 8ms/step\n",
            "Epoch 55/300\n",
            "3/3 - 0s - loss: 0.0214 - 20ms/epoch - 7ms/step\n",
            "Epoch 56/300\n",
            "3/3 - 0s - loss: 0.0286 - 24ms/epoch - 8ms/step\n",
            "Epoch 57/300\n",
            "3/3 - 0s - loss: 0.0249 - 23ms/epoch - 8ms/step\n",
            "Epoch 58/300\n",
            "3/3 - 0s - loss: 0.0206 - 25ms/epoch - 8ms/step\n",
            "Epoch 59/300\n",
            "3/3 - 0s - loss: 0.0205 - 22ms/epoch - 7ms/step\n",
            "Epoch 60/300\n",
            "3/3 - 0s - loss: 0.0218 - 24ms/epoch - 8ms/step\n",
            "Epoch 61/300\n",
            "3/3 - 0s - loss: 0.0163 - 27ms/epoch - 9ms/step\n",
            "Epoch 62/300\n",
            "3/3 - 0s - loss: 0.0193 - 24ms/epoch - 8ms/step\n",
            "Epoch 63/300\n",
            "3/3 - 0s - loss: 0.0209 - 26ms/epoch - 9ms/step\n",
            "Epoch 64/300\n",
            "3/3 - 0s - loss: 0.0147 - 24ms/epoch - 8ms/step\n",
            "Epoch 65/300\n",
            "3/3 - 0s - loss: 0.0218 - 23ms/epoch - 8ms/step\n",
            "Epoch 66/300\n",
            "3/3 - 0s - loss: 0.0166 - 24ms/epoch - 8ms/step\n",
            "Epoch 67/300\n",
            "3/3 - 0s - loss: 0.0166 - 22ms/epoch - 7ms/step\n",
            "Epoch 68/300\n",
            "3/3 - 0s - loss: 0.0152 - 23ms/epoch - 8ms/step\n",
            "Epoch 69/300\n",
            "3/3 - 0s - loss: 0.0119 - 25ms/epoch - 8ms/step\n",
            "Epoch 70/300\n",
            "3/3 - 0s - loss: 0.0147 - 24ms/epoch - 8ms/step\n",
            "Epoch 71/300\n",
            "3/3 - 0s - loss: 0.0131 - 24ms/epoch - 8ms/step\n",
            "Epoch 72/300\n",
            "3/3 - 0s - loss: 0.0112 - 24ms/epoch - 8ms/step\n",
            "Epoch 73/300\n",
            "3/3 - 0s - loss: 0.0104 - 22ms/epoch - 7ms/step\n",
            "Epoch 74/300\n",
            "3/3 - 0s - loss: 0.0104 - 24ms/epoch - 8ms/step\n",
            "Epoch 75/300\n",
            "3/3 - 0s - loss: 0.0166 - 22ms/epoch - 7ms/step\n",
            "Epoch 76/300\n",
            "3/3 - 0s - loss: 0.0201 - 23ms/epoch - 8ms/step\n",
            "Epoch 77/300\n",
            "3/3 - 0s - loss: 0.0159 - 24ms/epoch - 8ms/step\n",
            "Epoch 78/300\n",
            "3/3 - 0s - loss: 0.0103 - 22ms/epoch - 7ms/step\n",
            "Epoch 79/300\n",
            "3/3 - 0s - loss: 0.0112 - 22ms/epoch - 7ms/step\n",
            "Epoch 80/300\n",
            "3/3 - 0s - loss: 0.0104 - 22ms/epoch - 7ms/step\n",
            "Epoch 81/300\n",
            "3/3 - 0s - loss: 0.0075 - 24ms/epoch - 8ms/step\n",
            "Epoch 82/300\n",
            "3/3 - 0s - loss: 0.0071 - 22ms/epoch - 7ms/step\n",
            "Epoch 83/300\n",
            "3/3 - 0s - loss: 0.0070 - 22ms/epoch - 7ms/step\n",
            "Epoch 84/300\n",
            "3/3 - 0s - loss: 0.0080 - 22ms/epoch - 7ms/step\n",
            "Epoch 85/300\n",
            "3/3 - 0s - loss: 0.0084 - 24ms/epoch - 8ms/step\n",
            "Epoch 86/300\n",
            "3/3 - 0s - loss: 0.0072 - 25ms/epoch - 8ms/step\n",
            "Epoch 87/300\n",
            "3/3 - 0s - loss: 0.0068 - 21ms/epoch - 7ms/step\n",
            "Epoch 88/300\n",
            "3/3 - 0s - loss: 0.0052 - 23ms/epoch - 8ms/step\n",
            "Epoch 89/300\n",
            "3/3 - 0s - loss: 0.0072 - 24ms/epoch - 8ms/step\n",
            "Epoch 90/300\n",
            "3/3 - 0s - loss: 0.0104 - 22ms/epoch - 7ms/step\n",
            "Epoch 91/300\n",
            "3/3 - 0s - loss: 0.0115 - 22ms/epoch - 7ms/step\n",
            "Epoch 92/300\n",
            "3/3 - 0s - loss: 0.0081 - 24ms/epoch - 8ms/step\n",
            "Epoch 93/300\n",
            "3/3 - 0s - loss: 0.0089 - 23ms/epoch - 8ms/step\n",
            "Epoch 94/300\n",
            "3/3 - 0s - loss: 0.0102 - 23ms/epoch - 8ms/step\n",
            "Epoch 95/300\n",
            "3/3 - 0s - loss: 0.0148 - 21ms/epoch - 7ms/step\n",
            "Epoch 96/300\n",
            "3/3 - 0s - loss: 0.0143 - 23ms/epoch - 8ms/step\n",
            "Epoch 97/300\n",
            "3/3 - 0s - loss: 0.0155 - 25ms/epoch - 8ms/step\n",
            "Epoch 98/300\n",
            "3/3 - 0s - loss: 0.0067 - 23ms/epoch - 8ms/step\n",
            "Epoch 99/300\n",
            "3/3 - 0s - loss: 0.0126 - 23ms/epoch - 8ms/step\n",
            "Epoch 100/300\n",
            "3/3 - 0s - loss: 0.0108 - 24ms/epoch - 8ms/step\n",
            "Epoch 101/300\n",
            "3/3 - 0s - loss: 0.0047 - 25ms/epoch - 8ms/step\n",
            "Epoch 102/300\n",
            "3/3 - 0s - loss: 0.0031 - 22ms/epoch - 7ms/step\n",
            "Epoch 103/300\n",
            "3/3 - 0s - loss: 0.0049 - 26ms/epoch - 9ms/step\n",
            "Epoch 104/300\n",
            "3/3 - 0s - loss: 0.0035 - 27ms/epoch - 9ms/step\n",
            "Epoch 105/300\n",
            "3/3 - 0s - loss: 0.0027 - 23ms/epoch - 8ms/step\n",
            "Epoch 106/300\n",
            "3/3 - 0s - loss: 0.0030 - 25ms/epoch - 8ms/step\n",
            "Epoch 107/300\n",
            "3/3 - 0s - loss: 0.0022 - 24ms/epoch - 8ms/step\n",
            "Epoch 108/300\n",
            "3/3 - 0s - loss: 0.0016 - 22ms/epoch - 7ms/step\n",
            "Epoch 109/300\n",
            "3/3 - 0s - loss: 0.0022 - 23ms/epoch - 8ms/step\n",
            "Epoch 110/300\n",
            "3/3 - 0s - loss: 0.0019 - 23ms/epoch - 8ms/step\n",
            "Epoch 111/300\n",
            "3/3 - 0s - loss: 0.0021 - 23ms/epoch - 8ms/step\n",
            "Epoch 112/300\n",
            "3/3 - 0s - loss: 0.0011 - 23ms/epoch - 8ms/step\n",
            "Epoch 113/300\n",
            "3/3 - 0s - loss: 0.0017 - 24ms/epoch - 8ms/step\n",
            "Epoch 114/300\n",
            "3/3 - 0s - loss: 0.0014 - 23ms/epoch - 8ms/step\n",
            "Epoch 115/300\n",
            "3/3 - 0s - loss: 0.0014 - 24ms/epoch - 8ms/step\n",
            "Epoch 116/300\n",
            "3/3 - 0s - loss: 0.0017 - 25ms/epoch - 8ms/step\n",
            "Epoch 117/300\n",
            "3/3 - 0s - loss: 0.0023 - 22ms/epoch - 7ms/step\n",
            "Epoch 118/300\n",
            "3/3 - 0s - loss: 0.0024 - 29ms/epoch - 10ms/step\n",
            "Epoch 119/300\n",
            "3/3 - 0s - loss: 0.0019 - 23ms/epoch - 8ms/step\n",
            "Epoch 120/300\n",
            "3/3 - 0s - loss: 0.0027 - 24ms/epoch - 8ms/step\n",
            "Epoch 121/300\n",
            "3/3 - 0s - loss: 0.0028 - 23ms/epoch - 8ms/step\n",
            "Epoch 122/300\n",
            "3/3 - 0s - loss: 0.0033 - 25ms/epoch - 8ms/step\n",
            "Epoch 123/300\n",
            "3/3 - 0s - loss: 0.0028 - 25ms/epoch - 8ms/step\n",
            "Epoch 124/300\n",
            "3/3 - 0s - loss: 0.0025 - 22ms/epoch - 7ms/step\n",
            "Epoch 125/300\n",
            "3/3 - 0s - loss: 0.0022 - 22ms/epoch - 7ms/step\n",
            "Epoch 126/300\n",
            "3/3 - 0s - loss: 0.0012 - 21ms/epoch - 7ms/step\n",
            "Epoch 127/300\n",
            "3/3 - 0s - loss: 0.0015 - 21ms/epoch - 7ms/step\n",
            "Epoch 128/300\n",
            "3/3 - 0s - loss: 0.0012 - 20ms/epoch - 7ms/step\n",
            "Epoch 129/300\n",
            "3/3 - 0s - loss: 0.0011 - 22ms/epoch - 7ms/step\n",
            "Epoch 130/300\n",
            "3/3 - 0s - loss: 0.0011 - 22ms/epoch - 7ms/step\n",
            "Epoch 131/300\n",
            "3/3 - 0s - loss: 0.0011 - 23ms/epoch - 8ms/step\n",
            "Epoch 132/300\n",
            "3/3 - 0s - loss: 9.1813e-04 - 22ms/epoch - 7ms/step\n",
            "Epoch 133/300\n",
            "3/3 - 0s - loss: 0.0023 - 27ms/epoch - 9ms/step\n",
            "Epoch 134/300\n",
            "3/3 - 0s - loss: 0.0020 - 25ms/epoch - 8ms/step\n",
            "Epoch 135/300\n",
            "3/3 - 0s - loss: 0.0064 - 27ms/epoch - 9ms/step\n",
            "Epoch 136/300\n",
            "3/3 - 0s - loss: 0.0094 - 24ms/epoch - 8ms/step\n",
            "Epoch 137/300\n",
            "3/3 - 0s - loss: 0.0070 - 23ms/epoch - 8ms/step\n",
            "Epoch 138/300\n",
            "3/3 - 0s - loss: 0.0057 - 23ms/epoch - 8ms/step\n",
            "Epoch 139/300\n",
            "3/3 - 0s - loss: 0.0073 - 21ms/epoch - 7ms/step\n",
            "Epoch 140/300\n",
            "3/3 - 0s - loss: 0.0055 - 26ms/epoch - 9ms/step\n",
            "Epoch 141/300\n",
            "3/3 - 0s - loss: 0.0050 - 21ms/epoch - 7ms/step\n",
            "Epoch 142/300\n",
            "3/3 - 0s - loss: 0.0037 - 25ms/epoch - 8ms/step\n",
            "Epoch 143/300\n",
            "3/3 - 0s - loss: 0.0036 - 22ms/epoch - 7ms/step\n",
            "Epoch 144/300\n",
            "3/3 - 0s - loss: 0.0036 - 24ms/epoch - 8ms/step\n",
            "Epoch 145/300\n",
            "3/3 - 0s - loss: 0.0031 - 23ms/epoch - 8ms/step\n",
            "Epoch 146/300\n",
            "3/3 - 0s - loss: 0.0048 - 22ms/epoch - 7ms/step\n",
            "Epoch 147/300\n",
            "3/3 - 0s - loss: 0.0045 - 21ms/epoch - 7ms/step\n",
            "Epoch 148/300\n",
            "3/3 - 0s - loss: 0.0040 - 22ms/epoch - 7ms/step\n",
            "Epoch 149/300\n",
            "3/3 - 0s - loss: 0.0026 - 23ms/epoch - 8ms/step\n",
            "Epoch 150/300\n",
            "3/3 - 0s - loss: 0.0017 - 22ms/epoch - 7ms/step\n",
            "Epoch 151/300\n",
            "3/3 - 0s - loss: 0.0012 - 23ms/epoch - 8ms/step\n",
            "Epoch 152/300\n",
            "3/3 - 0s - loss: 8.4879e-04 - 22ms/epoch - 7ms/step\n",
            "Epoch 153/300\n",
            "3/3 - 0s - loss: 6.6115e-04 - 24ms/epoch - 8ms/step\n",
            "Epoch 154/300\n",
            "3/3 - 0s - loss: 4.4950e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 155/300\n",
            "3/3 - 0s - loss: 4.5054e-04 - 22ms/epoch - 7ms/step\n",
            "Epoch 156/300\n",
            "3/3 - 0s - loss: 4.6622e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 157/300\n",
            "3/3 - 0s - loss: 2.5562e-04 - 23ms/epoch - 8ms/step\n",
            "Epoch 158/300\n",
            "3/3 - 0s - loss: 2.3567e-04 - 23ms/epoch - 8ms/step\n",
            "Epoch 159/300\n",
            "3/3 - 0s - loss: 1.8505e-04 - 21ms/epoch - 7ms/step\n",
            "Epoch 160/300\n",
            "3/3 - 0s - loss: 1.6148e-04 - 22ms/epoch - 7ms/step\n",
            "Epoch 161/300\n",
            "3/3 - 0s - loss: 1.0986e-04 - 23ms/epoch - 8ms/step\n",
            "Epoch 162/300\n",
            "3/3 - 0s - loss: 1.1570e-04 - 23ms/epoch - 8ms/step\n",
            "Epoch 163/300\n",
            "3/3 - 0s - loss: 1.1128e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 164/300\n",
            "3/3 - 0s - loss: 1.0638e-04 - 23ms/epoch - 8ms/step\n",
            "Epoch 165/300\n",
            "3/3 - 0s - loss: 1.1012e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 166/300\n",
            "3/3 - 0s - loss: 8.5186e-05 - 22ms/epoch - 7ms/step\n",
            "Epoch 167/300\n",
            "3/3 - 0s - loss: 9.2764e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 168/300\n",
            "3/3 - 0s - loss: 1.0008e-04 - 24ms/epoch - 8ms/step\n",
            "Epoch 169/300\n",
            "3/3 - 0s - loss: 7.8175e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 170/300\n",
            "3/3 - 0s - loss: 1.2259e-04 - 24ms/epoch - 8ms/step\n",
            "Epoch 171/300\n",
            "3/3 - 0s - loss: 7.8837e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 172/300\n",
            "3/3 - 0s - loss: 5.5417e-05 - 25ms/epoch - 8ms/step\n",
            "Epoch 173/300\n",
            "3/3 - 0s - loss: 4.8156e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 174/300\n",
            "3/3 - 0s - loss: 5.5512e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 175/300\n",
            "3/3 - 0s - loss: 5.9226e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 176/300\n",
            "3/3 - 0s - loss: 4.8348e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 177/300\n",
            "3/3 - 0s - loss: 5.2893e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 178/300\n",
            "3/3 - 0s - loss: 6.8965e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 179/300\n",
            "3/3 - 0s - loss: 1.0725e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 180/300\n",
            "3/3 - 0s - loss: 4.6366e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 181/300\n",
            "3/3 - 0s - loss: 4.6022e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 182/300\n",
            "3/3 - 0s - loss: 4.4732e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 183/300\n",
            "3/3 - 0s - loss: 4.6719e-05 - 22ms/epoch - 7ms/step\n",
            "Epoch 184/300\n",
            "3/3 - 0s - loss: 5.8864e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 185/300\n",
            "3/3 - 0s - loss: 4.7794e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 186/300\n",
            "3/3 - 0s - loss: 3.3906e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 187/300\n",
            "3/3 - 0s - loss: 3.5021e-05 - 25ms/epoch - 8ms/step\n",
            "Epoch 188/300\n",
            "3/3 - 0s - loss: 3.7663e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 189/300\n",
            "3/3 - 0s - loss: 5.6241e-05 - 22ms/epoch - 7ms/step\n",
            "Epoch 190/300\n",
            "3/3 - 0s - loss: 6.1827e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 191/300\n",
            "3/3 - 0s - loss: 4.6616e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 192/300\n",
            "3/3 - 0s - loss: 4.0019e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 193/300\n",
            "3/3 - 0s - loss: 3.2296e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 194/300\n",
            "3/3 - 0s - loss: 3.9861e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 195/300\n",
            "3/3 - 0s - loss: 3.4422e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 196/300\n",
            "3/3 - 0s - loss: 4.2728e-05 - 25ms/epoch - 8ms/step\n",
            "Epoch 197/300\n",
            "3/3 - 0s - loss: 6.1971e-05 - 25ms/epoch - 8ms/step\n",
            "Epoch 198/300\n",
            "3/3 - 0s - loss: 8.8934e-05 - 25ms/epoch - 8ms/step\n",
            "Epoch 199/300\n",
            "3/3 - 0s - loss: 5.9025e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 200/300\n",
            "3/3 - 0s - loss: 4.8964e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 201/300\n",
            "3/3 - 0s - loss: 6.9923e-05 - 25ms/epoch - 8ms/step\n",
            "Epoch 202/300\n",
            "3/3 - 0s - loss: 4.3178e-05 - 25ms/epoch - 8ms/step\n",
            "Epoch 203/300\n",
            "3/3 - 0s - loss: 6.0263e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 204/300\n",
            "3/3 - 0s - loss: 7.6652e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 205/300\n",
            "3/3 - 0s - loss: 3.7859e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 206/300\n",
            "3/3 - 0s - loss: 3.3544e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 207/300\n",
            "3/3 - 0s - loss: 3.4797e-05 - 25ms/epoch - 8ms/step\n",
            "Epoch 208/300\n",
            "3/3 - 0s - loss: 4.8786e-05 - 28ms/epoch - 9ms/step\n",
            "Epoch 209/300\n",
            "3/3 - 0s - loss: 4.0981e-05 - 22ms/epoch - 7ms/step\n",
            "Epoch 210/300\n",
            "3/3 - 0s - loss: 3.0743e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 211/300\n",
            "3/3 - 0s - loss: 3.7135e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 212/300\n",
            "3/3 - 0s - loss: 5.2987e-05 - 22ms/epoch - 7ms/step\n",
            "Epoch 213/300\n",
            "3/3 - 0s - loss: 3.3173e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 214/300\n",
            "3/3 - 0s - loss: 2.5845e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 215/300\n",
            "3/3 - 0s - loss: 2.9839e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 216/300\n",
            "3/3 - 0s - loss: 4.6426e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 217/300\n",
            "3/3 - 0s - loss: 2.8928e-05 - 22ms/epoch - 7ms/step\n",
            "Epoch 218/300\n",
            "3/3 - 0s - loss: 3.5612e-05 - 26ms/epoch - 9ms/step\n",
            "Epoch 219/300\n",
            "3/3 - 0s - loss: 2.1724e-05 - 26ms/epoch - 9ms/step\n",
            "Epoch 220/300\n",
            "3/3 - 0s - loss: 4.6543e-05 - 26ms/epoch - 9ms/step\n",
            "Epoch 221/300\n",
            "3/3 - 0s - loss: 3.4763e-05 - 27ms/epoch - 9ms/step\n",
            "Epoch 222/300\n",
            "3/3 - 0s - loss: 2.4878e-05 - 26ms/epoch - 9ms/step\n",
            "Epoch 223/300\n",
            "3/3 - 0s - loss: 4.1815e-05 - 29ms/epoch - 10ms/step\n",
            "Epoch 224/300\n",
            "3/3 - 0s - loss: 5.9154e-05 - 27ms/epoch - 9ms/step\n",
            "Epoch 225/300\n",
            "3/3 - 0s - loss: 6.4281e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 226/300\n",
            "3/3 - 0s - loss: 3.5435e-05 - 27ms/epoch - 9ms/step\n",
            "Epoch 227/300\n",
            "3/3 - 0s - loss: 6.1217e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 228/300\n",
            "3/3 - 0s - loss: 6.7424e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 229/300\n",
            "3/3 - 0s - loss: 3.6607e-05 - 27ms/epoch - 9ms/step\n",
            "Epoch 230/300\n",
            "3/3 - 0s - loss: 3.9988e-05 - 26ms/epoch - 9ms/step\n",
            "Epoch 231/300\n",
            "3/3 - 0s - loss: 8.6042e-05 - 25ms/epoch - 8ms/step\n",
            "Epoch 232/300\n",
            "3/3 - 0s - loss: 5.8515e-05 - 24ms/epoch - 8ms/step\n",
            "Epoch 233/300\n",
            "3/3 - 0s - loss: 7.4168e-05 - 25ms/epoch - 8ms/step\n",
            "Epoch 234/300\n",
            "3/3 - 0s - loss: 6.8703e-05 - 26ms/epoch - 9ms/step\n",
            "Epoch 235/300\n",
            "3/3 - 0s - loss: 8.7893e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 236/300\n",
            "3/3 - 0s - loss: 9.5618e-05 - 23ms/epoch - 8ms/step\n",
            "Epoch 237/300\n",
            "3/3 - 0s - loss: 1.3338e-04 - 24ms/epoch - 8ms/step\n",
            "Epoch 238/300\n",
            "3/3 - 0s - loss: 2.3938e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 239/300\n",
            "3/3 - 0s - loss: 2.3237e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 240/300\n",
            "3/3 - 0s - loss: 1.8916e-04 - 23ms/epoch - 8ms/step\n",
            "Epoch 241/300\n",
            "3/3 - 0s - loss: 1.8814e-04 - 24ms/epoch - 8ms/step\n",
            "Epoch 242/300\n",
            "3/3 - 0s - loss: 2.0895e-04 - 28ms/epoch - 9ms/step\n",
            "Epoch 243/300\n",
            "3/3 - 0s - loss: 1.7872e-04 - 23ms/epoch - 8ms/step\n",
            "Epoch 244/300\n",
            "3/3 - 0s - loss: 2.5162e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 245/300\n",
            "3/3 - 0s - loss: 3.4911e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 246/300\n",
            "3/3 - 0s - loss: 2.3079e-04 - 27ms/epoch - 9ms/step\n",
            "Epoch 247/300\n",
            "3/3 - 0s - loss: 2.3605e-04 - 28ms/epoch - 9ms/step\n",
            "Epoch 248/300\n",
            "3/3 - 0s - loss: 2.2129e-04 - 23ms/epoch - 8ms/step\n",
            "Epoch 249/300\n",
            "3/3 - 0s - loss: 2.4857e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 250/300\n",
            "3/3 - 0s - loss: 2.2092e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 251/300\n",
            "3/3 - 0s - loss: 1.6712e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 252/300\n",
            "3/3 - 0s - loss: 2.2079e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 253/300\n",
            "3/3 - 0s - loss: 7.2202e-04 - 24ms/epoch - 8ms/step\n",
            "Epoch 254/300\n",
            "3/3 - 0s - loss: 5.7488e-04 - 27ms/epoch - 9ms/step\n",
            "Epoch 255/300\n",
            "3/3 - 0s - loss: 4.6318e-04 - 24ms/epoch - 8ms/step\n",
            "Epoch 256/300\n",
            "3/3 - 0s - loss: 3.6832e-04 - 27ms/epoch - 9ms/step\n",
            "Epoch 257/300\n",
            "3/3 - 0s - loss: 2.0895e-04 - 27ms/epoch - 9ms/step\n",
            "Epoch 258/300\n",
            "3/3 - 0s - loss: 1.6216e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 259/300\n",
            "3/3 - 0s - loss: 2.7634e-04 - 27ms/epoch - 9ms/step\n",
            "Epoch 260/300\n",
            "3/3 - 0s - loss: 2.7931e-04 - 27ms/epoch - 9ms/step\n",
            "Epoch 261/300\n",
            "3/3 - 0s - loss: 5.6954e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 262/300\n",
            "3/3 - 0s - loss: 3.9114e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 263/300\n",
            "3/3 - 0s - loss: 7.0755e-04 - 27ms/epoch - 9ms/step\n",
            "Epoch 264/300\n",
            "3/3 - 0s - loss: 5.0084e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 265/300\n",
            "3/3 - 0s - loss: 5.7527e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 266/300\n",
            "3/3 - 0s - loss: 4.1808e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 267/300\n",
            "3/3 - 0s - loss: 4.0661e-04 - 23ms/epoch - 8ms/step\n",
            "Epoch 268/300\n",
            "3/3 - 0s - loss: 5.6219e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 269/300\n",
            "3/3 - 0s - loss: 9.8626e-04 - 29ms/epoch - 10ms/step\n",
            "Epoch 270/300\n",
            "3/3 - 0s - loss: 0.0010 - 30ms/epoch - 10ms/step\n",
            "Epoch 271/300\n",
            "3/3 - 0s - loss: 7.7570e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 272/300\n",
            "3/3 - 0s - loss: 6.5459e-04 - 24ms/epoch - 8ms/step\n",
            "Epoch 273/300\n",
            "3/3 - 0s - loss: 8.9558e-04 - 28ms/epoch - 9ms/step\n",
            "Epoch 274/300\n",
            "3/3 - 0s - loss: 7.5086e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 275/300\n",
            "3/3 - 0s - loss: 5.3758e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 276/300\n",
            "3/3 - 0s - loss: 7.5874e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 277/300\n",
            "3/3 - 0s - loss: 0.0011 - 30ms/epoch - 10ms/step\n",
            "Epoch 278/300\n",
            "3/3 - 0s - loss: 0.0011 - 25ms/epoch - 8ms/step\n",
            "Epoch 279/300\n",
            "3/3 - 0s - loss: 8.8736e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 280/300\n",
            "3/3 - 0s - loss: 0.0010 - 23ms/epoch - 8ms/step\n",
            "Epoch 281/300\n",
            "3/3 - 0s - loss: 8.1059e-04 - 23ms/epoch - 8ms/step\n",
            "Epoch 282/300\n",
            "3/3 - 0s - loss: 8.3959e-04 - 26ms/epoch - 9ms/step\n",
            "Epoch 283/300\n",
            "3/3 - 0s - loss: 7.2795e-04 - 25ms/epoch - 8ms/step\n",
            "Epoch 284/300\n",
            "3/3 - 0s - loss: 0.0026 - 24ms/epoch - 8ms/step\n",
            "Epoch 285/300\n",
            "3/3 - 0s - loss: 0.0018 - 25ms/epoch - 8ms/step\n",
            "Epoch 286/300\n",
            "3/3 - 0s - loss: 0.0027 - 23ms/epoch - 8ms/step\n",
            "Epoch 287/300\n",
            "3/3 - 0s - loss: 0.0022 - 21ms/epoch - 7ms/step\n",
            "Epoch 288/300\n",
            "3/3 - 0s - loss: 0.0025 - 25ms/epoch - 8ms/step\n",
            "Epoch 289/300\n",
            "3/3 - 0s - loss: 0.0034 - 22ms/epoch - 7ms/step\n",
            "Epoch 290/300\n",
            "3/3 - 0s - loss: 0.0060 - 26ms/epoch - 9ms/step\n",
            "Epoch 291/300\n",
            "3/3 - 0s - loss: 0.0055 - 26ms/epoch - 9ms/step\n",
            "Epoch 292/300\n",
            "3/3 - 0s - loss: 0.0048 - 23ms/epoch - 8ms/step\n",
            "Epoch 293/300\n",
            "3/3 - 0s - loss: 0.0075 - 24ms/epoch - 8ms/step\n",
            "Epoch 294/300\n",
            "3/3 - 0s - loss: 0.0062 - 25ms/epoch - 8ms/step\n",
            "Epoch 295/300\n",
            "3/3 - 0s - loss: 0.0064 - 26ms/epoch - 9ms/step\n",
            "Epoch 296/300\n",
            "3/3 - 0s - loss: 0.0099 - 23ms/epoch - 8ms/step\n",
            "Epoch 297/300\n",
            "3/3 - 0s - loss: 0.0069 - 22ms/epoch - 7ms/step\n",
            "Epoch 298/300\n",
            "3/3 - 0s - loss: 0.0069 - 27ms/epoch - 9ms/step\n",
            "Epoch 299/300\n",
            "3/3 - 0s - loss: 0.0035 - 26ms/epoch - 9ms/step\n",
            "Epoch 300/300\n",
            "3/3 - 0s - loss: 0.0030 - 23ms/epoch - 8ms/step\n",
            "14/14 [==============================] - 0s 3ms/step\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.collections.PathCollection at 0x7bae7415a710>"
            ]
          },
          "metadata": {},
          "execution_count": 181
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since end of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "YyOarWssKyjN",
        "outputId": "f85f08d3-d60d-4cd8-e918-c211cdb87b2f"
      },
      "execution_count": 182,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since end of run: 1710116618.0413706\n",
            "Mon Mar 11 00:23:38 2024\n"
          ]
        }
      ]
    }
  ]
}