{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Orientation maps and training\n", "\n", "This notebook builds a LISSOM model (see *Lissom_modules* ipynb), trains it with orientated gaussian inputs, and plots the prefered orientation of the V1 neurons." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**REMARK**: In this ipynb, as oppose to the other notebooks, we use a **pylissom** helper for instantiating layers, that reads from a config file. Another tool used is *Pipeline*, that has training and testing evaluation logic given a dataset. For more information regarding these helpful tools, please read the documentation page." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from tqdm import tqdm_notebook as tqdm\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import torch" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from pylissom.utils.training import Pipeline\n", "from torch.utils.data import Dataset, DataLoader\n", "from pylissom.datasets.datasets import OrientatedGaussians, ThreeDotFaces" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "from pylissom.models.models import get_lissom \n", "from pylissom.utils.plotting import *\n", "from pylissom.utils.helpers import debug" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###### If this takes more than 5 seconds, it's a problem with the pytorch and cuda versions, only happens first time cuda is called\n", "###### If this takes more than 30 seconds, maybe your cuda is broken" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import torch\n", "foo = torch.Tensor(2)\n", "%time foo.cuda()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training variables\n", "\n", "The input consists in gaussian oriented images (2 oriented gaussians per picture, in random positions)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "size = 24\n", "count = 10000\n", "epochs = 1\n", "cuda = False\n", "gaussians_per_image = 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Init and train Lissom" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we use one of the helpers that returns a model according to a config file. This simplifies a lot the parameter tracking, a huge problem in LISSOM training. For more information, please check the documentation." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Lissom (\n", " (v1): ReducedLissom (\n", " (inhibitory_module): Cortex (9216 -> 9216, sigma=47.84, radius=23.0)\n", " (excitatory_module): Cortex (9216 -> 9216, sigma=7.4879999999999995, radius=9.6)\n", " (afferent_module): Cortex (576 -> 9216, sigma=5.0, radius=6.5)\n", " (piecewise_sigmoid): PiecewiseSigmoid (min_theta=0.083, max_theta=0.633)\n", " , 576 -> 9216, settling_steps=9, afferent_strength=1.0, excitatory_strength=0.9, inhibitory_strength=0.9)\n", " (off): LGN (\n", " (diff_of_gaussians): DifferenceOfGaussiansLinear (576 -> 576, sigma_surround=2.0, sigma_center=0.5, radius=9.4, on=False)\n", " (strength): *2.33\n", " (piecewise_sigmoid): PiecewiseSigmoid (min_theta=0.0, max_theta=1.0)\n", " )\n", " (on): LGN (\n", " (diff_of_gaussians): DifferenceOfGaussiansLinear (576 -> 576, sigma_surround=2.0, sigma_center=0.5, radius=9.4, on=True)\n", " (strength): *2.33\n", " (piecewise_sigmoid): PiecewiseSigmoid (min_theta=0.0, max_theta=1.0)\n", " )\n", ", 576 -> 9216)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lissom, optimizer, _ = get_lissom(retinal_density=size, lgn_params='lgn', rlissom_params='rlissom', optim_params='optim')\n", "display(lissom)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Pylissom** implements two of the most common LISSOM stimuli, *OrientatedGaussians* and *ThreeDotFaces*. They extend the *torch.Datasets* interface." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "scrolled": false }, "outputs": [], "source": [ "gaussians_inputs = OrientatedGaussians(size=size, length=count, gaussians=gaussians_per_image)\n", "# gaussians_inputs.cuda()\n", "gaussians_inputs = ThreeDotFaces(size=size, length=count, faces=1)\n", "train_loader = DataLoader(gaussians_inputs, shuffle=True, pin_memory=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sample, test_sample = iter(train_loader).next()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "plot_tensor(sample, shape=(size, size))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These are some samples of such datasets:\n", "\n", "ThreeDotFaces:\n", "![ThreeDotFaces.png](imgs/three_dot_faces_dataset.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "OrientatedGaussians:\n", "![image.png](imgs/two_gaussians_dataset.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the *Pipeline* object, we can train or evaluate a model for a given dataset. It simplifies the pytorch boilerplate for training. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pipe = Pipeline(lissom, optimizer, cuda=cuda, log_interval=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inpect activation" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "gauss, _ = iter(train_loader).next()\n", "plot_tensor(gauss, (size, size), vmin=-1, vmax=1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "from pylissom.nn.modules.lissom import *\n", "from pylissom.nn.modules import register_recursive_forward_hook, input_output_hook\n", "\n", "register_recursive_forward_hook(lissom, input_output_hook)\n", "inp = Pipeline.process_input(torch.autograd.Variable(gauss))\n", "out = lissom(inp)\n", "plot_layer_activation(lissom, 'lissom')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we do the actual training, passing the stimuli as argument" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pipe.train(train_loader, epoch=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculate Orientations Maps\n", "In the next cells we calculate the prefered orientation for each neuron in V1, and plot it with a color encoding. For example, a red color mark a neuron that activates more strongly with horizontal oriented gaussians." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from pylissom.utils.orientation_maps import *\n", "orientations = 180\n", "\n", "keys_arrays = get_oriented_lines(size, orientations=orientations)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "keys_arrays = {k: map(lambda l: torch.autograd.Variable(l.cuda()), lines) for k, lines in keys_arrays.items()}" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "om = OrientationMap(model=lissom, inputs=keys_arrays)\n", "\n", "orientation_map = om.get_orientation_map()\n", "orientation_hist = om.get_orientation_hist()" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_orientation_map(orientation_map)\n", "plt.colorbar()\n", "plt.show()" ] } ], "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.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }