diff --git a/examples/legacy/Alpha_neuron_training_example.ipynb b/examples/legacy/Alpha_neuron_training_example.ipynb
deleted file mode 100644
index 56141d34..00000000
--- a/examples/legacy/Alpha_neuron_training_example.ipynb
+++ /dev/null
@@ -1,343 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "0rklDqluPYZB"
- },
- "source": [
- "## Example of training using the Alpha Neuron"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "ptd12vmR7H8D",
- "outputId": "79499811-cc47-4470-f190-f3a8581df051"
- },
- "outputs": [],
- "source": [
- "# !git clone -b alpha_neuron --single-branch https://github.com/jeshraghian/snntorch.git\n",
- "!pip install snntorch"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "5VNVo64L93Zo",
- "outputId": "69255447-8261-4119-f851-066c05ea510c"
- },
- "outputs": [],
- "source": [
- "# %cd snntorch\n",
- "import snntorch as snn"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "CEUipC6UPebM"
- },
- "source": [
- "## Import Packages"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "AQeg7QZ69fSt"
- },
- "outputs": [],
- "source": [
- "import snntorch as snn\n",
- "import torch\n",
- "import torch.nn as nn\n",
- "from torch.utils.data import DataLoader\n",
- "from torchvision import datasets, transforms\n",
- "import numpy as np\n",
- "import itertools\n",
- "import matplotlib.pyplot as plt"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "0OEdE6bEPf20"
- },
- "source": [
- "## Define Network and Parameters"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "MHmCvayV7LJR"
- },
- "outputs": [],
- "source": [
- "# test alpha neuron: can it learn?\n",
- "\n",
- "num_inputs = 28*28\n",
- "num_hidden = 1000\n",
- "num_outputs = 10\n",
- "\n",
- "# Training Parameters\n",
- "batch_size=128\n",
- "data_path='/tmp/data/mnist'\n",
- "\n",
- "# Temporal Dynamics\n",
- "num_steps = 25\n",
- "alpha = 0.9\n",
- "beta = 0.8\n",
- "\n",
- "dtype = torch.float\n",
- "device = torch.device(\"cuda\") if torch.cuda.is_available() else torch.device(\"mps\") if torch.backends.mps.is_available() else torch.device(\"cpu\")\n",
- "\n",
- "# Define Network\n",
- "class Net(nn.Module):\n",
- " def __init__(self):\n",
- " super().__init__()\n",
- " \n",
- " # initialize layers\n",
- " self.fc1 = nn.Linear(num_inputs, num_hidden)\n",
- " self.lif1 = snn.Alpha(alpha=alpha, beta=beta)\n",
- " self.fc2 = nn.Linear(num_hidden, num_outputs)\n",
- " self.lif2 = snn.Alpha(alpha=alpha, beta=beta)\n",
- "\n",
- "\n",
- " def forward(self, x):\n",
- " spk1, syn_exc1, syn_inh1, mem1 = self.lif1.init_alpha(batch_size, num_hidden)\n",
- " spk2, syn_exc2, syn_inh2, mem2 = self.lif2.init_alpha(batch_size, num_outputs)\n",
- "\n",
- " # Record the final layer\n",
- " spk2_rec = []\n",
- " mem2_rec = []\n",
- "\n",
- " for step in range(num_steps):\n",
- "\n",
- " cur1 = self.fc1(x)\n",
- " spk1, syn_exc1, syn_inh1, mem1 = self.lif1(cur1, syn_exc1, syn_inh1, mem1)\n",
- " cur2 = self.fc2(spk1)\n",
- " spk2, syn_exc2, syn_inh2, mem2 = self.lif2(cur2, syn_exc2, syn_inh2, mem2)\n",
- "\n",
- " spk2_rec.append(spk2)\n",
- " mem2_rec.append(mem2)\n",
- "\n",
- " return torch.stack(spk2_rec, dim=0), torch.stack(mem2_rec, dim=0)\n",
- " \n",
- "net = Net().to(device)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "2N00-2eDPl2G"
- },
- "source": [
- "## dataloaders"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "NblLifHj9qO-",
- "outputId": "e890995e-a9fd-490d-f278-caf6bce9c21e"
- },
- "outputs": [],
- "source": [
- "# Define a transform\n",
- "transform = transforms.Compose([\n",
- " transforms.Resize((28, 28)),\n",
- " transforms.Grayscale(),\n",
- " transforms.ToTensor(),\n",
- " transforms.Normalize((0,), (1,))])\n",
- "\n",
- "mnist_train = datasets.MNIST(data_path, train=True, download=True, transform=transform)\n",
- "mnist_test = datasets.MNIST(data_path, train=False, download=True, transform=transform)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "kx8nATF69tEk"
- },
- "outputs": [],
- "source": [
- "# Create DataLoaders\n",
- "train_loader = DataLoader(mnist_train, batch_size=batch_size, shuffle=True, drop_last=True)\n",
- "test_loader = DataLoader(mnist_test, batch_size=batch_size, shuffle=True, drop_last=True)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "gqDmeDJcP_HL"
- },
- "source": [
- "## Print Accuracy Function"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "EJYEQpHk-MzX"
- },
- "outputs": [],
- "source": [
- "def print_batch_accuracy(data, targets, train=False):\n",
- " with torch.no_grad():\n",
- " output, _ = net(data.view(batch_size, -1))\n",
- " _, idx = output.sum(dim=0).max(1)\n",
- " acc = np.mean((targets == idx).detach().cpu().numpy())\n",
- "\n",
- " if train:\n",
- " print(f\"Train Set Accuracy: {acc}\")\n",
- " else:\n",
- " print(f\"Test Set Accuracy: {acc}\")\n",
- "\n",
- "def train_printer():\n",
- " print(f\"Epoch {epoch}, Minibatch {minibatch_counter}\")\n",
- " print(f\"Train Set Loss: {loss_hist[counter]}\")\n",
- " print(f\"Test Set Loss: {test_loss_hist[counter]}\")\n",
- " print_batch_accuracy(data_it, targets_it, train=True)\n",
- " print_batch_accuracy(testdata_it, testtargets_it, train=False)\n",
- " print(\"\\n\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "m2Zz5xesQBBk"
- },
- "source": [
- "## Define Loss & Optimizer"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "4Uwvn33m-OuY"
- },
- "outputs": [],
- "source": [
- "optimizer = torch.optim.Adam(net.parameters(), lr=2e-4, betas=(0.9, 0.999))\n",
- "log_softmax_fn = nn.LogSoftmax(dim=-1)\n",
- "loss_fn = nn.NLLLoss()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "wY-94aYrQCXE"
- },
- "source": [
- "## Training Loop"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 1000
- },
- "id": "hQvfXduS-QmB",
- "outputId": "7ec1f1dc-ce3f-4834-f601-9b5c34245225"
- },
- "outputs": [],
- "source": [
- "loss_hist = []\n",
- "test_loss_hist = []\n",
- "counter = 0\n",
- "\n",
- "# Outer training loop\n",
- "for epoch in range(10):\n",
- " minibatch_counter = 0\n",
- " train_batch = iter(train_loader)\n",
- "\n",
- " # Minibatch training loop\n",
- " for data_it, targets_it in train_batch:\n",
- " data_it = data_it.to(device)\n",
- " targets_it = targets_it.to(device)\n",
- "\n",
- " spk_rec, mem_rec = net(data_it.view(batch_size, -1))\n",
- " log_p_y = log_softmax_fn(mem_rec)\n",
- " loss_val = torch.zeros((1), dtype=dtype, device=device)\n",
- "\n",
- " # Sum loss over time steps: BPTT\n",
- " for step in range(num_steps):\n",
- " loss_val += loss_fn(log_p_y[step], targets_it)\n",
- "\n",
- " # Gradient calculation\n",
- " optimizer.zero_grad()\n",
- " loss_val.backward()\n",
- "\n",
- " # Weight Update\n",
- " optimizer.step()\n",
- "\n",
- " # Store loss history for future plotting\n",
- " loss_hist.append(loss_val.item())\n",
- "\n",
- " # Test set\n",
- " test_data = itertools.cycle(test_loader)\n",
- " testdata_it, testtargets_it = next(test_data)\n",
- " testdata_it = testdata_it.to(device)\n",
- " testtargets_it = testtargets_it.to(device)\n",
- "\n",
- " # Test set forward pass\n",
- " with torch.no_grad():\n",
- " test_spk, test_mem = net(testdata_it.view(batch_size, -1))\n",
- "\n",
- " # Test set loss\n",
- " log_p_ytest = log_softmax_fn(test_mem)\n",
- " log_p_ytest = log_p_ytest.sum(dim=0)\n",
- " loss_val_test = loss_fn(log_p_ytest, testtargets_it)\n",
- " test_loss_hist.append(loss_val_test.item())\n",
- "\n",
- " # Print test/train loss/accuracy\n",
- " if counter % 50 == 0:\n",
- " train_printer()\n",
- " minibatch_counter += 1\n",
- " counter += 1\n",
- "\n",
- "loss_hist_true_grad = loss_hist\n",
- "test_loss_hist_true_grad = test_loss_hist"
- ]
- }
- ],
- "metadata": {
- "accelerator": "GPU",
- "colab": {
- "collapsed_sections": [],
- "name": "Alpha_code_example.ipynb",
- "provenance": []
- },
- "kernelspec": {
- "display_name": "Python 3",
- "name": "python3"
- },
- "language_info": {
- "name": "python"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
diff --git a/examples/legacy/CIFAR_temp.ipynb b/examples/legacy/CIFAR_temp.ipynb
deleted file mode 100644
index e86b4176..00000000
--- a/examples/legacy/CIFAR_temp.ipynb
+++ /dev/null
@@ -1,2857 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "rtrNT4NPRp7r",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "\n",
- "\n",
- "# snnTorch - Gradient-based Learning in Spiking Neural Networks\n",
- "## Tutorial 2\n",
- "### By Jason K. Eshraghian\n",
- "\n",
- "\n",
- " \n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "TKy-qDQdRp73"
- },
- "source": [
- "# Introduction\n",
- "In this tutorial, you will learn how to use snnTorch to:\n",
- "* create a 2-layer fully-connected spiking network;\n",
- "* implement the backpropagation through time (BPTT) algorithm;\n",
- "* to classify both the static and spiking MNIST datasets.\n",
- "\n",
- "If running in Google Colab:\n",
- "* You may connect to GPU by checking `Runtime` > `Change runtime type` > `Hardware accelerator: GPU`\n",
- "* Next, install the latest PyPi distribution of snnTorch by clicking into the following cell and pressing `Shift+Enter`."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 0
- },
- "id": "BgBRVUtpRp74",
- "outputId": "61c32ebb-e69b-4d44-852b-0bf58481a9d1",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Requirement already satisfied: snntorch in /usr/local/lib/python3.7/dist-packages (0.2.7)\n",
- "Requirement already satisfied: pandas in /usr/local/lib/python3.7/dist-packages (from snntorch) (1.1.5)\n",
- "Requirement already satisfied: torch>=1.2.0 in /usr/local/lib/python3.7/dist-packages (from snntorch) (1.8.0+cu101)\n",
- "Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from snntorch) (3.2.2)\n",
- "Requirement already satisfied: celluloid in /usr/local/lib/python3.7/dist-packages (from snntorch) (0.2.0)\n",
- "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.7/dist-packages (from snntorch) (1.19.5)\n",
- "Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas->snntorch) (2018.9)\n",
- "Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas->snntorch) (2.8.1)\n",
- "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from torch>=1.2.0->snntorch) (3.7.4.3)\n",
- "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->snntorch) (1.3.1)\n",
- "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->snntorch) (0.10.0)\n",
- "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->snntorch) (2.4.7)\n",
- "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.7.3->pandas->snntorch) (1.15.0)\n"
- ]
- }
- ],
- "source": [
- "!pip install snntorch"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "Zm-D2lthRp75",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "## 1. Setting up the Static MNIST Dataset\n",
- "### 1.1. Import packages and setup environment"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "id": "sEygpdc8Rp76",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "import snntorch as snn\n",
- "import torch\n",
- "import torch.nn as nn\n",
- "from torch.utils.data import DataLoader\n",
- "from torchvision import datasets, transforms\n",
- "import numpy as np\n",
- "import itertools\n",
- "import matplotlib.pyplot as plt"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "RcX7J9vVRp76"
- },
- "source": [
- "### 1.2 Define network and SNN parameters\n",
- "We will use a 784-1000-10 FCN architecture for a sequence of 25 time steps.\n",
- "\n",
- "* `alpha` is the decay rate of the synaptic current of a neuron\n",
- "* `beta` is the decay rate of the membrane potential of a neuron"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "id": "bKEj2hucRp77",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "# Network Architecture\n",
- "num_inputs = 32*32\n",
- "num_hidden = 1000\n",
- "num_outputs = 10\n",
- "\n",
- "# Training Parameters\n",
- "batch_size=128\n",
- "data_path='/tmp/data/mnist'\n",
- "\n",
- "# Temporal Dynamics\n",
- "num_steps = 25\n",
- "time_step = 1e-3\n",
- "tau_mem = 3e-3\n",
- "tau_syn = 2.2e-3\n",
- "alpha = float(np.exp(-time_step/tau_syn))\n",
- "beta = float(np.exp(-time_step/tau_mem))\n",
- "\n",
- "dtype = torch.float\n",
- "device = torch.device(\"cuda\") if torch.cuda.is_available() else torch.device("mps") if torch.backends.mps.is_available() else torch.device(\"cpu\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {
- "id": "agBKaYiIQxbS"
- },
- "outputs": [],
- "source": [
- "alpha = 0.8\n",
- "beta = 0.9"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "gM_hcwDIRp78",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "### 1.3 Download MNIST Dataset\n",
- "To see how to construct a validation set, refer to Tutorial 1."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 120,
- "referenced_widgets": [
- "feb965fc6abb4ee9bc9dbb5ef3b9723c",
- "1a99d740897c4ea09c6f33ce3a4a3230",
- "82d6d6dfb0c845ec99c25f57e6c5d9d2",
- "c03ab1b2c81149feb0c1551831a6a909",
- "f74b5621630e458aa55562f4ae2f36f8",
- "f999b8f0ade1483c83e5c2f047bad551",
- "e2f3ff56de4e424bb8e2f09a9976bf5b",
- "fe66ac83ad074efbbc802309b16e08a3"
- ]
- },
- "id": "0xwYb15xRp79",
- "outputId": "fd8cb868-a8c3-45a1-a43a-4aad7992884a",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to /data/mnist/cifar-10-python.tar.gz\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "feb965fc6abb4ee9bc9dbb5ef3b9723c",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "HBox(children=(FloatProgress(value=0.0, max=170498071.0), HTML(value='')))"
- ]
- },
- "metadata": {
- "tags": []
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "Extracting /data/mnist/cifar-10-python.tar.gz to /data/mnist\n",
- "Files already downloaded and verified\n"
- ]
- }
- ],
- "source": [
- "# Define a transform\n",
- "transform = transforms.Compose([\n",
- " transforms.Grayscale(),\n",
- " transforms.Resize((32, 32)),\n",
- " transforms.ToTensor(),\n",
- " transforms.Normalize((0,), (1,))])\n",
- "\n",
- "mnist_train = datasets.CIFAR10(data_path, train=True, download=True, transform=transform)\n",
- "mnist_test = datasets.CIFAR10(data_path, train=False, download=True, transform=transform)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "DIg3vLmURp7-",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "### 1.4 Create DataLoaders"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "id": "K4DF-odMRp7_",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "train_loader = DataLoader(mnist_train, batch_size=batch_size, shuffle=True, drop_last=True)\n",
- "test_loader = DataLoader(mnist_test, batch_size=batch_size, shuffle=True, drop_last=True)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "pD4Dw-RoRp7_",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "## 2. Define Network\n",
- "snnTorch treats neurons as activations with recurrent connections. This allows for smooth integration with PyTorch.\n",
- "There are a few useful neuron models and surrogate gradient functions which approximate the gradient of spikes.\n",
- "\n",
- "Our network will use one type of neuron model and one surrogate gradient:\n",
- "1. `snntorch.Stein` is a basic leaky integrate and fire (LIF) neuron. Specifically, it assumes instantaneous rise times for synaptic current and membrane potential.\n",
- "2. `snntorch.FastSigmoidSurrogate` defines separate forward and backward functions. The forward function is a Heaviside step function for spike generation. The backward function is the derivative of a fast sigmoid function, to ensure continuous differentiability.\n",
- "The `FastSigmoidSurrogate` function has been adapted from:\n",
- "\n",
- ">Neftci, E. O., Mostafa, H., and Zenke, F. (2019) Surrogate Gradient Learning in Spiking Neural Networks. https://arxiv.org/abs/1901/09948"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "id": "Sf9RdE9jRp8A",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "# from snntorch import surrogate\n",
- "#\n",
- "# spike_grad = surrogate.FastSigmoid.apply\n",
- "# snn.slope = 50"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "Og9e57W0Rp8B",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "The surrogate is passed to `spike_grad` and overrides the default gradient of the Heaviside step function.\n",
- "If we did not override the default gradient, (zero everywhere, except for $x=1$ where it is technically infinite but clipped to 1 here), then learning would not take place for as long as the neuron was not emitting post-synaptic spikes.\n",
- "\n",
- "`snn.slope` defines the slope of the backward surrogate.\n",
- "\n",
- "TO-DO: Include visualisation."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "Yo-x48mARp8C",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "Now we can define our spiking neural network (SNN).\n",
- "Creating an instance of the `Stein` neuron requires two arguments and two optional arguments:\n",
- "1. $I_{syn}$ decay rate, $\\alpha$,\n",
- "2. $V_{mem}$ decay rate, $\\beta$,\n",
- "3. the surrogate spiking function, `spike_grad` (*default*: the gradient of the Heaviside function), and\n",
- "4. the threshold for spiking, (*default*: 1.0).\n",
- "\n",
- "snnTorch treats the LIF neuron as a recurrent activation. Therefore, it requires initialization of its internal states.\n",
- "For each layer, we initialize the synaptic current `syn1` and `syn2`, the membrane potential `mem1` and `mem2`, and the post-synaptic spikes `spk1` and `spk2` to zero.\n",
- "A class method `init_stein` will take care of this.\n",
- "\n",
- "For rate coding, the final layer of spikes and membrane potential are used to determine accuracy and loss, respectively.\n",
- "So their historical values are recorded in `spk2_rec` and `mem2_rec`.\n",
- "\n",
- "Keep in mind, the dataset we are using is just static MNIST. I.e., it is *not* time-varying.\n",
- "Therefore, we pass the same MNIST sample to the input at each time step.\n",
- "This is handled in the line `cur1 = self.fc1(x)`, where `x` is the same input over the whole for-loop."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {
- "id": "P6RHCnXMRp8D",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "# Define Network\n",
- "class Net(nn.Module):\n",
- " def __init__(self):\n",
- " super().__init__()\n",
- "\n",
- " # initialize layers\n",
- " self.fc1 = nn.Linear(num_inputs, num_hidden)\n",
- " self.lif1 = snn.Stein(alpha=alpha, beta=beta)\n",
- " self.fc2 = nn.Linear(num_hidden, num_outputs)\n",
- " self.lif2 = snn.Stein(alpha=alpha, beta=beta)\n",
- "\n",
- " def forward(self, x):\n",
- " spk1, syn1, mem1 = self.lif1.init_stein(batch_size, num_hidden)\n",
- " spk2, syn2, mem2 = self.lif2.init_stein(batch_size, num_outputs)\n",
- "\n",
- " spk2_rec = []\n",
- " mem2_rec = []\n",
- "\n",
- " for step in range(num_steps):\n",
- " cur1 = self.fc1(x)\n",
- " spk1, syn1, mem1 = self.lif1(cur1, syn1, mem1)\n",
- " cur2 = self.fc2(spk1)\n",
- " spk2, syn2, mem2 = self.lif2(cur2, syn2, mem2)\n",
- "\n",
- " spk2_rec.append(spk2)\n",
- " mem2_rec.append(mem2)\n",
- "\n",
- " return torch.stack(spk2_rec, dim=0), torch.stack(mem2_rec, dim=0)\n",
- "\n",
- "net = Net().to(device)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "386KNHG7Rp8E",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "## 3. Training\n",
- "Time for training! Let's first define a couple of functions to print out test/train accuracy."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {
- "id": "cOKKbUnDRp8F",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "def print_batch_accuracy(data, targets, train=False):\n",
- " output, _ = net(data.view(batch_size, -1))\n",
- " _, idx = output.sum(dim=0).max(1)\n",
- " acc = np.mean((targets == idx).detach().cpu().numpy())\n",
- "\n",
- " if train:\n",
- " print(f\"Train Set Accuracy: {acc}\")\n",
- " else:\n",
- " print(f\"Test Set Accuracy: {acc}\")\n",
- "\n",
- "def train_printer():\n",
- " print(f\"Epoch {epoch}, Minibatch {minibatch_counter}\")\n",
- " print(f\"Train Set Loss: {loss_hist[counter]}\")\n",
- " print(f\"Test Set Loss: {test_loss_hist[counter]}\")\n",
- " print_batch_accuracy(data_it, targets_it, train=True)\n",
- " print_batch_accuracy(testdata_it, testtargets_it, train=False)\n",
- " print(\"\\n\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "mZqfCe0KRp8J",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "### 3.1 Optimizer & Loss\n",
- "* *Output Activation*: We'll apply the softmax function to the membrane potentials of the output layer, rather than the spikes.\n",
- "* *Loss*: This will then be used to calculate the negative log-likelihood loss.\n",
- "By encouraging the membrane of the correct neuron class to reach the threshold, we expect that neuron will fire more frequently.\n",
- "The loss could be applied to the spike count as well, but the membrane is continuous whereas spike count is discrete.\n",
- "* *Optimizer*: The Adam optimizer is used for weight updates.\n",
- "* *Accuracy*: Accuracy is measured by counting the spikes of the output neurons. The neuron that fires the most frequently will be our predicted class."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {
- "id": "UMZ-4uGlRp8K",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "optimizer = torch.optim.Adam(net.parameters(), lr=2e-4, betas=(0.9, 0.999))\n",
- "log_softmax_fn = nn.LogSoftmax(dim=-1)\n",
- "loss_fn = nn.NLLLoss()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "UerqLkd1Rp8K",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "### 3.2 Training Loop\n",
- "Now just sit back, relax, and wait for convergence."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 1000
- },
- "id": "76CEHI2xRp8L",
- "outputId": "e29c7e0e-4504-4d08-fdcf-70ab371b0996",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 2, Minibatch 70\n",
- "Train Set Loss: 53.006282806396484\n",
- "Test Set Loss: 55.81739807128906\n",
- "Train Set Accuracy: 0.2265625\n",
- "Test Set Accuracy: 0.21875\n",
- "\n",
- "\n",
- "Epoch 2, Minibatch 120\n",
- "Train Set Loss: 50.85497283935547\n",
- "Test Set Loss: 50.894222259521484\n",
- "Train Set Accuracy: 0.265625\n",
- "Test Set Accuracy: 0.3125\n",
- "\n",
- "\n",
- "Epoch 2, Minibatch 170\n",
- "Train Set Loss: 49.45563507080078\n",
- "Test Set Loss: 50.29939651489258\n",
- "Train Set Accuracy: 0.3671875\n",
- "Test Set Accuracy: 0.2578125\n",
- "\n",
- "\n",
- "Epoch 2, Minibatch 220\n",
- "Train Set Loss: 52.987083435058594\n",
- "Test Set Loss: 51.679054260253906\n",
- "Train Set Accuracy: 0.2109375\n",
- "Test Set Accuracy: 0.234375\n",
- "\n",
- "\n",
- "Epoch 2, Minibatch 270\n",
- "Train Set Loss: 49.68134307861328\n",
- "Test Set Loss: 52.56451416015625\n",
- "Train Set Accuracy: 0.3359375\n",
- "Test Set Accuracy: 0.234375\n",
- "\n",
- "\n",
- "Epoch 2, Minibatch 320\n",
- "Train Set Loss: 54.24823760986328\n",
- "Test Set Loss: 51.5257682800293\n",
- "Train Set Accuracy: 0.25\n",
- "Test Set Accuracy: 0.25\n",
- "\n",
- "\n",
- "Epoch 2, Minibatch 370\n",
- "Train Set Loss: 50.897029876708984\n",
- "Test Set Loss: 49.811622619628906\n",
- "Train Set Accuracy: 0.2890625\n",
- "Test Set Accuracy: 0.34375\n",
- "\n",
- "\n"
- ]
- },
- {
- "ename": "KeyboardInterrupt",
- "evalue": "ignored",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
- "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;31m# Gradient calculation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzero_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 25\u001b[0;31m \u001b[0mloss_val\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mretain_graph\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 26\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[0;31m# Weight Update\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/tensor.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[1;32m 243\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 244\u001b[0m inputs=inputs)\n\u001b[0;32m--> 245\u001b[0;31m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mautograd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgradient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 246\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 247\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mregister_hook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/autograd/__init__.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[1;32m 145\u001b[0m Variable._execution_engine.run_backward(\n\u001b[1;32m 146\u001b[0m \u001b[0mtensors\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgrad_tensors_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 147\u001b[0;31m allow_unreachable=True, accumulate_grad=True) # allow_unreachable flag\n\u001b[0m\u001b[1;32m 148\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 149\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
- ]
- }
- ],
- "source": [
- "loss_hist = []\n",
- "test_loss_hist = []\n",
- "counter = 0\n",
- "\n",
- "# Outer training loop\n",
- "for epoch in range(3):\n",
- " minibatch_counter = 0\n",
- " train_batch = iter(train_loader)\n",
- "\n",
- " # Minibatch training loop\n",
- " for data_it, targets_it in train_batch:\n",
- " data_it = data_it.to(device)\n",
- " targets_it = targets_it.to(device)\n",
- "\n",
- " output, mem_rec = net(data_it.view(batch_size, -1))\n",
- " log_p_y = log_softmax_fn(mem_rec)\n",
- " loss_val = torch.zeros((1), dtype=dtype, device=device)\n",
- "\n",
- " # Sum loss over time steps: BPTT\n",
- " for step in range(num_steps):\n",
- " loss_val += loss_fn(log_p_y[step], targets_it)\n",
- "\n",
- " # Gradient calculation\n",
- " optimizer.zero_grad()\n",
- " loss_val.backward(retain_graph=True)\n",
- "\n",
- " # Weight Update\n",
- " nn.utils.clip_grad_norm_(net.parameters(), 1) # gradient clipping\n",
- " optimizer.step()\n",
- "\n",
- " # Store loss history for future plotting\n",
- " loss_hist.append(loss_val.item())\n",
- "\n",
- " # Test set\n",
- " test_data = itertools.cycle(test_loader)\n",
- " testdata_it, testtargets_it = next(test_data)\n",
- " testdata_it = testdata_it.to(device)\n",
- " testtargets_it = testtargets_it.to(device)\n",
- "\n",
- " # Test set forward pass\n",
- " test_output, test_mem_rec = net(testdata_it.view(batch_size, -1))\n",
- "\n",
- " # Test set loss\n",
- " log_p_ytest = log_softmax_fn(test_mem_rec)\n",
- " log_p_ytest = log_p_ytest.sum(dim=0)\n",
- " loss_val_test = loss_fn(log_p_ytest, testtargets_it)\n",
- " test_loss_hist.append(loss_val_test.item())\n",
- "\n",
- " # Print test/train loss/accuracy\n",
- " if counter % 50 == 0:\n",
- " train_printer()\n",
- " minibatch_counter += 1\n",
- " counter += 1\n",
- "\n",
- "loss_hist_true_grad = loss_hist\n",
- "test_loss_hist_true_grad = test_loss_hist"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": false,
- "id": "fdOuwCWHRp8L",
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- "## 4. Results\n",
- "### 4.1 Plot Training/Test Loss"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 334
- },
- "id": "WJGSBq6zRp8M",
- "outputId": "9c224143-2579-4708-88a8-e645e32ce289",
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAl4AAAE9CAYAAADaqWzvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydeZgU1fm2n6rq7hlWFURFMCJGI4gIEcF9/VQU9xB/xiW472LUSDQGQ4yJJEZUUEGigsEVURZZ3EBkFRxg2Pd9gBmGgdmnp7ur6vuj6lSdqjrVXd0zPTPAe18XFz1d26mlz3nq3Y6k67oOgiAIgiAIIuvIjd0AgiAIgiCIwwUSXgRBEARBEA0ECS+CIAiCIIgGgoQXQRAEQRBEA0HCiyAIgiAIooEg4UUQBEEQBNFAhBq7AUE4+uij0alTp8ZuBkEQBEEQREq2bduGffv2CZcdFMKrU6dOyMvLa+xmEARBEARBpKRXr16+y8jVSBAEQRAE0UCQ8CIIgiAIgmggSHgRBEEQBEE0EAdFjBdBEARBEHUnHo+joKAA0Wi0sZtySJCbm4uOHTsiHA4H3oaEF0EQBEEcJhQUFKBVq1bo1KkTJElq7OYc1Oi6jpKSEhQUFOCkk04KvB25GgmCIAjiMCEajaJt27YkuuoBSZLQtm3btK2HJLwIgiAI4jCCRFf9kcm1JFcjQRAEQRANQklJCS6//HIAQGFhIRRFQbt27QAAixcvRiQSSbr97NmzEYlEcN5553mWjR07Fnl5eXjzzTfrv+H1CAkvgiAIgiAahLZt2yI/Px8AMGTIELRs2RJ//OMfA28/e/ZstGzZUii8DhbI1QhgfWEFPl60A7GE1thNIQiCIIjDiiVLluDiiy/GWWedhauuugp79uwBAAwfPhxdu3ZF9+7dceutt2Lbtm0YNWoUXnvtNfTo0QNz584NtP9hw4ahW7du6NatG15//XUAQFVVFfr164czzzwT3bp1w2effQYAePbZZ61jpiMI04EsXgDmb9qHF6euQb8z2iMSIi1KEARBEA2Brut4/PHHMXnyZLRr1w6fffYZnn/+ebz//vsYOnQotm7dipycHJSWluLII4/EQw89lJaVbMmSJRgzZgwWLVoEXdfRp08fXHzxxdiyZQuOP/54TJs2DQBQVlaGkpISTJw4EevWrYMkSSgtLc3KOZPwAqDIRnBcQiOLF0EQBHF48LevVmPN7vJ63WfX41vjr9edHnj92tparFq1CldccQUAQFVVtG/fHgDQvXt33H777bjxxhtx4403ZtSeefPm4aabbkKLFi0AADfffDPmzp2Lvn374umnn8af/vQnXHvttbjwwguRSCSQm5uLe++9F9deey2uvfbajI6ZCjLvwBZeqq43cksIgiAI4vBB13WcfvrpyM/PR35+PlauXIlvv/0WADBt2jQ8+uijWLp0Kc4++2wkEol6O+6pp56KpUuX4owzzsBf/vIXvPjiiwiFQli8eDH69++PqVOnom/fvvV2PB6yeIETXhoJL4IgCOLwIB3LVLbIyclBcXExFi5ciHPPPRfxeBwbNmxAly5dsHPnTlx66aW44IIL8Omnn6KyshKtWrVCeXlwK92FF16Iu+66C88++yx0XcfEiRMxbtw47N69G23atMEdd9yBI488Eu+++y4qKytRXV2Na665Bueffz46d+6clXMm4QXO1aiS8CIIgiCIhkKWZUyYMAEDBw5EWVkZEokE/vCHP+DUU0/FHXfcgbKyMui6joEDB+LII4/Eddddh/79+2Py5MkYMWIELrzwQsf+xo4di0mTJll///TTT7jrrrvQu3dvAMB9992Hnj174ptvvsEzzzwDWZYRDocxcuRIVFRU4IYbbkA0GoWu6xg2bFhWzlnS9abvX+vVqxfy8vKytv8vlxbgqfHL8eMzl+DEti2ydhyCIAiCaEzWrl2LLl26NHYzDilE1zSZbqEYL/DB9U1egxIEQRAEcRBDwgu28NJIeBEEQRAEkUVIeAEIkcWLIAiCIIgGgIQXAFmirEaCIAiCILIPCS8AIYWEF0EQBEEQ2YeEFwBFNi4DuRoJgiAIgsgmJLwAKORqJAiCIIisU1JSgh49eqBHjx447rjj0KFDB+vvWCyWdNu8vDwMHDgwreN16tQJ+/btq0uT6x0qoAqqXE8QBEEQDUHbtm2Rn58PABgyZIhnwutEIoFQSCxNevXqhV69ejVIO7MJWbxAwosgCIIgGou77roLDz30EPr06YNBgwZh8eLFOPfcc9GzZ0+cd955WL9+PQBg9uzZ1sTVQ4YMwT333INLLrkEnTt3xvDhwwMfb9u2bbjsssvQvXt3XH755dixYwcA4PPPP0e3bt1w5pln4qKLLgIArF69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",
- "text/plain": [
- "