{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# STDP - single synapse\n", "\n", "[![Download JupyterNotebook](https://img.shields.io/badge/Download-Notebook-orange?style=for-the-badge&logo=Jupyter)](https://raw.githubusercontent.com/ANNarchy/ANNarchy.github.io/master/notebooks/STDP1.ipynb) [![Download JupyterNotebook](https://img.shields.io/badge/Open_in-Colab-blue?style=for-the-badge&logo=Jupyter)](https://colab.research.google.com/github/ANNarchy/ANNarchy.github.io/blob/master/notebooks/STDP1.ipynb)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#!pip install ANNarchy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook demonstrates the online implementation of the spike time-dependent plasticity (STDP) rule for a pair of neurons." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ANNarchy 4.8 (4.8.2) on darwin (posix).\n" ] } ], "source": [ "import numpy as np\n", "import ANNarchy as ann\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The STDP learning rule maintains exponentially-decaying traces for the pre-synaptic and post-synaptic spikes.\n", "\n", "$$\\tau^+ \\, \\frac{d x(t)}{dt} = -x (t)$$\n", "\n", "$$\\tau^- \\, \\frac{d y(t)}{dt} = -x (t)$$\n", "\n", "LTP and LTD occur at spike times depending on the corresponding traces.\n", "\n", "* When a pre-synaptic spike occurs, $x(t)$ is incremented and **LTD** is applied proportionally to $y(t)$.\n", "* When a post-synaptic spike occurs, $y(t)$ is incremented and **LTP** is applied proportionally to $x(t)$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "STDP = ann.Synapse(\n", " parameters = \"\"\"\n", " tau_plus = 20.0 : projection ; tau_minus = 20.0 : projection\n", " A_plus = 0.01 : projection ; A_minus = 0.01 : projection\n", " w_min = 0.0 : projection ; w_max = 2.0 : projection\n", " \"\"\",\n", " equations = \"\"\"\n", " \n", " tau_plus * dx/dt = -x : event-driven # pre-synaptic trace\n", " \n", " tau_minus * dy/dt = -y : event-driven # post-synaptic trace\n", " \n", " \"\"\",\n", " pre_spike=\"\"\"\n", " \n", " g_target += w\n", " \n", " x += A_plus * w_max\n", " \n", " w = clip(w - y, w_min , w_max) # LTD\n", " \"\"\",\n", " post_spike=\"\"\"\n", " \n", " y += A_minus * w_max\n", " \n", " w = clip(w + x, w_min , w_max) # LTP\n", " \"\"\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We create two dummy populations with one neuron each, whose spike times we can control." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "pre = ann.SpikeSourceArray([[0.]])\n", "post = ann.SpikeSourceArray([[50.]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We connect the population using a STDP synapse." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "proj = ann.Projection(pre, post, 'exc', STDP)\n", "proj.connect_all_to_all(1.0)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Compiling ... OK \n" ] } ], "source": [ "ann.compile()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The presynaptic neuron will fire at avrious times between 0 and 100 ms, while the postsynaptic neuron keeps firing at 50 ms." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "pre_times = np.linspace(100.0, 0.0, 101)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "weight_changes = []\n", "for t_pre in pre_times:\n", " \n", " # Reset the populations\n", " pre.clear()\n", " post.clear()\n", " pre.spike_times = [[t_pre]]\n", " post.spike_times = [[50.0]]\n", " \n", " # Reset the traces\n", " proj.x = 0.0\n", " proj.y = 0.0\n", " \n", " # Weight before the simulation\n", " w_before = proj[0].w[0]\n", " \n", " # Simulate long enough\n", " ann.simulate(105.0)\n", " \n", " # Record weight change\n", " delta_w = proj[0].w[0] - w_before\n", " weight_changes.append(delta_w)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now plot the classical STDP figure:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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AAAAAECdViVr9957r772ta9p7ty5uv766zVs2LD2jgsAAAAAQlqrkrXTp083a9zy5ct17733Kjo6ujW/BgAAAABCVqsajDTXY489ppKSko78FQAAAAAQlDo0WWtj7xIAAAAACFkdmqwBAAAAAFqHZA0AAAAA/BDJGgAAAAD4IZI1AAAAAPBDHZqsffWrX1XXrl078lcAAAAAQFBq1T5rlzp//ryqqqp8zkVFRUmSNm3a1NbbAwAAAEBIalVl7dy5c5o3b5569eqlyMhIde/e3efVkZ555hn1799fERERGjNmjPbs2dPk+HXr1mnQoEGKiIjQsGHD6iWQpmnqkUceUXx8vLp27arU1FT961//8hlTUlKimTNnKioqStHR0ZozZ44qKira/dkAAAAAwKNVydoPf/hDbdu2Tb/97W/lcDj0u9/9To8++qj69OmjF198sb1j9Fq7dq2ysrK0ZMkS5efn67rrrlNaWppOnz7d4PidO3dqxowZmjNnjvbt26f09HSlp6fr0KFD3jGPP/64nnrqKa1atUq7d+9WZGSk0tLSdP78ee+YmTNn6r333tOWLVu0ceNGvfXWW5o7d26HPScAAAAAGGYrdq7u16+fXnzxRU2cOFFRUVHKz8/X1VdfrT/96U/685//3GHTH8eMGaNRo0bp6aefliTV1tYqMTFR8+fP16JFi+qNz8jIkNvt1saNG73nxo4dq6SkJK1atUqmaapPnz5auHChHnjgAUlSWVmZevfureeff17Tp0/X4cOHNWTIEO3du1cjR46UJG3evFk333yzCgoK1KdPn2bFXl5eLpfLpbKyMu80UQBA6HC73XI6nZKkiooKRUZGWhwRAMAqzc0NWrVmraSkRFdddZWkuvVpJSUlkqQJEybo+9//fmtueVlVVVXKy8vT4sWLvedsNptSU1OVm5vb4DW5ubnKysryOZeWlqacnBxJ0kcffaSioiKlpqZ6P3e5XBozZoxyc3M1ffp05ebmKjo62puoSVJqaqpsNpt2796t2267rR2fsuOZpqlz585ZHQYAhBy3293gewBA5+nWrZsMw7A6jGZrVbJ21VVX6aOPPlK/fv00aNAg/eUvf9Ho0aO1YcMGRUdHt3OIdT7++GPV1NSod+/ePud79+6tI0eONHhNUVFRg+OLioq8n3vONTWmV69ePp+Hh4erR48e3jENqays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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 8))\n", "plt.plot(50. - pre_times, weight_changes, \"*\")\n", "plt.plot([-50, 50], [0, 0], 'k')\n", "plt.plot([0, 0], [min(weight_changes), max(weight_changes)], 'k')\n", "plt.xlabel(\"t_post - t_pre\")\n", "plt.ylabel(\"delta_w\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.13.0" } }, "nbformat": 4, "nbformat_minor": 4 }