Ich habe mit Python einen Neuronensimulator erstellt

0. Neuronensimulator

Apropos Neuronensimulator: NEURON der Yale University ist berühmt. Dies ist ein Simulator aus neurowissenschaftlicher Sicht, aber aus technischer Sicht BRIAN und [BindsNET](https: // bindsnet-docs). .readthedocs.io /) und so weiter.

Alle Bibliotheken funktionieren in Python und sind sehr gut gemacht, aber ** Wäre es nicht schön, eine Bibliothek zu haben, die Neuronen einfacher simulieren könnte? Ich dachte **.

Deshalb! Ich machte! !! (Obwohl es möglicherweise nicht viel Nachfrage gibt!)

  1. SPINE: Spiking Neuron Simulotor spine

Alles was Sie (vorerst) brauchen, ist NumPy und Matplotlib. Um ehrlich zu sein, ist es nicht so groß, dass es als Bibliothek bezeichnet wird, aber SPINE kann die folgenden Modelle simulieren.

  1. IF: Integrate-and-Fire-Modell
  2. LIF: Undichtes IF-Modell
  3. Hodgkin-Huxley-Modell
  4. FitzHugh-Nagumo-Modell
  5. Poisson-Spike-Erzeugung

Im IF / LIF-Modell kann der Spike-Response-Kernel auch als einfach exponentiell oder doppelt exponentiell ausgewählt werden.

SPINE ist weder technisch noch wissenschaftsspezifisch. Wie auch immer, ich mache es mit der Hoffnung, Anfängern in den Neurowissenschaften und spikierenden Neuronen zu helfen, mit dem Lernen zu beginnen. Die Quelle wird am Ende des Artikels veröffentlicht.

2. Betriebsbeispiel

Schauen Sie sich an, wie es tatsächlich funktioniert.

2.1 LIF und Poisson Spike

** Simulieren Sie die Aktivität von LIF-Neuronen, die Eingaben von 10 vorderen Neuronen erhalten **. Wenn zu diesem Zeitpunkt die Eingabespitzensequenz (Ausgangsspitzensequenz des vorherigen Neurons) die Poisson-Spitzensequenz ist, wird sie wie folgt codiert.

ref: Poisson Spike während der Implementierung in Python --Qiita zu verstehen

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]Experimentierzeit
    dt = 0.1        # [ms] time step

    time = int(duration / dt)

    # Input data from Poisson Spike Gen.
    #Generieren Sie eine Poisson-Spike-Sequenz, die aus einer Zufallszahl eingegeben werden soll
    spikes = PoissonSpike(np.random.random(10),
                          time=duration,
                          dt=dt).spikes

    #Angemessenes Gewicht
    weights = np.random.random(10) + 5.0

    #Definieren Sie LIF-Neuronen(Double exp filter)
    neu = LIF(duration,
              dt,
              k='double',  # use double exponential filter
              )

    #Berechnen Sie das Membranpotential, indem Sie die Sequenz und das Gewicht der Eingangsspitzen übergeben
    #Gibt das Membranpotential, die Ausgangsspitze und die Zündzeit zurück
    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

Es ist so.

Natürlich können Hyperparameter wie die Zündschwelle beim Generieren von LIF als Argumente übergeben werden, sodass detaillierte experimentelle Einstellungen möglich sind.

2.2 Für diejenigen, die sowieso alle Modelle ausführen möchten

Für solche Leute ist ein Beispielcode auf Github verfügbar.

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

Ich denke, es ist auch eine Ameise, die notwendigen Teile dieses Inhalts zu ändern und zu simulieren. Das tatsächlich erzeugte Bild wird auf Github veröffentlicht.

3. Nachtrag

Eigentlich gibt es diese Bibliothek schon eine Weile, aber da der Code organisiert und recht einfach zu bedienen ist, habe ich beschlossen, ihn auch auf Qiita einzuführen.

SPINE ist ein Nebenprodukt dessen, was ich gelernt habe. Es ist also ein wirklich einfacher Neuronensimulator, aber wie ich am Anfang hoffe ich persönlich, dass dies ** Neurowissenschaften und SNN-Anfängern beim Lernen hilft **.

Wir werden es von Zeit zu Zeit weiter aktualisieren. Wenn Sie also "Ja" denken, schauen Sie sich bitte die Github-Quelle an. Ich bin froh, wenn du mir einen Stern gibst.

:warning: SPINE geht nicht von einer großflächigen SNN-Konstruktion aus. Es ist ein einfacher Neuronensimulator zur Überprüfung der Operation. BindsNET wird für diejenigen empfohlen, die SNN erstellen und Bildverarbeitung durchführen möchten.

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

Documentation https://spine.hirlab.net/

Recommended Posts

Ich habe mit Python einen Neuronensimulator erstellt
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe mit Python eine Hex-Map erstellt
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe einen Python-Text gemacht
Ich habe mit Python einen Blackjack gemacht.
Ich habe Wordcloud mit Python gemacht.
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich habe einen Line-Bot mit Python gemacht!
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe eine funktionale Sprache mit Python ausprobiert
Was ich mit Python-Arrays gemacht habe
Ich habe ein Lebensspiel mit Numpy gemacht
Ich habe einen Hanko-Generator mit GAN gemacht
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe eine WEB-Bewerbung bei Django gemacht
Ich habe eine einfache Schaltung mit Python gemacht (AND, OR, NOR, etc.)
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
[Python] Ich habe einen Bildbetrachter mit einer einfachen Sortierfunktion erstellt.
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
Ich habe einen Pokerspielserver Chat-Holdem mit Websocket mit Python erstellt
Ich habe einen Stempelersatzbot mit Linie gemacht
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich möchte ein Spiel mit Python machen
Vorgehensweise zum Erstellen eines mit Python erstellten LineBot
Ich habe eine einfache Brieftasche aus Bitcoin mit Pycoin gemacht
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Ich habe mit Numpy eine Grafik mit Zufallszahlen erstellt
Ich möchte mit Python in eine Datei schreiben
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Python Qiita API Wrapper "qiipy" gemacht
Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
Ich habe ein Modul PyNanaco erstellt, das Nanaco-Guthaben mit Python belasten kann
[AWS] Ich habe BOT mit LINE WORKS daran erinnert
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe Python mit einem schönen Mädchen in Paiza # 02 gelernt