{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Get Started" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[![Google Colab](https://badgen.net/badge/Launch/on%20Google%20Colab/blue?icon=github)](https://colab.research.google.com/github/sflippl/predicode/blob/master/usage/get_started.ipynb)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# For installation of the necessary packages in Google Colab\n", "try:\n", " import predicode as pc\n", "except:\n", " # Tensorflow 2.0 must be installed manually in Google Colab\n", " !pip install tensorflow==2.0.0rc\n", " !pip install git+https://github.com/sflippl/predicode\n", " import predicode as pc\n", "# lazytools just contains a few convenience functions, specifically matrix heatmaps,\n", "# but is otherwise not necessary.\n", "try:\n", " import lazytools_sflippl as lazytools\n", "except: \n", " !pip install git+https://github.com/sflippl/lazytools\n", " import lazytools_sflippl as lazytools" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this tutorial, you will get to know the basic functionality of predicode, starting with a minimal linear predictive coding model before discussing multiple tiers, customized optimization regimens, training in batches, and the tensorboard functionality." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Throughout the tutorial, we will be concerned with a small artificial dataset that is normally distributed, with its principal components having exponentially decreasing variance." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "dataset = pc.datasets.decaying_multi_normal(\n", " dimensions=10, size=100\n", ")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lazytools.matrix_heatmap(dataset, pole=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The minimal model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a first step, we add tiers of specified shape, in this case a ten-dimensional input layer and a four-dimensional latent layer." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Active connection: tier_1 -> tier_0\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hpc_minimal = pc.Hierarchical()\n", "hpc_minimal.add_tier(shape=(10, ))\n", "hpc_minimal.add_tier(shape=(4, ))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can inspect the current result using the summary:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# Tier 1: tier_1\n", "\n", "# Connection: tier_1 -> tier_0\n", "(No tier connection defined.)\n", "\n", "# Tier 0: tier_0\n" ] } ], "source": [ "hpc_minimal.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 'connection' property refers to the currently activated connection, in this case the connection between tier 1 and tier 0." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This connection specifies how tier 1 is inferred from tier 0 with the observed data. The class `pc.TopDownPrediction()` provides a classical hierarchical predictive connection where tier 1 is used to predict tier 0 and the values of tier 1 are inferred to optimize this prediction. The provided model must be a Keras model that specifies how tier 0 is predicted from tier 1. Specifically, `pc.TopDownSequential` instantiates a [Sequential](https://keras.io/getting-started/sequential-model-guide/) model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, a simple linear connection is given by a sequential model consisting of single dense linear connection." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "import tensorflow.keras as keras\n", "hpc_minimal.connection = pc.connections.TopDownSequential()\n", "hpc_minimal.connection.add(\n", " keras.layers.Dense(10, input_shape=(4, ))\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The model is now ready to be compiled:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# Tier 1: tier_1\n", "\n", "# Connection: tier_1 -> tier_0\n", "Top-down prediction.\n", "## Predictive model\n", "Model: \"sequential\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "dense (Dense) (None, 10) 50 \n", "=================================================================\n", "Total params: 50\n", "Trainable params: 50\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "## Prediction error\n", "\n", "## Loss function\n", "\n", "\n", "# Tier 0: tier_0\n" ] } ], "source": [ "hpc_minimal.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, the prediction error is given by the difference between the prediction from tier 1 and the true values of tier 0, and the loss function is given by the mean squared error between the two. By compiling the model, we now specify how the states and the predictor weights are estimated." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "hpc_minimal.compile(optimizer='adam')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now use `dataset` to train the model:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hpc_minimal.train(dataset, epochs=100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now inspect the estimated tiers, predictions, and prediction errors:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lazytools.matrix_heatmap(hpc_minimal.tier(1).numpy(),\n", " pole=0)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lazytools.matrix_heatmap(hpc_minimal.prediction(0).numpy(),\n", " pole=0)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lazytools.matrix_heatmap(hpc_minimal.prediction_error(0).numpy(),\n", " pole=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also inspect the estimated weights:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[array([[ 0.4781576 , 0.688794 , 0.12980229, 0.5537218 , 0.38032824,\n", " -0.11391962, -0.02828846, 1.0756079 , 0.5172539 , -0.5371767 ],\n", " [ 1.2092746 , -0.1235444 , 0.53653646, 0.9537554 , 0.83324504,\n", " -0.46419057, 0.01348522, -1.3601234 , 0.66269 , 0.17493841],\n", " [-0.95141053, 0.06300981, -0.27511808, 0.1718974 , 0.5279959 ,\n", " 1.1658176 , -0.29007822, -0.20417835, -1.0425217 , -0.7889378 ],\n", " [ 0.7737668 , 0.54437613, -1.2937229 , 0.65247506, 0.03088524,\n", " -1.3553474 , 0.4264841 , -1.7554736 , 0.6602506 , 0.57957274]],\n", " dtype=float32),\n", " array([-0.00057098, -0.00237244, 0.0034195 , -0.00104265, 0.00052802,\n", " 0.00262731, -0.00226873, -0.00321213, 0.00054307, 0.00072796],\n", " dtype=float32)]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hpc_minimal.connection.model.get_weights()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimization regimens" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hierarchical predictive coding must infer the latent variables and the predictor's weights. When both are taken together, the system is oversaturated. These variables must therefore be estimated in separate stages. Usually, this is solved by the Expectation-Maximization-Algorithm, iteratively estimating states and predictor variables until convergence. This means that the usual routine of simply specifying epochs is not sufficient. Instead, convergence criteria must be specified when estimation mode should be switched." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This specification works with `OptimizationRegimens`. The parameter `eps` specifies the change at which the algorithm is assumed to have converged, and the parameter `max_steps` specifies and upper bound on the number of iterations." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "state_regimen = pc.regimens.OptimizerRegimen(\n", " optimizer=keras.optimizers.Adam(learning_rate=0.1),\n", " eps=1e-1,\n", " max_steps=100\n", ")" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "predictor_regimen = pc.regimens.OptimizerRegimen(\n", " optimizer=keras.optimizers.Adam(learning_rate=0.01),\n", " eps=1e-3,\n", " max_steps=100\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, you can combine the state and predictor regimen using the class `EMRegimen`." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "em_regimen = pc.regimens.EMRegimen(\n", " state_regimen=state_regimen,\n", " predictor_regimen=predictor_regimen\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a shortcut, you can use identifiers for compilation (see `help(pc.regimens.get)`)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multiple tiers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Specifying multiple tiers works in exactly the same way:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Active connection: tier_1 -> tier_0\n", "Active connection: tier_2 -> tier_1\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hpc_three = pc.Hierarchical()\n", "hpc_three.add_tier(shape=(10, ))\n", "hpc_three.add_tier(shape=(4, ))\n", "hpc_three.add_tier(shape=(2, ))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At the moment the active connection is given by the one between tier_2 and tier_1. We specify a sequential model with an intermediate nonlinearity." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "import tensorflow.keras as keras\n", "hpc_three.connection = pc.connections.TopDownSequential(\n", " layers=[\n", " keras.layers.Dense(8, input_shape=(2, )),\n", " keras.layers.Activation('relu'),\n", " keras.layers.Dense(4)\n", " ]\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now activate the connection between tier_1 and tier_0 to specify a linear model there." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Active connection: tier_1 -> tier_0\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hpc_three.activate_connection('tier_1')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "hpc_three.connection = pc.connections.TopDownSequential(\n", " layers=[keras.layers.Dense(10, input_shape=(4, ),\n", " use_bias=False)]\n", ")" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# Tier 2: tier_2\n", "\n", "# Connection: tier_2 -> tier_1\n", "Top-down prediction.\n", "## Predictive model\n", "Model: \"sequential_1\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "dense_1 (Dense) (None, 8) 24 \n", "_________________________________________________________________\n", "activation (Activation) (None, 8) 0 \n", "_________________________________________________________________\n", "dense_2 (Dense) (None, 4) 36 \n", "=================================================================\n", "Total params: 60\n", "Trainable params: 60\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "## Prediction error\n", "\n", "## Loss function\n", "\n", "\n", "# Tier 1: tier_1\n", "\n", "# Connection: tier_1 -> tier_0\n", "Top-down prediction.\n", "## Predictive model\n", "Model: \"sequential_2\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "dense_3 (Dense) (None, 10) 40 \n", "=================================================================\n", "Total params: 40\n", "Trainable params: 40\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "## Prediction error\n", "\n", "## Loss function\n", "\n", "\n", "# Tier 0: tier_0\n" ] } ], "source": [ "hpc_three.summary()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "hpc_three.compile(optimizer=em_regimen)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hpc_three.train(dataset, epochs=250)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now again examine this model:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lazytools.matrix_heatmap(hpc_three.tier(2).numpy(), pole=0)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lazytools.matrix_heatmap(hpc_three.prediction(1).numpy(), pole=0)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lazytools.matrix_heatmap(hpc_three.prediction_error(1).numpy(),\n", " pole=0)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmMAAAGMCAYAAACWMqW3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAH8xJREFUeJzt3X+wnXV9J/DPk3uJMQSILAKGCAFCRCgUgSIgVMQfW60IVmnddRjd6raOtrPOTn841alK62zHzs7sznQ6u9uZ3bU6O+6uW1GpomL5WcfaqjQC7YJNESKLSCOEEGNy7332j5srNzf33Nxzvs85n+c55/WayTA559zzvDHm3jef7/d8n6qu6wAAIMea7AAAAJNMGQMASKSMAQAkUsYAABIpYwAAiZQxAIBEyhgAQCJlDAAgkTIGAJBIGQMASKSMAQAkUsYAABIpYwAAiZQxAIBEyhgAQCJlDAAgkTIGAJBIGQMASKSMAQAkUsYAABIpYwAAiZQxAIBEyhgAQCJlDAAgkTIGAJBIGQMASKSMAQAkUsYAABIpYwAAiaazAyz1mc9EnZ2BMq9/fXYCSt18c3YCSlwbn8mOQKlrr62yIzA6JmMAAImUMQCARK1bpnzVq7ITUGrPnuwElHr00ewEFNm6PjsB0AeTMQCARMoYAECi1i1TfvWr2Qko9epX+UBs123Z4oNcnfbww9kJgD6YjAEAJFLGAAASKWMAAIlat2dsy5bsBJR6arf9Rl13773ZCSjx2l95c3YEoA8mYwAAiZQxAIBErVumfOKJ7ASU2rQpOwGlNmzITkCRvXuzE1DquOOyEzBCJmMAAImUMQCARMoYAECi1u0Zu2zrD7IjUOgHe5+fHYFC7qbTcevXZycA+mAyBgCQSBkDAEjUumXKHx9riavr1u3PTkCpc87JTkCRP/3T7ASU+vVfz07ACJmMAQAkUsYAABK1bpnygQeyE1Bq69bsBJTyacpue+rXLHF1nfP3J4vJGABAImUMACCRMgYAkKh1e8b+/u+zE1DqvHNmsyNQ6OSTp7IjUOC4NU9nR6DYMdkBGCGTMQCARMoYAECi1i1TXnxxdgJKPbPPElfXzc1lJ6DI9u3ZCSj1spdlJ2CETMYAABIpYwAAiVq3TDndukT0a78bhXfehg3ZCSjiY+ndZ5lyopiMAQAkUsYAABIpYwAAiVq3Q+uzn81OQKn3/MqB7AgU2r79qOwIFNh5/DuyI1DoN7MDMFImYwAAiZQxAIBErVumvOCC7ASU+vGcJa6uczxJt23dmp0A6IfJGABAImUMACBR65Ypt2zJTkCpmZnsBJTavDk7ASXeeP4/ZEeg2JnZARghkzEAgETKGABAImUMACBR6/aM+Uh9961R8TvvhBOyE1DknnuyE1DqTHvGJokfmwAAiZQxAIBErVumPH3vfdkRKPTDfedmR6DQhg3ZCSjyBx/NTkCpN70pOwEjZDIGAJBIGQMASNS6Zco7nrDE1XWXuklx5/kwXred+sd/lR2BQhdlB2CkTMYAABIpYwAAiZQxAIBErdsz9tBD2Qkodckl2QkoNTeXnYASO3ZkJ6DURTaNTRSTMQCARMoYAECi1i1Tnn9+dgJKzcxkJ6DUVseTdNr1J96RHYFiL88OwAiZjAEAJFLGAAASKWMAAIlat2fszjuzE1DKvr/u27kzOwEl/vd6+4267vrsAIyUyRgAQCJlDAAgUeuWKbdty05Aqf37sxNQavfu7ASUcAcF6BaTMQCARMoYAECi1i1TbtqUnYBSe/dmJ6DUxRdnJ6DE9fs+nh2BYjdkB2CETMYAABIpYwAAiZQxAIBErdszdsYZ2QkotW9fdgJKnXhidgKK/MH/yE5AqRvsGZskJmMAAImUMQCARK1bpnQsQvetW5edgFIPP5ydgCJveUt2AiZcVVUfiogPRsRddV3/7DLP/UZd1xsSorWSyRgAMCxXVlV1dXaItlPGAIBheCYi/irmJ2SsoHXLlPffn52AUpdfnp2AUjt2ZCegxH1vflt2BAqdmx2gOTdGxJ9XVXVVXde3L/eCqqqOj4iPRsS1EbEhIr4dER+o6/pLi15ze0TsiYiPRcTvR8QpEfH1iPjXdV3/w6LXPSfmy99bI+LkiNgREb9X13WrP2JsMgYADEVd15+PiL+OiA8t93xVVVMR8YWIeGNEvD8i3hQR34+Iz1dV9YolL78gIn4jIt4XEW+PiG0R8Yklr/lfEfGrEfHvI+L1EXFLRHyiqqrXlv/bDE/rJmMAwFi5MSI+V1XVy+u6vmPJcz8fEZdExM8fLG5RVdUtEXFvzE+4blv02o0R8ZK6rn9w8HUbI+JPqqraXNf1zoPl7Q0R8c8XTdW+XFXVKRHx4Zgvfa1kMgYADE1d1zdHxDdj+b1jV0bE0wtF7ODr52J+wnX5wcnZgnsWithBCxubNh/852siYldE/EVVVdMLvyLiKxHxkiXv1Sqtm4ydfXZ2Akrt35+dgFIzM9kJKLF585FfAyN2Y0TcVFXVlUsef17ML0su9VhEHBXze8ieOvjYk0tes/DTZuFApRMi4viIONAjwwsiYmcfmUemdWUMABgvdV1/pqqqe2J+Onb3oqd2RcRJy3zJyTFfqvb0cZldEfGDiHhdj+cf7+O9RkoZAwBG4caI+LMlj90dEb9ZVdXP1XV9S0REVVVrIuL6iPhqXdezfbz/rRHxWxGxv67r7U0EHpXWlbHvfCc7AaUuvjg7AaXOPz87ASWOu/Nz2REodc012QmG4aaI2B4Rr4z5M8giIv485o+o+HhVVb8T88uI74qIF0XEe/p587quv1xV1eci4paqqj568FpHx/xJIVvrun5nI/8WQ9C6MgYAjJ+6ruuqqm6MiE8temz24LETfxgR/y7m94htj/lPV94+wGXeHPNHX7w7Ik6L+f1m90bEfytLP1xVXdfZGQ5x113RrkD0zWSs+26+OTsBJa5fZzLWeddcU2VHYHRaNxnzKa7uW+PAlM5buzY7AUV2785OAPTBj00AgETKGABAImUMACBR6/aMnXFGdgJK7duXnYBS/gw7bu/e7ARAH0zGAAASKWMAAIlat0w5N5edgFKORei+xx7LTkCR616TnQDoQ+vKGADQUdPT74mIV8f8TbufjIinh3zFNRFxXEQ87+Cv98XMzL1DvmbjlDEAoBlr1lwcVXXtT34/yrv8VFVExB/F/O2POkUZAwCaMT09u+Lzwyhn1SF3jurkLRVbV8bWrctOQCnHInTf5s3ZCSjyyU9mJ6DUb/92doLBTE319/qFcraakrZQuqrxu21n68oYANBRJTcn7lXIxrB8LaWMAQDN6HcytlRdT0T5Wqp1ZWzXruwElNqyJTsBpfbvz05AEX8JydLPZGxx6VqugPWzhNlxrStjAEBHrXYyNsj0a4xLmTIGADRjauqKZR8fxtLj8uXsvIj4YvMXG67WlTGfxIN80637zkBf9s9kJ2BSTU//MOW6C8Wsqp5MuX4h33IBgGYcddR9EXHpYY8Pc4nx0KnbI8O70PAoYwBAM1a7Z6yJcjZGn7pUxgCAZgx6tMVKn5wc48NeF7SujJ16anYCSpWc+Uc7zM1lJ6DI449nJ2BSlf4AcM4YAECBQSZjSydfi6djY3ycxWLKGADQjNWUsX6XHSegnLWujD32WHYCSm3blp0AJpw7vZNlaurEFZ9vYgly5UJ2TPkFRq91ZQwA6Kjp6QsPKUuj2P916PXOj4hPDf+izVLGAIBmrF17S0S845DHRrm0WFV/ObqLNad1ZWzduuwElJpx+HfnPfRQdgKKvPcN2QmYVEfaM9bU/q8xO+6idWUMAOiofo+26LeQjUn5WkoZAwCaMeihrwsWDjlcXLrGtIAtpowBAM0oOfS1qua/vqrG9giLXlpXxjZsyE5Aqf37sxNQyt/Djrv33uwElLroouwEgyk59HU5E1LKWlfGAICOWmky1sSm+5XuYdlhyhgA0IypqZ877LFh7flavpBdFhFfHM4Fh6d1ZWz79uwElLrqquwElNqxIzsBJT5+bEeXuPiJG7r6Rzg9fU9U1Skp+77mr3ffaC/ajNaVMQCgo9au7X1Tw2GWs2enb7uHd5HhUcYAgGb0s4F/kP1fY3bY64LWlbETTshOALzzndkJKPHi616UHYFSN/zf7ASDKTlnrK4PL2ZjWr6Wal0ZAwA6quScsQV1PfblayllDABoRr+TsV4n7Y/pERa9KGMAQDP6KWP9TL/GvJS1rozt25edgFJO4O++O+/MTkCJF996a3YEJtXU1It7Ptfk0mPvcnZKcxcZndaVMQCgo6annx8Ro9/3tVDOqmrZjwFWVfVrEfH2iDgvIj5d1/VbRhVtNZQxAKAZRx11Z0Scdchjw15iPLT0/W2PVz0aEb8fEa+KiNad29C6MrZ5c3YCSq1bl52AUo/1PraRDnjm+BdmR6DQ0dkBBrWaPWNNlbM+Jm91Xf/Z/JdUF4QyBgCMrUHOGTvSJyd7feJyjChjAEAjHrziiit2n3RSz+cv+vSnV36DXoe+LvGNN75x2cePf/jhK093o/BymzZlJ6CUT8R237Zt2QkocfR/+Eh2BEq9//3ZCQZzpMnVkSZnpTcYb+LQ2QStK2MAwJhaKEurvc3R4mI2xmeNKWMAQCPO+sY3vhoRvW+OOl1YOw4Wsou+8IVer7grrr32sAerqpqO+c4zHRFrqqpaFxGzdV0fKAvUDGUMAGjG1NTrD3tsmJvuD99j9spYfs/YByLig4t+f31EfCzmzx5L17oydsst2QkodfXV2QkotWNHdgJKfPsNHd1vxE+clx1gUNPTt0RV3fCT349yaXG+9N223FN1XX8oIj40ujD9aV0ZAwA66qijVr4h3jDK2aGTt7nmLzB8yhgA0Ix+zhnrd3P+ajf9d1DrytjWrdkJKLV2bXYCSh17bHYCSpy34R+zI1Ds9OwAgyk5WmI1h76OqdaVMQCgowY5gX+xZ2/4XZ6lQ5QxAKAZ/U7GVlp6PNJtksaIMgYANGO1k7FBJl9jXMpaV8buvjs7AaXcSqf7nngiOwElPn53R/cb8RM3dPWPcGrqsmUfb3rZsXcxOzfcmxIAmFjT08+kXPfZvWZ7Uq5fSBkDAJpx1FHbI+JnDnt8mEuMh07dvju8Cw1P68rY616XnYBSu3dnJ6DUCSdkJ6DEDRfelx2BYudmBxjMaveMNVHOxugTl60rYwBARw16tMVKn5wc48NeFyhjAEAzSg59jZgvY2NcunppXRl7+OHsBJQ6++zsBJSabt13BvqycWN2AibVIJOxpZOvfm+TNAZ8ywUAmrGaMrZ48rWaKdgEHP6qjAEAzZiaOn7F55tYgly5lK0vv8DoKWMAQDOmpy89pCyNYv/Xode7KCI+PfyLNqt1ZeyWW7ITUOrSS7MTUOpLX8pOQIl3v/uU7AgU6uyK3Nq1n4+Idxzy2Cj/ZarqrtFdrDmtK2MAQEcdac9YU5vzx+y4C2UMAGhGv0dbDFLIxqSALda6Mva+92UnoNTevdkJKHXxxdkJKPHp//T97AgUOyk7wGAGPfR1wdzc/D/7/cRlx7WujAEAHVVy6GtVzf9as6bDm+YGo4wBAM0oOfR1ua+fkFLWujL23LWz2REo9NSewjE16a6+OjsBRawzd98jj2QnGMxKk7HSTfdjfDJ/68oYANBRU1OvWfbxYez7Wr6QXRYRX2z+YsOljAEAzZievi+q6oVRVaOfXs1f7/7RXrQZyhgA0Iy1a7/X87lhlrNnJ29PDe8iw9O+MrZrV3YCSq19fnYCCt17b3YCSlz23vdmR2BS9bOBf5AbgI/ZYa8L2lfGAIBuGvScsV7FbEzL11LKGADQjJJzxhbU9diXr6VaV8aeXmeJq+vWrc1OQKmdO7MTUORD/zY7AZOq38lYr5P2B1nC7LDWlTEAoKP6KWP9TL/GvJQpYwBAM6amtvV8rsmlx97l7AXLX7raGBH/JSJeGxG7I+IjdV3/cXOByrSujD36aHYCSp14YnYCSl1ySXYCitx4Y3YCSn3wg9kJBjI3NfWCn1SuUe37WlTM6oiTe+xa+6OY7zybImJrRNxaVdXf1XV92wgSHlHryhgA0E11TN1Rz5ediBVWFpuoaT3e/luHXauqjo6I6yPiJXVdPx0R36qq6r9HxC9HhDIGAIyPuQFr1mq+arW7xpbZtbYtIqq6rhefzn9PRLTmky7KGADQiB2PfPeKPXv39Hz+vG3nLfNofUjRWljdXH5b2PyT337g28u+/8ZjNl555rYzl96bckPM7xNb7MmIOKZn0BFrXRk74YTsBJSabt3/q+hXE0cFkeixx7ITwLKWn5wtfqw+OAIbbMLWY3q2JyKOXfLYcRHx9EAXGQI/NgGARtRHKFFLnz98+rUmllaqBj4H8EBE1FVVvbiu6787+NgFEdGaG78pYwBAI154ypl3R8SLej0/d1j5OvKkbLnlyrPPuqDXJe5a+kBd189UVfWpiPi9qqr+VUScERFvj4hf7PUmo9a6MrZvX3YCSq1bl52AUrt2ZSegiLNJSDIXVbVk0XEZ/Yy6lr728Hc88vUiIuI9EfEnEfH/Yn7/2O/Wdf0XfQQZqtaVMQCgm+bmqmuGe7zY4W++uIDNzcXVEbF0A3/Udf1kzB9v0UrKGADQiAMz1Zci4q29nm+6qC2zhHlHs1cYDWUMAGjE3Fz0tdlokHJ2hNtUzvb/jvlaV8ZO2TTeNwOdBP+0a0S3wGBo5uayE1Dk8cezEzChZgur0HLlbMzvER4RLSxjAEA3NVnGJqGELVDGAIBGDDJVX1y66vrZQjaq+4y3QevK2CM7J+h//TG1YUN2AkpZpuy4rVuzEzChVjMZG3TiNc7lrHVlDADopl7/IbdQwJpYehzHyZkyBgA0YmYmXlpVOfu9qipibi5eHMucM9Z2rStjX/tadgJKXf/mCdp1OaZ22i7QaX/9mjdlR6DQz2QHGND+/bG/18RqmJOshb1mc3Px4+FdZXhaV8YAgG6anY1vRcSFvZ5vaolxhWXPHWXvnEMZAwAa0e/RFqstZ0s/cTlulDEAoBFNnDO2UMya3PTfdq0rY9OtS0S/ZufsN+q6NWuyE1Bi3brsBEyqkmNxFvZ9LT5rbFKoPgBAI/qZjPUz8Rr3cqaMAQCNWKmMNbXcOI7FrHVl7IILshNQas+e7ASUOuOM7ASUOO+r/zk7AqXO+9XsBAOZmYnjlu75GrYl97N8zmiu2qzWlTEAoJtmZuLKjENfFzb+z87GpRHx2dFevZwyBgA0YmYmbo6Id6z0miaXGZcpfXc09+6j07oy5gT+7rvuuuwElHr00ewElPjeL3ZziYtnnZIdYECDHG3RTzkb12MuWlfGAIBuGvScsV6Hv07KWWPKGADQiJJzxiaZMgYANGKQMrbc9Kupe1h2RevK2NVXZyeg1L592Qkodfzx2Qkoccrd/zM7AqV+6ZeyEwxkNcuUgyw9jns5a10ZAwC6abkyNsz9XuNSzpQxAKARMzPxqszr13VcEhFfzMwwiNaVsY0bsxNQav/+7ASUOvvs7AQU+Ze/k52AUh1dpty/Px6oqjht8WOjnF7NzcV3Rne15rSujAEA3TQ3Fw+v9rUlJW2Fpc9dg79rHmUMAGjEoOeMRaxczpwzNmI7d2YnoNSmTdkJKLV9e3YCSrz0E5/IjsCEKiljEc/eY3JSDntd0LoyBgB006CHvi4uXwtlbM2a5nK1nTIGADRitZOxxROvXtOv2dnxP19sgTIGADRipTLWxNLjMMtZVVWviIjfjYgLI+JHdV2f3PxVlte6Mub09u5ztEX3fe1r2QkosXfvZdkRKPRvOvpHODMTZy4UpVHu91p0zRML3uaZiPivEfGJiPhIearVa10ZAwC6aWYmTs28fl3H5sG/tv56RHy9qqqrmku0OsoYANCIAwfitog440iva2KZscfk7Zvl7zx6rStjjrbovq1bsxNQ6sILsxNQ4j2//KPsCBR7bnaAgbz0pQ9ecdJJu3s+f9NNFx322GqL2eLydd1131j2NY88cvyVEacfdjukqqqmIqLXleq6rgsP5SjTujIGAHTTkfaJrebTliV7zlb4mq9ExMt7PPf9iBjZZv3lKGMAwEgMeg7ZavUqY3VdXzXcK5dpXRnb3Xu6SUc8J36cHYFCe/Y8JzsCBf72gW4ucfGsn/7p7ASDuf32s+6OiBet9vUrHXex0jEWn/zk4cudB931C7+w2qsvvV61JiLWHvwVVVWti/klzKH/UGtdGQMAuulIy5BNHHcxxANgfzYiblv0+x9FxHcjYsvQrniQMgYANGLxqfkRw7vH5DAOf63r+vbovcl/qJQxAKARMzNxTeati+o6roqIwz5N2XatK2ObNmUnoNQzM/Ybdd3evdkJKLF2bXYCJtWBA/GViPgXvZ4fRlFbMnX7y+avMHytK2MAQDfNzUVf/yk3SDk7wpLngf7fMZ8yBgA0YjXniC21uJAtV86Gte+sTVpXxhxt0X1r1mQnoNS6ddkJKDHduu/sTIpBythiy23+nwT+ygIAjRjkUNfFpauuh/NJybZTxgCARqx2MjbI1Gucy5kyBgA0otdkrMl9X+M4OWtdGduzJzsBpYZ97zGGz56jbnO0BVlmZuLiqsrZ71VVEXNzcVY4ZwwAmFQHDsSyNWzYU6yFvWZdHQYoYwBAI2Zm4hsRcUGv55taYly66X+RB8veOUfrytipp2YnoJQlLsh18snZCZhU/R5t0U85G+fzxvzYBAAa0cQ5YwvFbJzL11LKGADQiJI9W4vPGJs0rStjL73gx9kRKPSD3W4U3nVXXZWdgBLPWT+VHYFSpSOmJP3E7mfiNe4lrXVlDADoppXKWFPLjeNYzJQxAKARMzOxYdT3l1xyvaOGf8XmKWMAQCNmZ+MVyYe+viwibh791cu0rox95W77jbru0kuzE1Dq5s59K2OxNV/v5n4jnnVRdoABHTgQn4uId6z0miaXGZcpfbc39+6j07oyBgB002o38C8uZP2Us3E97kIZAwAaMeiHQHsd/rrCSftjpXVl7IKeN1GgK7p6bzCetX59dgJKXHTy97IjUOyU7AADaeL7/9JDXydB68oYANBNg5Sx5ZYem7qHZVcoYwBAI1azTFky8RrXcta6MvY3f5OdgFJOb+++tWuzE1DimY3dXOLiWUdnBxjQcmVsmMuN41LOWlfGAIBump2NV2Zd++A5YxdFxBezMgxKGQMAGrF/f+yoqtiSdf26jkeyrl1CGQMAGjE7G/94pNc0sTl/hfPGHh/8XfO0roxt3JidgFIzM9kJKLVlS3YCShz9qY9lR6DU296WnWAgJUdbrFTOxv2Yi9aVMQCgmwY99HVBVc3/GteT9ntRxgCARgw6GVuudI3LJyVXo3Vl7OyzsxNQygn83bdnT3YCiuzdm52ACbXayVi/E69xL2atK2MAQDetVMaaXHIct3KmjAEAjZidjY0Z95ZcdM3nju6qzWldGXvyyewElDr55OwElNq9OzsBRa762ewETKjZ2fitiPiPEfF0ROwb0WWriFgfEcdExDdHdM1Gta6MAQDdVNexIyJ2ZOfomjXZAQAAJpkyBgCQqHXLlMcem52AUo5F6L5167ITUOT++7MTUOrcc7MTMEImYwAAiZQxAIBErVumfOKJ7ASUcrRF9z30UHYCSnz3nddnR6DQadkBGCmTMQCARMoYAEAiZQwAIFHr9ow99lh2Akpt2ZKdgFLnnJOdgBKnPfDl7AiUOu3V2QkYIZMxAIBEyhgAQKLWLVMef3x2AkqtUfE7b9++7AQUWb8+OwHQBz82AQASKWMAAIlat0x57qlPZ0eg0A93H5MdgUJuFN5xN92UnYBSL3tZdgJGyGQMACCRMgYAkEgZAwBI1Lo9Y//nS/Ybdd3rXpedgFKPP56dgBJPfeAPsyNQ6LjsAIyUyRgAQCJlDAAgUeuWKTdvzk5Aqbm57ASUevLJ7ASU2LUrOwGljrNOOVFMxgAAEiljAACJWrdMuXNndgJK/dRPZSeg1HTrvjPQD8uU3Xf66dkJGCWTMQCARMoYAEAiZQwAIFHrdoacc052AkrNzGQnoNT69dkJKHHRln/KjkCxf5YdgBEyGQMASKSMAQAkat0yJd23dm12Akpt2pSdgCK33JKdgFJvfWt2AkbIZAwAIJEyBgCQqHXLlA88kJ2AUmeckZ2AUk88kZ2AErPvssTVdVPZARgpkzEAgETKGABAImUMACBR6/aMnXhidgJKOdqi+/wZdtvUjgezI1DqrLOyEzBCJmMAAImUMQCARK1bpnSj8O7bvTs7AaXc7L3jHnooOwGlLFNOFJMxAIBEyhgAQKLWLVMeN/fD7AgU+t7e52VHoNC2bdkJKPKud2cnoNSDPhE7SUzGAAASKWMAAImUMQCARK3bM3bbPfYbdd0ll2QnoNSOHdkJKPHKW2/NjgD0wWQMACCRMgYAkKh1y5SXX56dgFL79mUnoNT+/dkJKHL//dkJKHXaadkJGCGTMQCARMoYAEAiZQwAIFHr9ozdeWd2Akpdeml2Akpt2JCdgCKbN2cnAPpgMgYAkEgZAwBI1LplyhNOyE5AqenW/b+Kfn3nO9kJKPHg5edlR6DQWdkBGCmTMQCARMoYAECi1i0orVEPO29mJjsBpfw97DZbBaBbfMsFAEikjAEAJFLGAAAStW5nwd692QkoZb9K983NZSegxJNPZicA+mEyBgCQSBkDAEjUugWlb34zOwGlLrwwOwGl3Amj29zoHbrFZAwAIJEyBgCQqKrrOjvDIZ56KtoVCCbQrbdmJ6DEm7Z/MDsCpT784So7AqNjMgYAkEgZAwBIpIwBACRq3Z4xAIBJYjIGAJBIGQMASKSMAQAkUsYAABIpYwAAiZQxAIBEyhgAQCJlDAAgkTIGAJBIGQMASKSMAQAkUsYAABIpYwAAiZQxAIBEyhgAQCJlDAAgkTIGAJBIGQMASKSMAQAkUsYAABIpYwAAiZQxAIBEyhgAQCJlDAAgkTIGAJBIGQMASKSMAQAkUsYAABIpYwAAif4/ba3wnpSCr6UAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lazytools.matrix_heatmap(hpc_three.tier(1).numpy(), pole=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Batch training" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For big datasets, you can also train in batches. This means, however that you will not have retained all tiers, but only the last batch that was used." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "big_dataset = pc.datasets.decaying_multi_normal(\n", " dimensions=10, size=50000\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As an example we just estimate the states for the given weights. This can be specified by only specifying a state estimator in the provided dictionary." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "hpc_minimal.compile({'states': 'adam'})" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hpc_minimal.train(big_dataset, batch_size=1000, epochs=100)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lazytools.matrix_heatmap(hpc_minimal.prediction(0).numpy(), pole=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Metrics and Tensorboard" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "During compilation, we can also specify metrics to keep track of:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "new_dataset = pc.datasets.decaying_multi_normal(dimensions=10, size=100)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Active connection: tier_1 -> tier_0\n" ] } ], "source": [ "hpc_metrics = pc.Hierarchical(\n", " tiers=[(10, ), (4, )]\n", ")\n", "hpc_metrics.connection = pc.connections.TopDownSequential([\n", " keras.layers.Dense(2, input_shape=(4, )),\n", " keras.layers.Activation('relu'),\n", " keras.layers.Dense(10)\n", "])\n", "hpc_metrics.compile(\n", " pc.regimens.OptimizerRegimen(\n", " keras.optimizers.Adam(), max_steps=100\n", " ),\n", " metrics=[keras.metrics.MeanSquaredError(),\n", " keras.metrics.MeanAbsoluteError()]\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you specify a log directory during training we can use [Tensorboard](https://www.tensorflow.org/guide/summaries_and_tensorboard) using the summary file writer." ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "import datetime\n", "logdir = 'log/{}'.format(datetime.datetime.now())" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "summary_writer = tf.summary.create_file_writer(logdir)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "with summary_writer.as_default():\n", " hpc_metrics.train(new_dataset, epochs=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now use the magic method tensorboard to inspect the progress during estimation." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "%load_ext tensorboard" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "%tensorboard --logdir log" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }