{ "cells": [ { "cell_type": "markdown", "id": "8f979225", "metadata": {}, "source": [ "# MNIST Example with Variability" ] }, { "cell_type": "code", "execution_count": 1, "id": "492751a4", "metadata": {}, "outputs": [], "source": [ "# You dont need this, this is for my convinience\n", "import sys\n", "import os\n", "notebook_dir = os.path.dirname(os.getcwd())\n", "sys.path.append(notebook_dir)" ] }, { "cell_type": "code", "execution_count": 14, "id": "445d3a24", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from nervos.utils import Module, Parameters\n", "from nervos.dataloader import MNISTLoader" ] }, { "cell_type": "code", "execution_count": 16, "id": "5a360660", "metadata": {}, "outputs": [], "source": [ "p = Parameters()\n", "p.from_url('https://pastebin.com/raw/e5ka6B9p')" ] }, { "cell_type": "code", "execution_count": 17, "id": "be2b82de", "metadata": {}, "outputs": [], "source": [ "allowed_levels = np.array(\n", " [1.0, 0.9679310906766183, 0.93760456888016, 0.9076014969897948, 0.8791824458963751,\n", " 0.8496445762753205, 0.8209604023080539, 0.7935519996097391, 0.7671344494652823,\n", " 0.741995145069934, 0.7168883624137776, 0.6916196780559918, 0.6682011978604938,\n", " 0.644600313127789, 0.62183509569345, 0.5993915606793792, 0.5773725757606286,\n", " 0.5557031995381914, 0.5343449008210679, 0.5132156682669483, 0.49230418996654846,\n", " 0.47142452641101046, 0.4505597804358407, 0.4297537503397992, 0.4088284856499594,\n", " 0.3877543957690631, 0.3664585982352714, 0.34477928874249386, 0.3228929359601,\n", " 0.30055530869670194, 0.2778102406007755, 0.254499930537807, 0.2310277187732093,\n", " 0.20723594557133454, 0.18259118371000224, 0.15743915341670922, 0.1322747507226366,\n", " 0.10701030833083243, 0.08075324589934445, 0.05429645756955848, 0.027605300619291628,\n", " 0.0]\n", " )" ] }, { "cell_type": "code", "execution_count": 18, "id": "c141eb21", "metadata": {}, "outputs": [], "source": [ "class MNIST_SNN(Module):\n", " def __init__(self, parameters, identifier=None):\n", " super().__init__(parameters, identifier)\n", " self.dataloader = MNISTLoader(parameters, classes=[i for i in range(5)])\n", " self.X_train, self.Y_train = self.dataloader.dataloader(\n", " preprocess=True, pca=False, size=parameters.training_images_amount\n", " )\n", " self.X_test, self.Y_test = self.dataloader.dataloader(\n", " preprocess=True, train=False, pca=False, size=parameters.testing_images_amount\n", " )\n", " self.get_spikeplots = False\n", " \n", " self.allowed_levels = allowed_levels\n", "\n", " def predict(self, un_processed_image, model_location):\n", " spike_train = np.array(self.dataloader.img2spiketrain(un_processed_image))\n", " synapses, neuron_label_map = self.load_model(model_location)\n", " return self.get_prediction(spike_train, synapses, neuron_label_map)\n" ] }, { "cell_type": "code", "execution_count": 19, "id": "c531a16a", "metadata": {}, "outputs": [], "source": [ "m = MNIST_SNN(p, \"5classmnist_with_variability\")\n", "m.initialise_layers([784, 60])\n", "m.enable_synaptic_noise = True\n", "m.noise_magnitude_half_range = 0.1" ] }, { "cell_type": "code", "execution_count": 20, "id": "fd4a3aa7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/3\n", "100/100 [========================================] [Max cycles for one synapse: 3486.0]\n", "Testing...\n", "Test set accuracy: 0.75\n", "Time elapsed since training start: 293.538s\n", "Epoch 2/3\n", "100/100 [========================================] [Max cycles for one synapse: 8602.0]\n", "Testing...\n", "Test set accuracy: 0.95\n", "Time elapsed since training start: 591.057s\n", "Epoch 3/3\n", "100/100 [========================================] [Max cycles for one synapse: 12788.0]\n", "Testing...\n", "Test set accuracy: 1.0\n", "Time elapsed since training start: 877.875s\n", "Training complete!\n" ] } ], "source": [ "y = m.train()" ] }, { "cell_type": "code", "execution_count": 21, "id": "05b8d171", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def visualise_synapse(synapses,labels):\n", " kk=28\n", " classes = {i:np.zeros((kk,kk)) for i in np.unique(labels)}\n", " for idx in range(len(synapses)):\n", " classes[labels[idx]]+= synapses[idx].reshape((kk,kk))\n", " \n", " i = 1\n", " plt.figure(figsize=(10,30))\n", " for k in classes.keys():\n", " plt.subplot(1,len(classes),i)\n", " plt.imshow(classes[k])\n", " plt.title(f\"{k}\")\n", " plt.tight_layout()\n", " plt.axis('off')\n", " i+=1\n", " plt.show()\n", " \n", "visualise_synapse(m.learned_synapses[0],m.learned_neuron_label_map)" ] }, { "cell_type": "code", "execution_count": 22, "id": "a3d7d0f0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Calculating Accuracy\n", "Tested 1500 images\n", "0.9033333333333333\n" ] } ], "source": [ "def accuracy(m2):\n", " spike_trains,labels = MNISTLoader(p,classes=[i for i in range(5)]).dataloader(train=False,preprocess=True,seed=123,size=1500)\n", " t = 0\n", " c = 0\n", " preds = []\n", " print('Calculating Accuracy')\n", " for st,label in zip(spike_trains,labels):\n", " pred = m2.get_prediction(st)\n", " preds.append(pred)\n", " if pred == label:\n", " c+=1\n", " t+=1\n", " \n", " print(f\"\\rTested {t} images\",end='')\n", " print()\n", " print(c/t)\n", " return labels,preds\n", "\n", "y_true,y_pred = accuracy(m)" ] } ], "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.12.4" } }, "nbformat": 4, "nbformat_minor": 5 }