J'ai fait un simulateur de neurones avec Python

0. Simulateur de neurones

En parlant de simulateur de neurones, NEURON fabriqué par l'Université de Yale est célèbre. Ceci est un simulateur du point de vue des neurosciences, mais du point de vue de l'ingénierie, BRIAN et [BindsNET](https: // bindsnet-docs) .readthedocs.io /) et ainsi de suite.

Toutes les bibliothèques fonctionnent en Python et sont très bien faites, mais ** Ne serait-il pas bien d'avoir une bibliothèque qui pourrait simuler plus facilement les neurones? J'ai pensé **.

Donc! J'ai fait! !! (Bien qu'il n'y ait pas beaucoup de demande!)

  1. SPINE: Spiking Neuron Simulotor spine

Tout ce dont vous avez besoin (pour l'instant) est NumPy et Matplotlib. Pour être honnête, elle n'est pas si grande qu'elle peut être appelée une bibliothèque, mais SPINE peut simuler les modèles suivants.

  1. IF: modèle d'intégration et d'incendie
  2. LIF: modèle IF Leaky
  3. Modèle Hodgkin-Huxley
  4. Modèle FitzHugh-Nagumo
  5. Génération de pics de Poisson

Dans le modèle IF / LIF, le noyau de réponse de pointe peut également être sélectionné comme exponentiel simple ou double exponentiel.

SPINE n'est ni spécifique à l'ingénierie ni spécifique à la science. Quoi qu'il en soit, je le fais avec l'espoir d'aider les débutants en neurosciences et à stimuler les neurones à commencer à apprendre. La source est publiée à la fin de l'article.

2. Exemple de fonctionnement

Eh bien, regardez comment cela fonctionne réellement.

2.1. LIF et pic de Poisson

** Simulez l'activité des neurones LIF qui reçoivent l'entrée de 10 neurones antérieurs **. A ce moment, si la séquence de pointe d'entrée (séquence de pointe de sortie du neurone précédent) est la séquence de pointe de Poisson, elle est codée comme suit.

ref: Poisson Spike à comprendre lors de l'implémentation en Python --Qiita

from spine import LIF, PoissonSpike
from spine.tools.plotting import plot_spike_scatter

import numpy as np
import matplotlib.pyplot as plt


if __name__ == '__main__':
    duration = 500  # [ms]Durée de l'expérience
    dt = 0.1        # [ms] time step

    time = int(duration / dt)

    # Input data from Poisson Spike Gen.
    #Générer une séquence de pics de Poisson à saisir à partir d'un nombre aléatoire
    spikes = PoissonSpike(np.random.random(10),
                          time=duration,
                          dt=dt).spikes

    #Poids approprié
    weights = np.random.random(10) + 5.0

    #Définir les neurones LIF(Double exp filter)
    neu = LIF(duration,
              dt,
              k='double',  # use double exponential filter
              )

    #Calculez le potentiel de membrane en passant la séquence et le poids des pics d'entrée
    #Renvoie le potentiel de membrane, la pointe de sortie, le temps d'allumage
    v, s, f = neu.calc_v((spikes, weights))

    # Plot
    t = np.arange(0, duration, dt)

    plt.subplot(2, 1, 1)
    plot_spike_scatter(spikes, duration, dt, title='input spike trains', xlabel=None)

    plt.subplot(2, 1, 2)
    plt.plot(t, v)
    plt.plot(t, np.full_like(t, neu.th), linestyle='dashed')
    plt.ylabel('Membrane Voltage [mV]')
    plt.xlabel('time [ms]')
    plt.xlim(0, duration)

    plt.show()

dlif.png

C'est comme ça.

Bien sûr, des hyper paramètres tels que le seuil de déclenchement peuvent être passés comme arguments lors de la génération de LIF, de sorte que des paramètres expérimentaux détaillés sont possibles.

2.2. Pour ceux qui veulent quand même exécuter tous les modèles

Pour ces personnes, un exemple de code est disponible sur Github.

$ python if_sample.py    #Modèle IF
$ python lif_sample.py   #Modèle LIF
$ python hh_sample.py    # Hodgkin-Modèle Huxley
$ python fhn_sample.py   # FitzHugh-Modèle Nagumo

Je pense que c'est aussi une fourmi de changer les parties nécessaires de ce contenu et de le simuler. L'image réellement générée est publiée sur Github.

3. Post-scriptum

En fait, cette bibliothèque existe depuis un certain temps, mais depuis que le code a été organisé et qu'il est devenu assez facile à utiliser, j'ai décidé de l'introduire également sur Qiita.

SPINE est un sous-produit de ce que j'ai appris. C'est donc un simulateur de neurones vraiment simple, mais comme je l'ai fait au début, j'espère personnellement que cela aidera ** les débutants en neurosciences et SNN à apprendre **.

Nous continuerons de le mettre à jour de temps en temps, donc si vous pensez "ouais", veuillez jeter un œil à la source Github. Je suis content si vous me donnez une étoile.

:warning: SPINE ne suppose pas de construction SNN à grande échelle. C'est un simple simulateur de neurone pour vérifier l'opération. BindsNET est recommandé pour ceux qui souhaitent créer un SNN et effectuer un traitement d'image.

Source HiroshiARAKI/spine: SPINE is a simple Spiking Neuron simulator

Documentation https://spine.hirlab.net/

Recommended Posts

J'ai fait un simulateur de neurones avec Python
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
J'ai fait un compteur de caractères avec Python
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu rogue-like avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai fait un texte Python
J'ai fait un blackjack avec Python.
J'ai créé wordcloud avec Python.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai fait un Line-bot avec Python!
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai fait un programme de gestion de la paie en Python!
J'ai essayé un langage fonctionnel avec Python
Ce que j'ai fait avec les tableaux Python
J'ai fait un jeu de vie avec Numpy
J'ai fait un générateur Hanko avec GAN
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai fait une application WEB avec Django
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
[Python] J'ai créé une visionneuse d'images avec une fonction de tri simple.
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
J'ai fait un robot de remplacement de tampon avec une ligne
J'ai créé un fichier de dictionnaire python pour Neocomplete
Je veux faire un jeu avec Python
Procédure de création d'un LineBot réalisé avec Python
J'ai fait un simple portefeuille de Bitcoin avec pycoin
J'ai créé un Bot LINE avec Serverless Framework!
J'ai fait un graphique de nombres aléatoires avec Numpy
Je veux écrire dans un fichier avec Python
J'ai créé un programme cryptographique César en Python.
Création du wrapper d'API Qiita Python "qiipy"
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
J'ai créé un outil qui facilite un peu la décompression avec CLI (Python3)
J'ai fait un module PyNanaco qui peut charger des crédits nanaco avec python
[AWS] J'ai créé un BOT de rappel avec LINE WORKS
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai appris Python avec une belle fille à Paiza # 02