{ "cells": [ { "cell_type": "markdown", "id": "8e62b37e-35dc-45b2-a025-31cf9ee971c5", "metadata": {}, "source": [ "# N-MNIST Classification\n", "\n", "__N-MNIST__ is the neuromorphic version of MNIST digit recognition. The MNIST digits are converted into event based data using a DVS sensor moving in a repatable tri-saccadic motion each about 100 ms long.\n", "\n", "The task is to classify each event sequence to it's corresponding digit.\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", "
\"Drawing\" \"Drawing\" \"Drawing\" \"Drawing\" \"Drawing\"
\n", "\n", "NMNIST dataset is freely available [here](https://www.garrickorchard.com/datasets/n-mnist) (© CC-4.0).\n", "\n", "> Orchard, G.; Cohen, G.; Jayawant, A.; and Thakor, N. _\"Converting Static Image Datasets to Spiking Neuromorphic Datasets Using Saccades\"_,\n", "Frontiers in Neuroscience, vol.9, no.437, Oct. 2015\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "afc7d708-0431-4b60-91f0-9b30edbedac0", "metadata": {}, "outputs": [], "source": [ "import os, sys\n", "import glob\n", "import zipfile\n", "import h5py\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import torch\n", "from torch.utils.data import Dataset, DataLoader\n", "\n", "# import slayer from lava-dl\n", "import lava.lib.dl.slayer as slayer\n", "\n", "import IPython.display as display\n", "from matplotlib import animation" ] }, { "cell_type": "markdown", "id": "670955ec-b45f-4ce5-a0aa-acce71a07370", "metadata": {}, "source": [ "# Create Dataset\n", "\n", "The dataset class follows standard torch dataset definition. They are defined in `nmnist.py`. We will just import the dataset and augmentation routine here." ] }, { "cell_type": "code", "execution_count": 2, "id": "36ceee15-929a-43e4-a63e-57772019c1c4", "metadata": {}, "outputs": [], "source": [ "from nmnist import augment, NMNISTDataset" ] }, { "cell_type": "markdown", "id": "a4ff3649-9c82-4fd4-bdbe-e4672f726dc7", "metadata": {}, "source": [ "# Create Network\n", "\n", "A slayer network definition follows standard PyTorch way using `torch.nn.Module`.\n", "\n", "The network can be described with a combination of individual `synapse`, `dendrite`, `neuron` and `axon` components. For rapid and easy development, slayer provides __block interface__ - `slayer.block` - which bundles all these individual components into a single unit. These blocks can be cascaded to build a network easily. The block interface provides additional utilities for normalization (weight and neuron), dropout, gradient monitoring and network export.\n", "\n", "In the example below, `slayer.block.cuba` is illustrated." ] }, { "cell_type": "code", "execution_count": 3, "id": "4172d38f-7d39-475f-bac8-7985fb1baa53", "metadata": {}, "outputs": [], "source": [ "class Network(torch.nn.Module):\n", " def __init__(self):\n", " super(Network, self).__init__()\n", "\n", " neuron_params = {\n", " 'threshold' : 1.25,\n", " 'current_decay' : 0.25,\n", " 'voltage_decay' : 0.03,\n", " 'tau_grad' : 0.03,\n", " 'scale_grad' : 3,\n", " 'requires_grad' : True, \n", " }\n", " neuron_params_drop = {**neuron_params, 'dropout' : slayer.neuron.Dropout(p=0.05),}\n", " \n", " self.blocks = torch.nn.ModuleList([\n", " slayer.block.cuba.Dense(neuron_params_drop, 34*34*2, 512, weight_norm=True, delay=True),\n", " slayer.block.cuba.Dense(neuron_params_drop, 512, 512, weight_norm=True, delay=True),\n", " slayer.block.cuba.Dense(neuron_params, 512, 10, weight_norm=True),\n", " ])\n", " \n", " def forward(self, spike):\n", " for block in self.blocks:\n", " spike = block(spike)\n", " return spike\n", " \n", " def grad_flow(self, path):\n", " # helps monitor the gradient flow\n", " grad = [b.synapse.grad_norm for b in self.blocks if hasattr(b, 'synapse')]\n", "\n", " plt.figure()\n", " plt.semilogy(grad)\n", " plt.savefig(path + 'gradFlow.png')\n", " plt.close()\n", "\n", " return grad\n", "\n", " def export_hdf5(self, filename):\n", " # network export to hdf5 format\n", " h = h5py.File(filename, 'w')\n", " layer = h.create_group('layer')\n", " for i, b in enumerate(self.blocks):\n", " b.export_hdf5(layer.create_group(f'{i}'))" ] }, { "cell_type": "markdown", "id": "7617ab25-f112-42c6-8bdd-28d0ded7ffb1", "metadata": {}, "source": [ "# Instantiate Network, Optimizer, DataSet and DataLoader\n", "\n", "Running the network in GPU is as simple as selecting `torch.device('cuda')`." ] }, { "cell_type": "code", "execution_count": 4, "id": "47d40cfa-7c30-4192-910c-1b5a90e08c8e", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "NMNIST dataset is freely available here: https://www.garrickorchard.com/datasets/n-mnist\n", "\n", "(c) Creative Commons:\n", " Orchard, G.; Cohen, G.; Jayawant, A.; and Thakor, N.\n", " \"Converting Static Image Datasets to Spiking Neuromorphic Datasets Using Saccades\",\n", " Frontiers in Neuroscience, vol.9, no.437, Oct. 2015\n", "\n" ] } ], "source": [ "trained_folder = 'Trained'\n", "os.makedirs(trained_folder, exist_ok=True)\n", "\n", "# device = torch.device('cpu')\n", "device = torch.device('cuda') \n", "\n", "net = Network().to(device)\n", "\n", "optimizer = torch.optim.Adam(net.parameters(), lr=0.001)\n", "\n", "training_set = NMNISTDataset(train=True, transform=augment)\n", "testing_set = NMNISTDataset(train=False)\n", "\n", "train_loader = DataLoader(dataset=training_set, batch_size=32, shuffle=True)\n", "test_loader = DataLoader(dataset=testing_set , batch_size=32, shuffle=True)" ] }, { "cell_type": "markdown", "id": "87f1551e-ce69-46ef-b1bc-d73be3c97794", "metadata": {}, "source": [ "# Visualize the input data\n", "\n", "A `slayer.io.Event` can be visualized by invoking it's `Event.show()` routine. `Event.anim()` instead returns the event visualization animation which can be embedded in notebook or exported as video/gif. Here, we will export gif animation and visualize it." ] }, { "cell_type": "code", "execution_count": 5, "id": "be0b1c3b-77ec-4d8d-9fb3-22ae2b6dd742", "metadata": {}, "outputs": [], "source": [ "for i in range(5):\n", " spike_tensor, label = testing_set[np.random.randint(len(testing_set))]\n", " spike_tensor = spike_tensor.reshape(2, 34, 34, -1)\n", " event = slayer.io.tensor_to_event(spike_tensor.cpu().data.numpy())\n", " anim = event.anim(plt.figure(figsize=(5, 5)), frame_rate=240)\n", " anim.save(f'gifs/input{i}.gif', animation.PillowWriter(fps=24), dpi=300)" ] }, { "cell_type": "code", "execution_count": 6, "id": "89122bc4-6441-4963-bb43-2313432f0530", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\"Drawing\" \"Drawing\" \"Drawing\" \"Drawing\" \"Drawing\"
" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gif_td = lambda gif: f' \"Drawing\" '\n", "header = ''\n", "images = ' '.join([gif_td(f'gifs/input{i}.gif') for i in range(5)])\n", "footer = '
'\n", "display.HTML(header + images + footer)" ] }, { "cell_type": "markdown", "id": "d5a3fc61-6560-40fa-a222-5c051dc2ede7", "metadata": {}, "source": [ "# Error module\n", "\n", "Slayer provides prebuilt loss modules: `slayer.loss.{SpikeTime, SpikeRate, SpikeMax}`.\n", "* `SpikeTime`: precise spike time based loss when target spike train is known.\n", "* `SpikeRate`: spike rate based loss when desired rate of the output neuron is known.\n", "* `SpikeMax`: negative log likelihood losses for classification without any rate tuning.\n", "\n", "Since the target spike train is not known for this problem, we use `SpikeRate` loss and target high spiking rate for true class and low spiking rate for false class.\n", "\n", "target rate: $\\hat{\\boldsymbol r} = r_\\text{true}\\,{\\bf 1}[\\text{label}] + r_\\text{false}\\,(1-{\\bf 1}[\\text{label}])$ where ${\\bf 1}[\\text{label}]$ is one-hot encoding of label. The loss is:\n", "\n", "$$L = \\frac{1}{2} \\left(\\frac{1}{T}\\int_T {\\boldsymbol s}(t)\\,\\text dt - \\hat{\\boldsymbol r}\\right)^\\top {\\bf 1}$$" ] }, { "cell_type": "code", "execution_count": 7, "id": "3c4b9b92-925a-4da8-b146-923dc4b6ad5f", "metadata": {}, "outputs": [], "source": [ "error = slayer.loss.SpikeRate(true_rate=0.2, false_rate=0.03, reduction='sum').to(device)" ] }, { "cell_type": "markdown", "id": "6cb1c953-78e7-47b7-9ce5-ab747ec23eb6", "metadata": {}, "source": [ "# Stats and Assistants\n", "\n", "Slayer provides `slayer.utils.LearningStats` as a simple learning statistics logger for training, validation and testing.\n", "\n", "In addtion, `slayer.utils.Assistant` module wraps common training validation and testing routine which help simplify the training routine." ] }, { "cell_type": "code", "execution_count": 8, "id": "473884dd-d2fa-4e6a-b44d-6a1c303dc950", "metadata": {}, "outputs": [], "source": [ "stats = slayer.utils.LearningStats()\n", "assistant = slayer.utils.Assistant(net, error, optimizer, stats, classifier=slayer.classifier.Rate.predict)" ] }, { "cell_type": "markdown", "id": "05eb7069-d384-4368-8235-f5b782c5eeae", "metadata": {}, "source": [ "# Training Loop\n", "\n", "Training loop mainly consists of looping over epochs and calling `assistant.train` and `assistant.test` utilities over training and testing dataset. The `assistant` utility takes care of statndard backpropagation procedure internally.\n", "\n", "* `stats` can be used in print statement to get formatted stats printout.\n", "* `stats.testing.best_accuracy` can be used to find out if the current iteration has the best testing accuracy. Here, we use it to save the best model.\n", "* `stats.update()` updates the stats collected for the epoch.\n", "* `stats.save` saves the stats in files." ] }, { "cell_type": "code", "execution_count": 9, "id": "dbcbc25a-41bb-49f0-bdb7-26be901626c9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " \n", "[Epoch 19/100]\n", "Train loss = 0.11669 (min = 0.11887) accuracy = 0.96173 (max = 0.96188) \n", "Test loss = 0.07722 (min = 0.07424) accuracy = 0.97720 (max = 0.97770)\n", " \n", "[Epoch 39/100]\n", "Train loss = 0.09383 (min = 0.09434) accuracy = 0.97182 (max = 0.97180) \n", "Test loss = 0.06004 (min = 0.06169) accuracy = 0.98240 (max = 0.98250)\n", " \n", "[Epoch 59/100]\n", "Train loss = 0.08660 (min = 0.08739) accuracy = 0.97570 (max = 0.97692) \n", "Test loss = 0.05640 (min = 0.05682) accuracy = 0.98490 (max = 0.98420)\n", " \n", "[Epoch 79/100]\n", "Train loss = 0.08141 (min = 0.08102) accuracy = 0.97768 (max = 0.97808) \n", "Test loss = 0.05284 (min = 0.05230) accuracy = 0.98500 (max = 0.98660)\n", " \n", "[Epoch 99/100]\n", "Train loss = 0.07434 (min = 0.07396) accuracy = 0.97933 (max = 0.97993) \n", "Test loss = 0.05019 (min = 0.04633) accuracy = 0.98540 (max = 0.98720)\n" ] } ], "source": [ "epochs = 100\n", "\n", "for epoch in range(epochs):\n", " for i, (input, label) in enumerate(train_loader): # training loop\n", " output = assistant.train(input, label)\n", " print(f'\\r[Epoch {epoch:2d}/{epochs}] {stats}', end='')\n", " \n", " for i, (input, label) in enumerate(test_loader): # training loop\n", " output = assistant.test(input, label)\n", " print(f'\\r[Epoch {epoch:2d}/{epochs}] {stats}', end='')\n", " \n", " if epoch%20 == 19: # cleanup display\n", " print('\\r', ' '*len(f'\\r[Epoch {epoch:2d}/{epochs}] {stats}'))\n", " stats_str = str(stats).replace(\"| \", \"\\n\")\n", " print(f'[Epoch {epoch:2d}/{epochs}]\\n{stats_str}')\n", " \n", " if stats.testing.best_accuracy:\n", " torch.save(net.state_dict(), trained_folder + '/network.pt')\n", " stats.update()\n", " stats.save(trained_folder + '/')\n", " net.grad_flow(trained_folder + '/')" ] }, { "cell_type": "markdown", "id": "854daacd-5ea4-46fd-befd-b0918b26bda3", "metadata": {}, "source": [ "# Plot the learning curves\n", "\n", "Plotting the learning curves is as easy as calling `stats.plot()`." ] }, { "cell_type": "code", "execution_count": 10, "id": "be59928f-4da2-4055-8802-71216003bf0c", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4QAAAFACAYAAADkqLKwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABiMElEQVR4nO3dd3iUVfrG8e+ZmfSEVDqEXqQ3QcQC9oa9Ye+irrruqlvdXfe37q67rrp2WXvvqNgbKCiCIChNivROQnqfmfP74wy9JCHlTbk/15VrJpN33nkmjGPuOec8x1hrERERERERkebH53UBIiIiIiIi4g0FQhERERERkWZKgVBERERERKSZUiAUERERERFpphQIRUREREREmikFQhERERERkWZKgbAeGWOu8boGadr0GpP6oNeZ1Ae9zqQ+6HUmda0xvMYUCOtXg39BSKOn15jUB73OpD7odSb1Qa8zqWsN/jWmQCgiIiIiItJMGWut1zXUuoyMDNu5c2evy9jDli1baNmypddlSBOm15jUB73OpD7odSb1Qa8zqWtevsZmz56dZa2t9MED9VFMfevcuTOzZs3yugwRERERERFPGGNWVeU4TRkVERERERFpphQIRUREREREmikFQhERERERkWaqSa4hFBERERGRxquiooK1a9dSWlrqdSkNXmxsLB06dCAqKuqA7q9AKCIiIiIiDcratWtJSkqic+fOGGO8LqfBstaSnZ3N2rVr6dKlywGdQ1NGRURERESkQSktLSU9PV1hsBLGGNLT02s0kqpAKCIiIiIiDY7CYNXU9PekQCgiIiIiItJMKRCKiIiIiIjsJDs7m0GDBjFo0CDatGlD+/btt39fXl6+3/vOmjWLm266qdLHOPTQQ2ur3BpRU5l6UBYMMemHDfRuk0S/9slelyMiIiIiIvuRnp7O3LlzAfjLX/5CYmIit9566/afB4NBAoG9R6lhw4YxbNiwSh/jm2++qZVaa0ojhPXAZwy/efNHPpq/0etSRERERETkAFx22WWMHz+eESNGcPvttzNz5kxGjhzJ4MGDOfTQQ1m8eDEAU6ZM4ZRTTgFcmLziiisYPXo0Xbt25YEHHth+vsTExO3Hjx49mrPPPpvevXtz4YUXYq0F4IMPPqB3794MHTqUm266aft5a1OTGiE0xowFxnbv3t3rUnYR5ffRLiWWVVuLvS5FRERERKRRuXPSAhauz6/Vc/Zp14I/j+1b7futXbuWb775Br/fT35+PlOnTiUQCPDZZ5/x+9//njfffHOP+/z0009MnjyZgoICevXqxXXXXbfHnoFz5sxhwYIFtGvXjlGjRvH1118zbNgwrr32Wr766iu6dOnCuHHjqltusjFmAjDJWjtpXwc1qUAYeaKThg0bdrXXteyuU1oCq7OLvC5DREREREQO0DnnnIPf7wcgLy+PSy+9lKVLl2KMoaKiYq/3Ofnkk4mJiSEmJoZWrVqxadMmOnTosMsxw4cP337boEGDWLlyJYmJiXTt2nX7/oLjxo1jwoQJ1Sk3z1p7TWUHNalA2JBlpsfzwbwNXpchIiIiItKoHMhIXl1JSEjYfv2OO+5gzJgxTJw4kZUrVzJ69Oi93icmJmb7db/fTzAYPKBj6orWENaTTmnx5BZXkFey908ORERERESk8cjLy6N9+/YAPPPMM7V+/l69erF8+XJWrlwJwKuvvlrrjwEKhPWmU3o8AKuztY5QRERERKSxu/322/nd737H4MGD62RELy4ujkceeYQTTjiBoUOHkpSURHJy7e9YYLZ1sGlKhg0bZmfNmuV1GbtYuD6fkx6YykMXDOaUAe28LkdEREREpMFatGgRBx10kNdleK6wsJDExESstdxwww306NGDW265ZY/j9vb7MsbMttZWuv+FRgjrSWZkhHCVRghFRERERKQK/ve//zFo0CD69u1LXl4e1157ba0/hprK1JPEmAAZidGaMioiIiIiIlVyyy237HVEsDZphLAedUpPYKW2nhARERERkQZCgbAedUqLZ7U2pxcRERERkQZCgbAeZabHszG/lNKKkNeliIiIiIiIKBDWp07p8VgLa3M0SigiIiIiIt5TU5l6lJmWALhOo91bJXlcjYiIiIiI7E12djZHH300ABs3bsTv99OyZUsAZs6cSXR09H7vP2XKFKKjozn00EMBeOyxx4iPj+eSSy6p28IPgAJhPeqkrSdERERERBq89PR05s6dC8Bf/vIXEhMTufXWW6t8/ylTppCYmLg9EI4fP74uyqwVmjJaj9ITokmI9quxjIiIiIhIIzN79myOPPJIhg4dyvHHH8+GDRsAeOCBB+jTpw8DBgzg/PPPZ+XKlTz22GPcd999DBo0iKlTp/KXv/yFe+65B4DRo0fzm9/8huHDh9OzZ0+mTp0KQHFxMeeeey59+vThjDPOYMSIEcyaNavOn5dGCOuRMYbM9ARWaesJEREREZGq+fC3sHFe7Z6zTX848Z9VPtxay4033sg777xDy5YtefXVV/nDH/7AU089xT//+U9WrFhBTEwMubm5pKSkMH78+F1GFT///PNdzhcMBpk5cyYffPABd955J5999hmPPPIIqampLFy4kPnz5zNo0KDafMb7pEBYzzqlxbNkc4HXZYiIiIiISBWVlZUxf/58jj32WABCoRBt27YFYMCAAVx44YWcfvrpnH766VU635lnngnA0KFDWblyJQDTpk3j5ptvBqBfv34MGDCgdp/EPigQ1rNO6fF88dNmQmGL32e8LkdEREREpGGrxkheXbHW0rdvX6ZPn77Hz95//32++uorJk2axF133cW8eZWPZsbExADg9/sJBoO1Xm91aA1hPeuUnkB5KMzG/FKvSxERERERkSqIiYlhy5Yt2wNhRUUFCxYsIBwOs2bNGsaMGcPdd99NXl4ehYWFJCUlUVBQvVmBo0aN4rXXXgNg4cKFVQqWtUGBsJ7t6DSqdYQiIiIiIo2Bz+fjjTfe4De/+Q0DBw5k0KBBfPPNN4RCIS666CL69+/P4MGDuemmm0hJSWHs2LFMnDhxe1OZqrj++uvZsmULffr04Y9//CN9+/YlOTm5jp8ZGGttnT9IfRs2bJitj448B2LN1mIO/9dk/nFmf8YNz/S6HBERERGRBmfRokUcdNBBXpdRr0KhEBUVFcTGxvLzzz9zzDHHsHjx4kr3PIS9/76MMbOttcMqu6/WENazdilxRPmN9iIUEREREZHtiouLGTNmDBUVFVhreeSRR6oUBmtKgbCe+X2GDqnxrN6qKaMiIiIiIuIkJSXVy76Du9MaQg9kpsVrhFBEREREZD+a4tK2ulDT35MCoQc6pcezOrtYL3IRERERkb2IjY0lOztbfy9XwlpLdnY2sbGxB3wOTRn1QGZaPAVlQXKKK0hLqPt5wSIiIiIijUmHDh1Yu3YtW7Zs8bqUBi82NpYOHToc8P0VCD3QKT0BcFtPKBCKiIiIiOwqKiqKLl26eF1Gs6Apox7Ythfh6q1aRygiIiIiIt5RIPRAZtq2zekVCEVERERExDsKhB6IjfLTpkWsAqGIiIiIiHhKgdAjmenai1BERERERLylQOiRTtqLUEREREREPKZA6JFO6fFsLiijuDzodSkiIiIiItJMNalAaIwZa4yZkJeX53UplcqMbD2hTqMiIiIiIlIHko0xE4wxY/d3UJMKhNbaSdbaa5KTk70upVKd1GlURERERETqTp619hpr7aT9HdSkAmFjsn0vQgVCERERERHxiAKhR1Lio2kRG2CVOo2KiIiIiIhHFAg91DkjQVNGRURERETEMwqEHspMi1dTGRERERER8YwCoYc6pcezLqeEYCjsdSkiIiIiItIMKRB6qFNaAsGwZX1uqdeliIiIiIhIM6RA6KHMSKdRNZYREREREREvKBB6aNvWE2osIyIiIiIiXlAg9FDrpFiiAz41lhEREREREU8oEHrI5zNkpsWzMktTRkVEREREpP4pEHqsk7aeEBERERERjygQeiwz3QVCa63XpYiIiIiISDOjQOixzukJFJeH2FJY5nUpIiIiIiLSzCgQemzb1hOr1WlURERERETqmQKhxzqlaesJERERERHxhgKhxzqkxuMzsEqNZUREREREpJ4pEHosOuCjbXIcq7O19YSIiIiIiNQvBcIGoFN6vEYIRURERESk3ikQNgCd0uPVVEZEREREROqdAmEDkJmWQHZROQWlFV6XIiIiIiIizYgCYQPQo1UiAN8u3+pxJSIiIiIi0pwoEDYAR/ZqSYfUOB6avAxrrdfliIiIiIhIM6FA2ABE+X3cMKY7P6zJ5aulWV6XIyIiIiIizYQCYQNx1pAOtEuO5YHPl2qUUERERERE6oUCYQMRHfBx3ehuzF6Vw/Sfs70uR0REREREmgEFwgbknGEdad0ihge+WOp1KSIiIiIi0gwoEDYgsVF+rj2iG98u38rMFeo4KiIiIiIidUuBsIEZNzyTjMQYHtQooYiIiIiI1DEFwgYmLtrPNUd0YerSLL5fneN1OSIiIiIi0oQpEDZAF47oRFpCNA9+rlFCERERERGpOwqEDVBCTIArD+vC5MVb+HFtrtfliIiIiIhIE6VA2EBdMrITyXFRPPjFMq9LERERERGRJkqBsIFKio3iilFd+HThJhauz/e6HBERERERaYIUCBuwy0Z1JikmwEOTtZZQRERERERqnwJhA5YcF8XlozrzwbyNLNlU4HU5IiIiIiLSxCgQNnBXHNaFhGg//1XHURERERERqWUKhA1cSnw0Vx7elfd/3MAXP23yuhwREREREWlC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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "stats.plot(figsize=(15, 5))" ] }, { "cell_type": "markdown", "id": "d7785921-b165-425a-a3c8-600b1b822378", "metadata": {}, "source": [ "# Export the best model\n", "\n", "Load the best model during training and export it as hdf5 network. It is supported by `lava.lib.dl.netx` to automatically load the network as a lava process." ] }, { "cell_type": "code", "execution_count": 11, "id": "fa9a9efa-da94-45b9-8598-c669e522a5c7", "metadata": {}, "outputs": [], "source": [ "net.load_state_dict(torch.load(trained_folder + '/network.pt'))\n", "net.export_hdf5(trained_folder + '/network.net')" ] }, { "cell_type": "markdown", "id": "a9a89584-2b71-49d9-b9e5-582e657676bc", "metadata": {}, "source": [ "# Visualize the network output\n", "\n", "Here, we will use `slayer.io.tensor_to_event` method to convert the torch output spike tensor into `slayer.io.Event` object and visualize a few input and output event pairs." ] }, { "cell_type": "code", "execution_count": 12, "id": "2a37918a-c45d-40a5-b727-e2fe610b7c80", "metadata": {}, "outputs": [], "source": [ "output = net(input.to(device))\n", "for i in range(5):\n", " inp_event = slayer.io.tensor_to_event(input[i].cpu().data.numpy().reshape(2, 34, 34, -1))\n", " out_event = slayer.io.tensor_to_event(output[i].cpu().data.numpy().reshape(1, 10, -1))\n", " inp_anim = inp_event.anim(plt.figure(figsize=(5, 5)), frame_rate=240)\n", " out_anim = out_event.anim(plt.figure(figsize=(10, 5)), frame_rate=240)\n", " inp_anim.save(f'gifs/inp{i}.gif', animation.PillowWriter(fps=24), dpi=300)\n", " out_anim.save(f'gifs/out{i}.gif', animation.PillowWriter(fps=24), dpi=300)\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "d933ed73-cdc1-43b8-8045-57cc9c499fba", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
InputOutput
\"Drawing\" \"Drawing\"
\"Drawing\" \"Drawing\"
\"Drawing\" \"Drawing\"
\"Drawing\" \"Drawing\"
\"Drawing\" \"Drawing\"
" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "html = ''\n", "html += ''\n", "for i in range(5):\n", " html += ''\n", " html += gif_td(f'gifs/inp{i}.gif')\n", " html += gif_td(f'gifs/out{i}.gif')\n", " html += ''\n", "html += '
InputOutput
'\n", "display.HTML(html)" ] } ], "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }