{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Applying CFL to the Visual Bars Dataset\n", "This example demonstrates how to run a basic CFL experiment on Visual Bars Data. \n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import visual_bars.generate_visual_bars_data as vbd\n", "from cfl.experiment import Experiment\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Loading Data " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Key Points for Loading Data\n", "1. The data should consist of a data set `X` and a data set `Y` that are aligned (each row in `X` corresponds to the row with the same index in `Y`)\n", "2. `X` should be the causal data set and `Y` should be the effect data \n", "3. For most instances of CFL, `X` and `Y` should be reshaped such that each one is a 2D array with dimensions (n_samples, n_features). Some instances of CFL require that `X` be a 4-D array." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load the Visual Bars Data\n", "To create a visual bars data set, we need to import the file `generate_visual_bars_data.py`. If you are trying to generate the visual bars data from outside of the root directory of the `cfl` reposity, add the `visual_bars` directory path to the PYTHONPATH (same as you did for the `cfl` package) for easy importing. \n", "\n", "See the [visual bars page](https://cfl.readthedocs.io/en/latest/more_info/Visual_Bars_data.html) for background on the visual bars data set." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# In order to generate visual bars data, we set the number of images we want to generate \n", "# (`n_samples`), the size of each image in pixels (`im_shape`), and the intensity of random noise\n", "# in the image (`noise_lvl`). To have reproducible results, we also will set a random seed. \n", "\n", "# create visual bars data \n", "n_samples = 5000 \n", "im_shape = (10, 10) \n", "noise_lvl= 0.03\n", "random_state = 180\n", "\n", "vb_data = vbd.VisualBarsData(n_samples=n_samples, im_shape=im_shape, \n", " noise_lvl=noise_lvl, set_random_seed=random_state)\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(5000, 10, 10)\n", "(5000,)\n", "True\n" ] } ], "source": [ "# We save an array of images to a variable `X` and the array of target behavior to a variable \n", "# `Y`. Note that `X` and `Y` are aligned - they must have the same number of observations, and \n", "# the nth image in `X` must correspond to the nth target value in `Y`. \n", "\n", "# retrieve the images and the target \n", "X = vb_data.getImages()\n", "Y = vb_data.getTarget()\n", "\n", "# X and Y have the same number of rows \n", "print(X.shape)\n", "print(Y.shape)\n", "print(X.shape[0]==Y.shape[0])\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Shaping the Data \n", "Because our `X` dataset is a set of images, we will use `CondExpCNN` for our CDE. This CDE requires that `X` be a 4-D array with dimensions `(n_samples, im_height, im_width, n_channels)` and `Y` to be 2-dimensional, with shape `(n_samples, n_features)`. \n", "\n", "The 'basic' CDE `CondExpMod`, which is better suited to non-spatially-organized data, requires a different input shape than `CondExpCNN`. For further guidelines about shaping your data, see [info about CDEs](https://cfl.readthedocs.io/en/latest/CDEs.html#input-shape-for-cdes). " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(5000, 10, 10, 1)\n", "(5000, 1)\n" ] } ], "source": [ "#reformat x, y into the right shape for the neural net \n", "\n", "# expand X \n", "X = np.expand_dims(X, -1) \n", "print(X.shape) #black and white images have just one channel\n", "\n", "# expand Y\n", "Y = np.expand_dims(Y, -1)\n", "print(Y.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Setting up the CFL Pipeline \n", "\n", "We will now set up an `Experiment`. The `Experiment` will create a CFL pipeline and automatically save all the parameters, results, and the trained models generated during this experiment.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "CFL takes in 3 sets of parameters, each in dictionary form: \n", "\n", "- `data_info` \n", "- `CDE_params` \n", "- `cluster_params` \n", "\n", "For further details on the meaning of these parameters, consult the documentation for the clusterer and the CondExp base class. \n", "\n", "In this case, we use a convolutional neural net for the CDE, and K-means for clustering. Consult the documentation for the other available models. \n", "\n", "Note that we didn't specify some parameters, and so those parameters are given default values (values printed below). \n", "\n", "Here we only are interested in clustering our cause space. For an example\n", "of how to cluster both cause and effect spaces, please refer to the El NiƱo tutorial." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "save_path 'visual_bars_cf' doesn't exist, creating now.\n", "All results from this run will be saved to visual_bars_cf/experiment0000\n", "Block: verbose not specified in input, defaulting to 1\n", "CondExpBase: weights_path not specified in input, defaulting to None\n", "CondExpBase: show_plot not specified in input, defaulting to True\n", "CondExpBase: standardize not specified in input, defaulting to False\n", "CondExpBase: tb_path not specified in input, defaulting to None\n", "CondExpBase: optuna_callback not specified in input, defaulting to None\n", "CondExpBase: optuna_trial not specified in input, defaulting to None\n", "CondExpBase: early_stopping not specified in input, defaulting to False\n", "CondExpBase: checkpoint_name not specified in input, defaulting to tmp_checkpoints\n", "Block: tune not specified in input, defaulting to False\n", "Block: user_input not specified in input, defaulting to True\n", "Block: verbose not specified in input, defaulting to 1\n" ] } ], "source": [ "# the parameters should be passed in dictionary form \n", "data_info = {'X_dims' : X.shape, \n", " 'Y_dims' : Y.shape, \n", " 'Y_type' : 'categorical' #options: 'categorical' or 'continuous'\n", " }\n", "\n", "# pass in empty parameter dictionaries to use the default parameter values (not \n", "# allowed for data_info)\n", "cnn_params = { 'model' : 'CondExpCNN',\n", " 'model_params' : {\n", " 'filters' : [8],\n", " 'input_shape' : data_info['X_dims'][1:],\n", " 'kernel_size' : [(4, 4)],\n", " 'pool_size' : [(2, 2)],\n", " 'padding' : ['same'],\n", " 'conv_activation' : ['relu'],\n", " 'dense_units' : 16,\n", " 'dense_activation' : 'relu',\n", " 'output_activation': None,\n", "\n", " 'batch_size' : 84, # parameters for training \n", " 'n_epochs' : 500,\n", " 'optimizer' : 'adam',\n", " 'opt_config' : {'lr' : 1e-5},\n", " 'loss' : 'mean_squared_error',\n", " 'best' : True, \n", " 'verbose' : 1\n", " }\n", " }\n", "\n", "cause_cluster_params = {'model' : 'KMeans', \n", " 'model_params' : {\n", " 'n_clusters' : 4, \n", " 'verbose' : 1\n", " }\n", "} \n", "\n", "# steps of this CFL pipeline\n", "block_names = ['CondDensityEstimator', 'CauseClusterer']\n", "block_params = [cnn_params, cause_cluster_params]\n", "\n", "# folder to save results to \n", "save_path = 'visual_bars_results' \n", "\n", "# create the experiment!\n", "my_exp = Experiment(X_train=X, Y_train=Y, data_info=data_info, \n", " block_names=block_names, block_params=block_params, \n", " results_path=save_path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that any parameters not specified will be given default values (shown in the print statements)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Training with a CFL object \n", "\n", "We now train the CFL object on our data. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "#################### Beginning CFL Experiment training. ####################\n", "Beginning CondDensityEstimator training...\n", "No GPU device detected.\n", "Epoch 1/500\n", "WARNING:tensorflow:AutoGraph could not transform .train_function at 0x1a44e105f0> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: 'arguments' object has no attribute 'posonlyargs'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "WARNING: AutoGraph could not transform .train_function at 0x1a44e105f0> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: 'arguments' object has no attribute 'posonlyargs'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "37/45 [=======================>......] - ETA: 0s - loss: 0.4977WARNING:tensorflow:AutoGraph could not transform .test_function at 0x1a46436050> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: 'arguments' object has no attribute 'posonlyargs'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "WARNING: AutoGraph could not transform .test_function at 0x1a46436050> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: 'arguments' object has no attribute 'posonlyargs'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "45/45 [==============================] - 3s 19ms/step - loss: 0.4909 - val_loss: 0.4782\n", "Epoch 2/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.4648 - val_loss: 0.4531\n", "Epoch 3/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.4406 - val_loss: 0.4297\n", "Epoch 4/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.4181 - val_loss: 0.4081\n", "Epoch 5/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.3971 - val_loss: 0.3875\n", "Epoch 6/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.3774 - val_loss: 0.3683\n", "Epoch 7/500\n", "45/45 [==============================] - 1s 14ms/step - loss: 0.3589 - val_loss: 0.3505\n", "Epoch 8/500\n", "45/45 [==============================] - 1s 14ms/step - loss: 0.3418 - val_loss: 0.3335\n", "Epoch 9/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.3257 - val_loss: 0.3180\n", "Epoch 10/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.3106 - val_loss: 0.3036\n", "Epoch 11/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.2968 - val_loss: 0.2897\n", "Epoch 12/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.2839 - val_loss: 0.2769\n", "Epoch 13/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.2720 - val_loss: 0.2653\n", "Epoch 14/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.2610 - val_loss: 0.2545\n", "Epoch 15/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.2509 - val_loss: 0.2450\n", "Epoch 16/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.2419 - val_loss: 0.2362\n", "Epoch 17/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.2338 - val_loss: 0.2284\n", "Epoch 18/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.2266 - val_loss: 0.2215\n", "Epoch 19/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.2203 - val_loss: 0.2155\n", "Epoch 20/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.2150 - val_loss: 0.2106\n", "Epoch 21/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.2104 - val_loss: 0.2064\n", "Epoch 22/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.2065 - val_loss: 0.2029\n", "Epoch 23/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.2033 - val_loss: 0.1998\n", "Epoch 24/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.2006 - val_loss: 0.1973\n", "Epoch 25/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1983 - val_loss: 0.1952\n", "Epoch 26/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1964 - val_loss: 0.1934\n", "Epoch 27/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1948 - val_loss: 0.1919\n", "Epoch 28/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1934 - val_loss: 0.1905\n", "Epoch 29/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1921 - val_loss: 0.1893\n", "Epoch 30/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1910 - val_loss: 0.1883\n", "Epoch 31/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1900 - val_loss: 0.1873\n", "Epoch 32/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1890 - val_loss: 0.1864\n", "Epoch 33/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1881 - val_loss: 0.1855\n", "Epoch 34/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1873 - val_loss: 0.1848\n", "Epoch 35/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1865 - val_loss: 0.1840\n", "Epoch 36/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1857 - val_loss: 0.1833\n", "Epoch 37/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1850 - val_loss: 0.1826\n", "Epoch 38/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1842 - val_loss: 0.1819\n", "Epoch 39/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1835 - val_loss: 0.1813\n", "Epoch 40/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1829 - val_loss: 0.1807\n", "Epoch 41/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1822 - val_loss: 0.1801\n", "Epoch 42/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1816 - val_loss: 0.1796\n", "Epoch 43/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1810 - val_loss: 0.1791\n", "Epoch 44/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1804 - val_loss: 0.1786\n", "Epoch 45/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1798 - val_loss: 0.1781\n", "Epoch 46/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1792 - val_loss: 0.1776\n", "Epoch 47/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1787 - val_loss: 0.1771\n", "Epoch 48/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1782 - val_loss: 0.1766\n", "Epoch 49/500\n", "45/45 [==============================] - 1s 16ms/step - loss: 0.1776 - val_loss: 0.1762\n", "Epoch 50/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1771 - val_loss: 0.1757\n", "Epoch 51/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1766 - val_loss: 0.1752\n", "Epoch 52/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1762 - val_loss: 0.1748\n", "Epoch 53/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1757 - val_loss: 0.1744\n", "Epoch 54/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1752 - val_loss: 0.1739\n", "Epoch 55/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1748 - val_loss: 0.1735\n", "Epoch 56/500\n", "45/45 [==============================] - 1s 14ms/step - loss: 0.1744 - val_loss: 0.1731\n", "Epoch 57/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1739 - val_loss: 0.1727\n", "Epoch 58/500\n", "45/45 [==============================] - 1s 16ms/step - loss: 0.1735 - val_loss: 0.1723\n", "Epoch 59/500\n", "45/45 [==============================] - 1s 15ms/step - loss: 0.1731 - val_loss: 0.1720\n", "Epoch 60/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1727 - val_loss: 0.1716\n", "Epoch 61/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1723 - val_loss: 0.1712\n", "Epoch 62/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1719 - val_loss: 0.1708\n", "Epoch 63/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1715 - val_loss: 0.1705\n", "Epoch 64/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1711 - val_loss: 0.1701\n", "Epoch 65/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1708 - val_loss: 0.1697\n", "Epoch 66/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1704 - val_loss: 0.1694\n", "Epoch 67/500\n", "45/45 [==============================] - 1s 16ms/step - loss: 0.1701 - val_loss: 0.1690\n", "Epoch 68/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1697 - val_loss: 0.1687\n", "Epoch 69/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1694 - val_loss: 0.1683\n", "Epoch 70/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1690 - val_loss: 0.1679\n", "Epoch 71/500\n", "45/45 [==============================] - 1s 17ms/step - loss: 0.1687 - val_loss: 0.1676\n", "Epoch 72/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1683 - val_loss: 0.1673\n", "Epoch 73/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1680 - val_loss: 0.1669\n", "Epoch 74/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1677 - val_loss: 0.1666\n", "Epoch 75/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1673 - val_loss: 0.1663\n", "Epoch 76/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1670 - val_loss: 0.1660\n", "Epoch 77/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1667 - val_loss: 0.1657\n", "Epoch 78/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1664 - val_loss: 0.1653\n", "Epoch 79/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1661 - val_loss: 0.1650\n", "Epoch 80/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1658 - val_loss: 0.1647\n", "Epoch 81/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1655 - val_loss: 0.1644\n", "Epoch 82/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1652 - val_loss: 0.1641\n", "Epoch 83/500\n", "45/45 [==============================] - 1s 17ms/step - loss: 0.1649 - val_loss: 0.1638\n", "Epoch 84/500\n", "45/45 [==============================] - 1s 16ms/step - loss: 0.1646 - val_loss: 0.1635\n", "Epoch 85/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1643 - val_loss: 0.1632\n", "Epoch 86/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1640 - val_loss: 0.1629\n", "Epoch 87/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1638 - val_loss: 0.1626\n", "Epoch 88/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1634 - val_loss: 0.1624\n", "Epoch 89/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1632 - val_loss: 0.1621\n", "Epoch 90/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1629 - val_loss: 0.1618\n", "Epoch 91/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1626 - val_loss: 0.1616\n", "Epoch 92/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1623 - val_loss: 0.1613\n", "Epoch 93/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1621 - val_loss: 0.1611\n", "Epoch 94/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1618 - val_loss: 0.1608\n", "Epoch 95/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1616 - val_loss: 0.1606\n", "Epoch 96/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1613 - val_loss: 0.1603\n", "Epoch 97/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1611 - val_loss: 0.1601\n", "Epoch 98/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1608 - val_loss: 0.1598\n", "Epoch 99/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1606 - val_loss: 0.1596\n", "Epoch 100/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1603 - val_loss: 0.1594\n", "Epoch 101/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1601 - val_loss: 0.1592\n", "Epoch 102/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1598 - val_loss: 0.1589\n", "Epoch 103/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1596 - val_loss: 0.1587\n", "Epoch 104/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1593 - val_loss: 0.1585\n", "Epoch 105/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1591 - val_loss: 0.1583\n", "Epoch 106/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1588 - val_loss: 0.1581\n", "Epoch 107/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1586 - val_loss: 0.1579\n", "Epoch 108/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1584 - val_loss: 0.1577\n", "Epoch 109/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1582 - val_loss: 0.1575\n", "Epoch 110/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1580 - val_loss: 0.1573\n", "Epoch 111/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1578 - val_loss: 0.1572\n", "Epoch 112/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1576 - val_loss: 0.1570\n", "Epoch 113/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1574 - val_loss: 0.1568\n", "Epoch 114/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1572 - val_loss: 0.1566\n", "Epoch 115/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1570 - val_loss: 0.1565\n", "Epoch 116/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1568 - val_loss: 0.1563\n", "Epoch 117/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1566 - val_loss: 0.1561\n", "Epoch 118/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1564 - val_loss: 0.1560\n", "Epoch 119/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1562 - val_loss: 0.1558\n", "Epoch 120/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1560 - val_loss: 0.1557\n", "Epoch 121/500\n", "45/45 [==============================] - 1s 14ms/step - loss: 0.1559 - val_loss: 0.1555\n", "Epoch 122/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1557 - val_loss: 0.1554\n", "Epoch 123/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1555 - val_loss: 0.1553\n", "Epoch 124/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1553 - val_loss: 0.1551\n", "Epoch 125/500\n", "45/45 [==============================] - 1s 17ms/step - loss: 0.1552 - val_loss: 0.1550\n", "Epoch 126/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1550 - val_loss: 0.1549\n", "Epoch 127/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1548 - val_loss: 0.1548\n", "Epoch 128/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1547 - val_loss: 0.1547\n", "Epoch 129/500\n", "45/45 [==============================] - 1s 16ms/step - loss: 0.1545 - val_loss: 0.1545\n", "Epoch 130/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1544 - val_loss: 0.1544\n", "Epoch 131/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1542 - val_loss: 0.1543\n", "Epoch 132/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1541 - val_loss: 0.1542\n", "Epoch 133/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1540 - val_loss: 0.1541\n", "Epoch 134/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1538 - val_loss: 0.1540\n", "Epoch 135/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1537 - val_loss: 0.1538\n", "Epoch 136/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1536 - val_loss: 0.1537\n", "Epoch 137/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1534 - val_loss: 0.1536\n", "Epoch 138/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1533 - val_loss: 0.1535\n", "Epoch 139/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1532 - val_loss: 0.1534\n", "Epoch 140/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1531 - val_loss: 0.1533\n", "Epoch 141/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1529 - val_loss: 0.1532\n", "Epoch 142/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1528 - val_loss: 0.1531\n", "Epoch 143/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1527 - val_loss: 0.1530\n", "Epoch 144/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1526 - val_loss: 0.1529\n", "Epoch 145/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1525 - val_loss: 0.1528\n", "Epoch 146/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1524 - val_loss: 0.1527\n", "Epoch 147/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1523 - val_loss: 0.1526\n", "Epoch 148/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1521 - val_loss: 0.1525\n", "Epoch 149/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1520 - val_loss: 0.1524\n", "Epoch 150/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1519 - val_loss: 0.1524\n", "Epoch 151/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1519 - val_loss: 0.1523\n", "Epoch 152/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1517 - val_loss: 0.1522\n", "Epoch 153/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1516 - val_loss: 0.1521\n", "Epoch 154/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1515 - val_loss: 0.1520\n", "Epoch 155/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1514 - val_loss: 0.1519\n", "Epoch 156/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1513 - val_loss: 0.1518\n", "Epoch 157/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1512 - val_loss: 0.1518\n", "Epoch 158/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1511 - val_loss: 0.1517\n", "Epoch 159/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1510 - val_loss: 0.1516\n", "Epoch 160/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1510 - val_loss: 0.1515\n", "Epoch 161/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1509 - val_loss: 0.1514\n", "Epoch 162/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1508 - val_loss: 0.1514\n", "Epoch 163/500\n", "45/45 [==============================] - 1s 15ms/step - loss: 0.1507 - val_loss: 0.1513\n", "Epoch 164/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1506 - val_loss: 0.1512\n", "Epoch 165/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1505 - val_loss: 0.1511\n", "Epoch 166/500\n", "45/45 [==============================] - 1s 14ms/step - loss: 0.1504 - val_loss: 0.1511\n", "Epoch 167/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1503 - val_loss: 0.1510\n", "Epoch 168/500\n", "45/45 [==============================] - 1s 17ms/step - loss: 0.1502 - val_loss: 0.1509\n", "Epoch 169/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1502 - val_loss: 0.1509\n", "Epoch 170/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1501 - val_loss: 0.1508\n", "Epoch 171/500\n", "45/45 [==============================] - 1s 14ms/step - loss: 0.1500 - val_loss: 0.1507\n", "Epoch 172/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1499 - val_loss: 0.1507\n", "Epoch 173/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1498 - val_loss: 0.1506\n", "Epoch 174/500\n", "45/45 [==============================] - 1s 25ms/step - loss: 0.1498 - val_loss: 0.1505\n", "Epoch 175/500\n", "45/45 [==============================] - 1s 17ms/step - loss: 0.1497 - val_loss: 0.1504\n", "Epoch 176/500\n", "45/45 [==============================] - 1s 14ms/step - loss: 0.1496 - val_loss: 0.1504\n", "Epoch 177/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1495 - val_loss: 0.1503\n", "Epoch 178/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1494 - val_loss: 0.1503\n", "Epoch 179/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1494 - val_loss: 0.1502\n", "Epoch 180/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1493 - val_loss: 0.1501\n", "Epoch 181/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1492 - val_loss: 0.1501\n", "Epoch 182/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1491 - val_loss: 0.1500\n", "Epoch 183/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1491 - val_loss: 0.1500\n", "Epoch 184/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1490 - val_loss: 0.1499\n", "Epoch 185/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1489 - val_loss: 0.1498\n", "Epoch 186/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1489 - val_loss: 0.1497\n", "Epoch 187/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1488 - val_loss: 0.1497\n", "Epoch 188/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1487 - val_loss: 0.1496\n", "Epoch 189/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1486 - val_loss: 0.1496\n", "Epoch 190/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1486 - val_loss: 0.1495\n", "Epoch 191/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1485 - val_loss: 0.1494\n", "Epoch 192/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1484 - val_loss: 0.1494\n", "Epoch 193/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1484 - val_loss: 0.1493\n", "Epoch 194/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1483 - val_loss: 0.1493\n", "Epoch 195/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1483 - val_loss: 0.1492\n", "Epoch 196/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1482 - val_loss: 0.1492\n", "Epoch 197/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1481 - val_loss: 0.1491\n", "Epoch 198/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1480 - val_loss: 0.1491\n", "Epoch 199/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1480 - val_loss: 0.1490\n", "Epoch 200/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1479 - val_loss: 0.1490\n", "Epoch 201/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1479 - val_loss: 0.1489\n", "Epoch 202/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1478 - val_loss: 0.1489\n", "Epoch 203/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1477 - val_loss: 0.1488\n", "Epoch 204/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1477 - val_loss: 0.1488\n", "Epoch 205/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1476 - val_loss: 0.1487\n", "Epoch 206/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1476 - val_loss: 0.1487\n", "Epoch 207/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1475 - val_loss: 0.1486\n", "Epoch 208/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1475 - val_loss: 0.1486\n", "Epoch 209/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1474 - val_loss: 0.1485\n", "Epoch 210/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1473 - val_loss: 0.1485\n", "Epoch 211/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1473 - val_loss: 0.1484\n", "Epoch 212/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1472 - val_loss: 0.1484\n", "Epoch 213/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1472 - val_loss: 0.1483\n", "Epoch 214/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1471 - val_loss: 0.1483\n", "Epoch 215/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1470 - val_loss: 0.1483\n", "Epoch 216/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1470 - val_loss: 0.1482\n", "Epoch 217/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1469 - val_loss: 0.1482\n", "Epoch 218/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1469 - val_loss: 0.1481\n", "Epoch 219/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1469 - val_loss: 0.1481\n", "Epoch 220/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1468 - val_loss: 0.1480\n", "Epoch 221/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1467 - val_loss: 0.1480\n", "Epoch 222/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1467 - val_loss: 0.1480\n", "Epoch 223/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1466 - val_loss: 0.1479\n", "Epoch 224/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1466 - val_loss: 0.1479\n", "Epoch 225/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1465 - val_loss: 0.1479\n", "Epoch 226/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1465 - val_loss: 0.1478\n", "Epoch 227/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1464 - val_loss: 0.1478\n", "Epoch 228/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1464 - val_loss: 0.1477\n", "Epoch 229/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1463 - val_loss: 0.1477\n", "Epoch 230/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1463 - val_loss: 0.1476\n", "Epoch 231/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1462 - val_loss: 0.1476\n", "Epoch 232/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1462 - val_loss: 0.1476\n", "Epoch 233/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1461 - val_loss: 0.1475\n", "Epoch 234/500\n", "45/45 [==============================] - 1s 16ms/step - loss: 0.1461 - val_loss: 0.1475\n", "Epoch 235/500\n", "45/45 [==============================] - 1s 16ms/step - loss: 0.1460 - val_loss: 0.1475\n", "Epoch 236/500\n", "45/45 [==============================] - 1s 19ms/step - loss: 0.1460 - val_loss: 0.1474\n", "Epoch 237/500\n", "45/45 [==============================] - 1s 20ms/step - loss: 0.1459 - val_loss: 0.1474\n", "Epoch 238/500\n", "45/45 [==============================] - 1s 15ms/step - loss: 0.1459 - val_loss: 0.1474\n", "Epoch 239/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1458 - val_loss: 0.1473\n", "Epoch 240/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1458 - val_loss: 0.1473\n", "Epoch 241/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1458 - val_loss: 0.1473\n", "Epoch 242/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1457 - val_loss: 0.1472\n", "Epoch 243/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1457 - val_loss: 0.1472\n", "Epoch 244/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1456 - val_loss: 0.1472\n", "Epoch 245/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1456 - val_loss: 0.1471\n", "Epoch 246/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1455 - val_loss: 0.1471\n", "Epoch 247/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1455 - val_loss: 0.1470\n", "Epoch 248/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1454 - val_loss: 0.1470\n", "Epoch 249/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1454 - val_loss: 0.1470\n", "Epoch 250/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1454 - val_loss: 0.1470\n", "Epoch 251/500\n", "45/45 [==============================] - 1s 16ms/step - loss: 0.1453 - val_loss: 0.1469\n", "Epoch 252/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1453 - val_loss: 0.1469\n", "Epoch 253/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1452 - val_loss: 0.1469\n", "Epoch 254/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1452 - val_loss: 0.1468\n", "Epoch 255/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1452 - val_loss: 0.1468\n", "Epoch 256/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1451 - val_loss: 0.1468\n", "Epoch 257/500\n", "45/45 [==============================] - 1s 15ms/step - loss: 0.1451 - val_loss: 0.1467\n", "Epoch 258/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1450 - val_loss: 0.1467\n", "Epoch 259/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1450 - val_loss: 0.1467\n", "Epoch 260/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1449 - val_loss: 0.1466\n", "Epoch 261/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1449 - val_loss: 0.1466\n", "Epoch 262/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1449 - val_loss: 0.1466\n", "Epoch 263/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1448 - val_loss: 0.1466\n", "Epoch 264/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1448 - val_loss: 0.1466\n", "Epoch 265/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1447 - val_loss: 0.1465\n", "Epoch 266/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1447 - val_loss: 0.1465\n", "Epoch 267/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1447 - val_loss: 0.1465\n", "Epoch 268/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1446 - val_loss: 0.1464\n", "Epoch 269/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1446 - val_loss: 0.1464\n", "Epoch 270/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1446 - val_loss: 0.1464\n", "Epoch 271/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1445 - val_loss: 0.1463\n", "Epoch 272/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1445 - val_loss: 0.1463\n", "Epoch 273/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1444 - val_loss: 0.1463\n", "Epoch 274/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1444 - val_loss: 0.1463\n", "Epoch 275/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1444 - val_loss: 0.1462\n", "Epoch 276/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1443 - val_loss: 0.1462\n", "Epoch 277/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1443 - val_loss: 0.1462\n", "Epoch 278/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1443 - val_loss: 0.1461\n", "Epoch 279/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1442 - val_loss: 0.1461\n", "Epoch 280/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1442 - val_loss: 0.1461\n", "Epoch 281/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1442 - val_loss: 0.1461\n", "Epoch 282/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1441 - val_loss: 0.1460\n", "Epoch 283/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1441 - val_loss: 0.1460\n", "Epoch 284/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1441 - val_loss: 0.1460\n", "Epoch 285/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1440 - val_loss: 0.1460\n", "Epoch 286/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1440 - val_loss: 0.1460\n", "Epoch 287/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1440 - val_loss: 0.1459\n", "Epoch 288/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1439 - val_loss: 0.1459\n", "Epoch 289/500\n", "45/45 [==============================] - 1s 15ms/step - loss: 0.1439 - val_loss: 0.1459\n", "Epoch 290/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1439 - val_loss: 0.1458\n", "Epoch 291/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1438 - val_loss: 0.1458\n", "Epoch 292/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1438 - val_loss: 0.1458\n", "Epoch 293/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1438 - val_loss: 0.1458\n", "Epoch 294/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1438 - val_loss: 0.1458\n", "Epoch 295/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1437 - val_loss: 0.1457\n", "Epoch 296/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1437 - val_loss: 0.1457\n", "Epoch 297/500\n", "45/45 [==============================] - 1s 15ms/step - loss: 0.1436 - val_loss: 0.1457\n", "Epoch 298/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1436 - val_loss: 0.1457\n", "Epoch 299/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1436 - val_loss: 0.1456\n", "Epoch 300/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1435 - val_loss: 0.1456\n", "Epoch 301/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1435 - val_loss: 0.1456\n", "Epoch 302/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1435 - val_loss: 0.1456\n", "Epoch 303/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1434 - val_loss: 0.1455\n", "Epoch 304/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1434 - val_loss: 0.1455\n", "Epoch 305/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1434 - val_loss: 0.1455\n", "Epoch 306/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1433 - val_loss: 0.1455\n", "Epoch 307/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1433 - val_loss: 0.1455\n", "Epoch 308/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1433 - val_loss: 0.1455\n", "Epoch 309/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1432 - val_loss: 0.1454\n", "Epoch 310/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1432 - val_loss: 0.1454\n", "Epoch 311/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1432 - val_loss: 0.1454\n", "Epoch 312/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1431 - val_loss: 0.1454\n", "Epoch 313/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1431 - val_loss: 0.1453\n", "Epoch 314/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1431 - val_loss: 0.1453\n", "Epoch 315/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1431 - val_loss: 0.1453\n", "Epoch 316/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1430 - val_loss: 0.1453\n", "Epoch 317/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1430 - val_loss: 0.1453\n", "Epoch 318/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1430 - val_loss: 0.1452\n", "Epoch 319/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1429 - val_loss: 0.1452\n", "Epoch 320/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1429 - val_loss: 0.1452\n", "Epoch 321/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1429 - val_loss: 0.1452\n", "Epoch 322/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1428 - val_loss: 0.1452\n", "Epoch 323/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1428 - val_loss: 0.1451\n", "Epoch 324/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1428 - val_loss: 0.1451\n", "Epoch 325/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1427 - val_loss: 0.1451\n", "Epoch 326/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1427 - val_loss: 0.1451\n", "Epoch 327/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1427 - val_loss: 0.1451\n", "Epoch 328/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1427 - val_loss: 0.1450\n", "Epoch 329/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1426 - val_loss: 0.1450\n", "Epoch 330/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1426 - val_loss: 0.1450\n", "Epoch 331/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1426 - val_loss: 0.1450\n", "Epoch 332/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1425 - val_loss: 0.1450\n", "Epoch 333/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1425 - val_loss: 0.1450\n", "Epoch 334/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1425 - val_loss: 0.1449\n", "Epoch 335/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1424 - val_loss: 0.1449\n", "Epoch 336/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1424 - val_loss: 0.1449\n", "Epoch 337/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1424 - val_loss: 0.1449\n", "Epoch 338/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1423 - val_loss: 0.1449\n", "Epoch 339/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1423 - val_loss: 0.1449\n", "Epoch 340/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1423 - val_loss: 0.1448\n", "Epoch 341/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1423 - val_loss: 0.1448\n", "Epoch 342/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1422 - val_loss: 0.1448\n", "Epoch 343/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1422 - val_loss: 0.1448\n", "Epoch 344/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1422 - val_loss: 0.1448\n", "Epoch 345/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1422 - val_loss: 0.1448\n", "Epoch 346/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1421 - val_loss: 0.1448\n", "Epoch 347/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1421 - val_loss: 0.1447\n", "Epoch 348/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1421 - val_loss: 0.1447\n", "Epoch 349/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1420 - val_loss: 0.1447\n", "Epoch 350/500\n", "45/45 [==============================] - 1s 14ms/step - loss: 0.1420 - val_loss: 0.1447\n", "Epoch 351/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1420 - val_loss: 0.1447\n", "Epoch 352/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1419 - val_loss: 0.1447\n", "Epoch 353/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1419 - val_loss: 0.1447\n", "Epoch 354/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1419 - val_loss: 0.1446\n", "Epoch 355/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1419 - val_loss: 0.1446\n", "Epoch 356/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1418 - val_loss: 0.1446\n", "Epoch 357/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1418 - val_loss: 0.1446\n", "Epoch 358/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1418 - val_loss: 0.1446\n", "Epoch 359/500\n", "45/45 [==============================] - 1s 17ms/step - loss: 0.1417 - val_loss: 0.1445\n", "Epoch 360/500\n", "45/45 [==============================] - 1s 16ms/step - loss: 0.1417 - val_loss: 0.1446\n", "Epoch 361/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1417 - val_loss: 0.1445\n", "Epoch 362/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1417 - val_loss: 0.1445\n", "Epoch 363/500\n", "45/45 [==============================] - 1s 16ms/step - loss: 0.1416 - val_loss: 0.1445\n", "Epoch 364/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1416 - val_loss: 0.1445\n", "Epoch 365/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1416 - val_loss: 0.1445\n", "Epoch 366/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1416 - val_loss: 0.1445\n", "Epoch 367/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1415 - val_loss: 0.1444\n", "Epoch 368/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1415 - val_loss: 0.1444\n", "Epoch 369/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1415 - val_loss: 0.1444\n", "Epoch 370/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1415 - val_loss: 0.1444\n", "Epoch 371/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1414 - val_loss: 0.1444\n", "Epoch 372/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1414 - val_loss: 0.1444\n", "Epoch 373/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1414 - val_loss: 0.1444\n", "Epoch 374/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1413 - val_loss: 0.1444\n", "Epoch 375/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1413 - val_loss: 0.1444\n", "Epoch 376/500\n", "45/45 [==============================] - 0s 6ms/step - loss: 0.1413 - val_loss: 0.1444\n", "Epoch 377/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1413 - val_loss: 0.1444\n", "Epoch 378/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1412 - val_loss: 0.1443\n", "Epoch 379/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1412 - val_loss: 0.1443\n", "Epoch 380/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1412 - val_loss: 0.1443\n", "Epoch 381/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1412 - val_loss: 0.1443\n", "Epoch 382/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1412 - val_loss: 0.1443\n", "Epoch 383/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1411 - val_loss: 0.1443\n", "Epoch 384/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1411 - val_loss: 0.1443\n", "Epoch 385/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1411 - val_loss: 0.1442\n", "Epoch 386/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1410 - val_loss: 0.1442\n", "Epoch 387/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1410 - val_loss: 0.1442\n", "Epoch 388/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1410 - val_loss: 0.1442\n", "Epoch 389/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1410 - val_loss: 0.1442\n", "Epoch 390/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1410 - val_loss: 0.1442\n", "Epoch 391/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1409 - val_loss: 0.1442\n", "Epoch 392/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1409 - val_loss: 0.1442\n", "Epoch 393/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1409 - val_loss: 0.1442\n", "Epoch 394/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1409 - val_loss: 0.1442\n", "Epoch 395/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1408 - val_loss: 0.1441\n", "Epoch 396/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1409 - val_loss: 0.1441\n", "Epoch 397/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1408 - val_loss: 0.1441\n", "Epoch 398/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1408 - val_loss: 0.1441\n", "Epoch 399/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1408 - val_loss: 0.1441\n", "Epoch 400/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1407 - val_loss: 0.1441\n", "Epoch 401/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1407 - val_loss: 0.1441\n", "Epoch 402/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1407 - val_loss: 0.1440\n", "Epoch 403/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1406 - val_loss: 0.1440\n", "Epoch 404/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1406 - val_loss: 0.1440\n", "Epoch 405/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1406 - val_loss: 0.1440\n", "Epoch 406/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1406 - val_loss: 0.1440\n", "Epoch 407/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1405 - val_loss: 0.1440\n", "Epoch 408/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1405 - val_loss: 0.1440\n", "Epoch 409/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1405 - val_loss: 0.1440\n", "Epoch 410/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1405 - val_loss: 0.1440\n", "Epoch 411/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1404 - val_loss: 0.1440\n", "Epoch 412/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1404 - val_loss: 0.1440\n", "Epoch 413/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1404 - val_loss: 0.1439\n", "Epoch 414/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1404 - val_loss: 0.1439\n", "Epoch 415/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1404 - val_loss: 0.1439\n", "Epoch 416/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1404 - val_loss: 0.1439\n", "Epoch 417/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1403 - val_loss: 0.1439\n", "Epoch 418/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1403 - val_loss: 0.1439\n", "Epoch 419/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1403 - val_loss: 0.1439\n", "Epoch 420/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1402 - val_loss: 0.1439\n", "Epoch 421/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1402 - val_loss: 0.1439\n", "Epoch 422/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1402 - val_loss: 0.1438\n", "Epoch 423/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1402 - val_loss: 0.1438\n", "Epoch 424/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1402 - val_loss: 0.1438\n", "Epoch 425/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1402 - val_loss: 0.1438\n", "Epoch 426/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1401 - val_loss: 0.1438\n", "Epoch 427/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1401 - val_loss: 0.1438\n", "Epoch 428/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1401 - val_loss: 0.1438\n", "Epoch 429/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1400 - val_loss: 0.1438\n", "Epoch 430/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1400 - val_loss: 0.1438\n", "Epoch 431/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1400 - val_loss: 0.1438\n", "Epoch 432/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1400 - val_loss: 0.1438\n", "Epoch 433/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1400 - val_loss: 0.1438\n", "Epoch 434/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1399 - val_loss: 0.1438\n", "Epoch 435/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1399 - val_loss: 0.1438\n", "Epoch 436/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1399 - val_loss: 0.1437\n", "Epoch 437/500\n", "45/45 [==============================] - 1s 14ms/step - loss: 0.1399 - val_loss: 0.1437\n", "Epoch 438/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1399 - val_loss: 0.1437\n", "Epoch 439/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1398 - val_loss: 0.1437\n", "Epoch 440/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1398 - val_loss: 0.1437\n", "Epoch 441/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1398 - val_loss: 0.1437\n", "Epoch 442/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1398 - val_loss: 0.1437\n", "Epoch 443/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1397 - val_loss: 0.1437\n", "Epoch 444/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1397 - val_loss: 0.1437\n", "Epoch 445/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1397 - val_loss: 0.1437\n", "Epoch 446/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1397 - val_loss: 0.1436\n", "Epoch 447/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1397 - val_loss: 0.1437\n", "Epoch 448/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1397 - val_loss: 0.1437\n", "Epoch 449/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1396 - val_loss: 0.1436\n", "Epoch 450/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1396 - val_loss: 0.1436\n", "Epoch 451/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1396 - val_loss: 0.1436\n", "Epoch 452/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1396 - val_loss: 0.1436\n", "Epoch 453/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1395 - val_loss: 0.1436\n", "Epoch 454/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1395 - val_loss: 0.1436\n", "Epoch 455/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1395 - val_loss: 0.1436\n", "Epoch 456/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1395 - val_loss: 0.1436\n", "Epoch 457/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1395 - val_loss: 0.1436\n", "Epoch 458/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1394 - val_loss: 0.1436\n", "Epoch 459/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1394 - val_loss: 0.1436\n", "Epoch 460/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1394 - val_loss: 0.1436\n", "Epoch 461/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1394 - val_loss: 0.1435\n", "Epoch 462/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1394 - val_loss: 0.1435\n", "Epoch 463/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1393 - val_loss: 0.1435\n", "Epoch 464/500\n", "45/45 [==============================] - 1s 15ms/step - loss: 0.1393 - val_loss: 0.1435\n", "Epoch 465/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1393 - val_loss: 0.1435\n", "Epoch 466/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1393 - val_loss: 0.1435\n", "Epoch 467/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1393 - val_loss: 0.1435\n", "Epoch 468/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1393 - val_loss: 0.1435\n", "Epoch 469/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1393 - val_loss: 0.1435\n", "Epoch 470/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1392 - val_loss: 0.1435\n", "Epoch 471/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1392 - val_loss: 0.1435\n", "Epoch 472/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1392 - val_loss: 0.1435\n", "Epoch 473/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1392 - val_loss: 0.1435\n", "Epoch 474/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1391 - val_loss: 0.1435\n", "Epoch 475/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1391 - val_loss: 0.1435\n", "Epoch 476/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1391 - val_loss: 0.1434\n", "Epoch 477/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1391 - val_loss: 0.1434\n", "Epoch 478/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1391 - val_loss: 0.1434\n", "Epoch 479/500\n", "45/45 [==============================] - 1s 14ms/step - loss: 0.1390 - val_loss: 0.1434\n", "Epoch 480/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1390 - val_loss: 0.1434\n", "Epoch 481/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1390 - val_loss: 0.1434\n", "Epoch 482/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1390 - val_loss: 0.1434\n", "Epoch 483/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1390 - val_loss: 0.1434\n", "Epoch 484/500\n", "45/45 [==============================] - 0s 8ms/step - loss: 0.1390 - val_loss: 0.1434\n", "Epoch 485/500\n", "45/45 [==============================] - 0s 11ms/step - loss: 0.1389 - val_loss: 0.1434\n", "Epoch 486/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1389 - val_loss: 0.1434\n", "Epoch 487/500\n", "45/45 [==============================] - 0s 7ms/step - loss: 0.1389 - val_loss: 0.1434\n", "Epoch 488/500\n", "45/45 [==============================] - 1s 11ms/step - loss: 0.1389 - val_loss: 0.1434\n", "Epoch 489/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1389 - val_loss: 0.1434\n", "Epoch 490/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1388 - val_loss: 0.1433\n", "Epoch 491/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1389 - val_loss: 0.1433\n", "Epoch 492/500\n", "45/45 [==============================] - 1s 13ms/step - loss: 0.1388 - val_loss: 0.1433\n", "Epoch 493/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1388 - val_loss: 0.1433\n", "Epoch 494/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1388 - val_loss: 0.1433\n", "Epoch 495/500\n", "45/45 [==============================] - 1s 15ms/step - loss: 0.1388 - val_loss: 0.1433\n", "Epoch 496/500\n", "45/45 [==============================] - 0s 9ms/step - loss: 0.1387 - val_loss: 0.1433\n", "Epoch 497/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1387 - val_loss: 0.1433\n", "Epoch 498/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1387 - val_loss: 0.1433\n", "Epoch 499/500\n", "45/45 [==============================] - 1s 12ms/step - loss: 0.1387 - val_loss: 0.1433\n", "Epoch 500/500\n", "45/45 [==============================] - 0s 10ms/step - loss: 0.1387 - val_loss: 0.1433\n" ] }, { "data": { "image/png": "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MX4C0CTccz+C61X02ARlovMV6PQBqDaQS1a4dX85mU3H5c/PY/6P6zJdjZRs07cLfz9s27Ssa9SoUYwaNYrp06dTXl7O9ddfz+DBgxOWffHFF9l///2ZNm0aRUVFG81/9NFHOfTQQxvk3QuHw1x++eVcddVVnHfeebz88ssp1e/+++/nlFNO4fbbbyc722UcW7BgAbvuuivPP/887777LnvuuWdK62zKSy+9xJQpUygoKOCll15ir7322jDvuuuu4y9/+QvHH388X331FT179gTgnnvuYenSpfzxj3/kzjvvbJChoLq6mlmzZjV4fe2111JYWMhHH320UVD++uuv09bHTyr8bPEK6h88Nc0QDuaTXWNnQMakKisri7vuuith8AH47W9/u9G0UCjElVdeyf3338///vc/1q9f3+jyiQwYMIB//vOfG4IPwPDhwxk/fjx33nknr7/+etoD0A033ADAeeed1yD4AFx00UU89dRTzJo1i3vuuYdLL70UgGXLlgFw4IEHbpQeJycnp8F61q1bR2VlJTvssEPCM8Itt9wyrfvTXH4yIUxqhXp0aHWhPHIiVUQiSiBg+cE6u3SdSXQGI0aMaPTsKOqrr77ilVdeYeHChZSVlW1IlBkOh4lEIixcuJCddtqp2dvcZ599yMvL22j6sGHDAHffJZ3C4TDvvvsu4O5PJXLSSScxa9Yspk+fviEA7brrrtxxxx1cfPHFAOy3334UFCS+Ld+jRw8GDx7MJ598wgUXXMCpp566YX8yyU+X3HOAb1X1qFaoT4dUF8onX8qoCtdt6CHVGNO0QYMGNTovHA5z5plncu+996La+EWZdetSu9w5cODAhNO7dOkCkPaGCCtXrqS6uppAINDo/kbvzSxZUt8N2/jx4/nf//7Ho48+ypFHHkkwGGS77bZjr7324thjj2WPPfZosI6HHnqIcePGceONN3LjjTfSo0cPdtttNw444AB+//vfU1xcnNb9ag4/reCG4brJNs0UyconnyrrE8iYFCU6E4m65ZZbuOeee+jTpw+PPfYY33//PVVVVagqqsruu+8OkDQ4JdLW3WjE1q+xTNOJ9iEQCPDII4/w2WefMXnyZA466CC+//57br31Vvbcc0/+8Ic/NCg/evRoSktLefzxxznjjDPo27cvL7zwwoZWdB9//HF6d6wZ/PYHVNhkKbOBZhWQ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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:AutoGraph could not transform .predict_function at 0x104345680> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: 'arguments' object has no attribute 'posonlyargs'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "WARNING: AutoGraph could not transform .predict_function at 0x104345680> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: 'arguments' object has no attribute 'posonlyargs'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "Loading parameters from tmp_checkpoints01042022182345/best_weights\n", "Saving parameters to visual_bars_cf/experiment0000/trained_blocks/CondDensityEstimator\n", "CondDensityEstimator training complete.\n", "Beginning CauseClusterer training...\n", "Initialization complete\n", "Iteration 0, inertia 31.74104881286621\n", "Iteration 1, inertia 27.955549240112305\n", "Iteration 2, inertia 27.403724670410156\n", "Iteration 3, inertia 27.310035705566406\n", "Converged at iteration 3: center shift 8.516711204720195e-06 within tolerance 1.0708475112915039e-05.\n", "Initialization complete\n", "Iteration 0, inertia 41.764991760253906\n", "Iteration 1, inertia 32.048770904541016\n", "Iteration 2, inertia 28.2745304107666\n", "Iteration 3, inertia 27.50068473815918\n", "Iteration 4, inertia 27.336685180664062\n", "Iteration 5, inertia 27.298301696777344\n", "Converged at iteration 5: center shift 5.856688403582666e-06 within tolerance 1.0708475112915039e-05.\n", "Initialization complete\n", "Iteration 0, inertia 35.83229446411133\n", "Iteration 1, inertia 28.004274368286133\n", "Iteration 2, inertia 27.4078369140625\n", "Iteration 3, inertia 27.310283660888672\n", "Iteration 4, inertia 27.290353775024414\n", "Converged at iteration 4: center shift 1.4517515865009045e-06 within tolerance 1.0708475112915039e-05.\n", "Initialization complete\n", "Iteration 0, inertia 36.079872131347656\n", "Iteration 1, inertia 30.432510375976562\n", "Iteration 2, inertia 28.223527908325195\n", "Iteration 3, inertia 27.537763595581055\n", "Iteration 4, inertia 27.348379135131836\n", "Iteration 5, inertia 27.300628662109375\n", "Converged at iteration 5: center shift 7.0389687607530504e-06 within tolerance 1.0708475112915039e-05.\n", "Initialization complete\n", "Iteration 0, inertia 39.56998062133789\n", "Iteration 1, inertia 28.852554321289062\n", "Iteration 2, inertia 27.617097854614258\n", "Iteration 3, inertia 27.33992576599121\n", "Iteration 4, inertia 27.298669815063477\n", "Converged at iteration 4: center shift 5.457996849145275e-06 within tolerance 1.0708475112915039e-05.\n", "Initialization complete\n", "Iteration 0, inertia 38.25403594970703\n", "Iteration 1, inertia 28.615015029907227\n", "Iteration 2, inertia 27.388574600219727\n", "Iteration 3, inertia 27.298891067504883\n", "Converged at iteration 3: center shift 7.256875505845528e-06 within tolerance 1.0708475112915039e-05.\n", "Initialization complete\n", "Iteration 0, inertia 40.471160888671875\n", "Iteration 1, inertia 28.677902221679688\n", "Iteration 2, inertia 27.489965438842773\n", "Iteration 3, inertia 27.325923919677734\n", "Iteration 4, inertia 27.29704475402832\n", "Converged at iteration 4: center shift 3.1758779641677393e-06 within tolerance 1.0708475112915039e-05.\n", "Initialization complete\n", "Iteration 0, inertia 46.321685791015625\n", "Iteration 1, inertia 31.743112564086914\n", "Iteration 2, inertia 28.905921936035156\n", "Iteration 3, inertia 27.809476852416992\n", "Iteration 4, inertia 27.40079689025879\n", "Iteration 5, inertia 27.319799423217773\n", "Iteration 6, inertia 27.29273223876953\n", "Converged at iteration 6: center shift 2.4717703581700334e-06 within tolerance 1.0708475112915039e-05.\n", "Initialization complete\n", "Iteration 0, inertia 39.955589294433594\n", "Iteration 1, inertia 29.287607192993164\n", "Iteration 2, inertia 27.550859451293945\n", "Iteration 3, inertia 27.320213317871094\n", "Iteration 4, inertia 27.293081283569336\n", "Converged at iteration 4: center shift 3.2116554393724073e-06 within tolerance 1.0708475112915039e-05.\n", "Initialization complete\n", "Iteration 0, inertia 30.616464614868164\n", "Iteration 1, inertia 27.48357582092285\n", "Iteration 2, inertia 27.311649322509766\n", "Iteration 3, inertia 27.28844451904297\n", "Converged at iteration 3: center shift 9.807829428609693e-07 within tolerance 1.0708475112915039e-05.\n", "CauseClusterer training complete.\n", "Experiment training complete.\n" ] } ], "source": [ "train_results = my_exp.train()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calling `train()` on the CFL `Experiment` results in a dictionary of dictionaries. The keys of the first dictionary correspond to the `Blocks` in the CFL pipeline. In this case (and in all cases at the moment), they are `CDE` and `Clusterer`. The keys of the inner dictionaries are the results returned by each `Block`. Below, we access the cause macrostate labels: " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 3 1 1 3 3 0 2 1 0 1 1 3 0 3 1 2 1 2 3]\n" ] } ], "source": [ "# Below, we print the first few `x_lbls`. \n", "# We can see that there are 4 classes in the data, and \n", "# that they are represented by the numbers `0` through `3`. Each of these labels tells us the \n", "# macrovariable to which the corresponding visual bars image was assigned. \n", "\n", "cause_cluster_results = train_results['CauseClusterer']\n", "print(cause_cluster_results['x_lbls'][:20])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Optional: Predicting on a New Dataset\n", "\n", "To predict on different data using the same, already trained CFL pipeline, we just create a second data set, and call the predict method on that new dataset." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Beginning Experiment prediction.\n", "Beginning CondDensityEstimator prediction...\n", "CondDensityEstimator prediction complete.\n", "Beginning CauseClusterer prediction...\n", "Initialization complete\n", "Iteration 0, inertia 0.9525160789489746\n", "Iteration 1, inertia 0.69085294008255\n", "Iteration 2, inertia 0.6027211546897888\n", "Iteration 3, inertia 0.5640036463737488\n", "Iteration 4, inertia 0.5532782077789307\n", "Iteration 5, inertia 0.5506182312965393\n", "Iteration 6, inertia 0.5469791889190674\n", "Iteration 7, inertia 0.5403821468353271\n", "Iteration 8, inertia 0.5382898449897766\n", "Iteration 9, inertia 0.5369626879692078\n", "Converged at iteration 9: strict convergence.\n", "Initialization complete\n", "Iteration 0, inertia 1.0982351303100586\n", "Iteration 1, inertia 0.5481781363487244\n", "Iteration 2, inertia 0.5420354604721069\n", "Converged at iteration 2: strict convergence.\n", "Initialization complete\n", "Iteration 0, inertia 0.5787597894668579\n", "Iteration 1, inertia 0.5436096787452698\n", "Iteration 2, inertia 0.5417847633361816\n", "Converged at iteration 2: strict convergence.\n", "Initialization complete\n", "Iteration 0, inertia 0.6528603434562683\n", "Iteration 1, inertia 0.5439485907554626\n", "Iteration 2, inertia 0.5420354604721069\n", "Converged at iteration 2: strict convergence.\n", "Initialization complete\n", "Iteration 0, inertia 0.7406123876571655\n", "Iteration 1, inertia 0.5712636113166809\n", "Iteration 2, inertia 0.5498159527778625\n", "Iteration 3, inertia 0.5469791889190674\n", "Iteration 4, inertia 0.5403821468353271\n", "Iteration 5, inertia 0.5382898449897766\n", "Iteration 6, inertia 0.5369626879692078\n", "Converged at iteration 6: strict convergence.\n", "Initialization complete\n", "Iteration 0, inertia 0.6956158876419067\n", "Iteration 1, inertia 0.5762235522270203\n", "Iteration 2, inertia 0.5420354604721069\n", "Converged at iteration 2: strict convergence.\n", "Initialization complete\n", "Iteration 0, inertia 0.9158010482788086\n", "Iteration 1, inertia 0.5723662376403809\n", "Iteration 2, inertia 0.5420354604721069\n", "Converged at iteration 2: strict convergence.\n", "Initialization complete\n", "Iteration 0, inertia 0.6088575124740601\n", "Iteration 1, inertia 0.5423613786697388\n", "Converged at iteration 1: strict convergence.\n", "Initialization complete\n", "Iteration 0, inertia 0.9155406951904297\n", "Iteration 1, inertia 0.6416553258895874\n", "Iteration 2, inertia 0.5822334885597229\n", "Iteration 3, inertia 0.5619029402732849\n", "Iteration 4, inertia 0.5532782077789307\n", "Iteration 5, inertia 0.5506182312965393\n", "Iteration 6, inertia 0.5469791889190674\n", "Iteration 7, inertia 0.5403821468353271\n", "Iteration 8, inertia 0.5382898449897766\n", "Iteration 9, inertia 0.5369626879692078\n", "Converged at iteration 9: strict convergence.\n", "Initialization complete\n", "Iteration 0, inertia 0.5804789662361145\n", "Iteration 1, inertia 0.5425180196762085\n", "Iteration 2, inertia 0.5389862656593323\n", "Iteration 3, inertia 0.5369626879692078\n", "Converged at iteration 3: strict convergence.\n", "CauseClusterer prediction complete.\n", "Prediction complete.\n" ] } ], "source": [ "n_samples = 100\n", "im_shape = (10, 10)\n", "noise_lvl= 0.03\n", "random_state = 180 \n", "\n", "# make second dataset for prediction\n", "vb_data = vbd.VisualBarsData(n_samples=n_samples, im_shape = im_shape, \n", " noise_lvl=noise_lvl, set_random_seed=random_state)\n", "\n", "# retrieve the images and the target \n", "X_new = vb_data.getImages()\n", "Y_new = vb_data.getTarget()\n", "\n", "#reformat x, y into the right shape for the neural net \n", "X_new_CNN = np.expand_dims(X_new, -1) \n", "Y_new_CNN = np.expand_dims(Y_new, -1)\n", "\n", "# put X, Y into a new Dataset object\n", "# and register the new dataset with the Experiment\n", "my_exp.add_dataset(X=X_new_CNN, Y=Y_new_CNN, dataset_name='predict_data') \n", "\n", "# predict! \n", "results_new = my_exp.predict('predict_data')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2, 0, 0, 2, 2, 3, 3, 1, 2, 1, 2, 3, 2, 2, 0, 2, 1, 0, 1, 0],\n", " dtype=int32)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# take a look at some of the results for the new data set \n", "cluster_results_new = results_new['CauseClusterer']\n", "cluster_results_new['x_lbls'][:20]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. Visualize Results \n", "\n", "We can view some images with their predicted label using the `viewImagesandLabels()` function. " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import visual_bars.visual_bars_vis as vis\n", "\n", "vis.viewImagesAndLabels(X_new, im_shape=im_shape, n_examples=10, x_lbls=cluster_results_new['x_lbls'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, CFL has done a pretty good job of recovering the observational partitions (with some errors). For the most part, the images with a horizontal bar, a vertical bar, both, or neither, have been separated into distinct classes. Try this experiment again with a different CDE or a different sample size, and see how your results differ! " ] } ], "metadata": { "interpreter": { "hash": "b9f90a7866deec4ec91106178f5b99f4479e17c39f9cdadf9218e367e68d50a4" }, "kernelspec": { "display_name": "Python 3.7.9 64-bit ('cfl_env': conda)", "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.7.9" }, "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2 }