Erste Nervenzellsimulation mit NEURON + Python

Überblick

[Hodgkin-Huxley-Modell](https: //) unter Verwendung von NEURON, einem von Michael Hines et al. Von der Hyeres University entwickelten Allzweck-Simulator für Nervenzellen / neuronale Schaltkreise. En.wikipedia.org/wiki/Hodgkin%E2%80%93Huxley_model) wird zur Simulation von Nervenzellen verwendet.

Obwohl es ein wenig schwer zu verstehen ist, wird es als Standard als Simulator für Mehrkompartimentmodelle von Nervenzellen verwendet und kann auch für groß angelegte Simulationen durch MPI verwendet werden. Ich denke, es wird ein sehr leistungsfähiges Werkzeug sein, wenn Sie es beherrschen.

(Abgesehen davon stammt das Bild auf dem Cover des Buches ALTER DES SUPERSENSENS Die Zukunft des Sensing Design von NEURON. Es wird basierend auf der neuronalen Schaltungssimulation visualisiert.)

Testumgebung

Wenn das NEURON + Jupyter-Notebook funktioniert, funktioniert es wahrscheinlich auch in anderen Umgebungen wie CentOS, Mac und Windows.

installieren

Das Erstellen einer NEURON-Umgebung für Python ist etwas umständlich, daher habe ich ein Docker-Image erstellt.

Installieren Sie Docker

Weitere Informationen finden Sie unter http://docs.docker.jp/engine/installation/ usw. Wenn es sich um eine ältere Version handelt, können Sie sie auch mit dem folgenden Befehl installieren.

$ sudo apt-get install docker.io
$ sudo yum install docker-io

Führen Sie das Docker-Image aus

Wenn Sie den folgenden Befehl ausführen, wird das Jupyter-Notizbuch mit NEURON-Setup gestartet. Greifen Sie daher auf die angezeigte URL zu (http: // localhost: 8888 /? Token = 91d2 im folgenden Beispiel).

$ docker run -p 8888:8888 dmiyamoto/neuron:jupyter
/usr/local/lib/python2.7/dist-packages/IPython/paths.py:69: UserWarning: IPython parent '/home/neuron' is not a writable location, using a temp directory.
  " using a temp directory.".format(parent))
[I 15:21:30.297 NotebookApp] Writing notebook server cookie secret to /home/neuron/.local/share/jupyter/runtime/notebook_cookie_secret
[W 15:21:30.307 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 15:21:30.311 NotebookApp] Serving notebooks from local directory: /work
[I 15:21:30.311 NotebookApp] 0 active kernels 
[I 15:21:30.311 NotebookApp] The Jupyter Notebook is running at: http://[all ip addresses on your system]:8888/?token=91d2
[I 15:21:30.311 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 15:21:30.311 NotebookApp] 
    
    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=91d2

Wenn Sie das Jupyter-Notizbuch nicht verwenden, können Sie es mit dem folgenden Befehl als Python-Interpreter verwenden.

$ docker run -it neuron:jupyter python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Zu verwendender Code

Der diesmal verwendete Beispielcode lautet wie folgt.

Verwenden Sie diesen außerdem, da derselbe Code in den Beispielen auf dem Dateibildschirm von Jupyter Notebook enthalten ist.

calc_hh()

Mit Ausnahme der Funktion calc_hh () können Sie diese verstehen, wenn Sie über allgemeine Kenntnisse in Python und Matplotlib verfügen. Daher werde ich nur den Inhalt von calc_hh () erläutern.

Definition von Zellen

soma = neuron.h.Section(name="soma")

soma.nseg = 1
soma.diam = 10   # [um]
soma.L = 10      # [um]
soma.insert("hh")

In NEURON Python wird eine Funktion mit demselben Namen wie HOC unter der Klasse "h" definiert. (Erklärung für diejenigen, die verstehen) Hier wird zunächst die Funktion "Abschnitt" verwendet, um die neu berechnete Zelle "Soma" zu definieren. Danach werden die Parameter für das Soma-Objekt festgelegt. Die Erklärung der einzelnen Parameter lautet wie folgt.

--nseg: Anzahl der Teilungen bei der Berechnung des Zellpotentials. Wenn auf längliche Zellen abgezielt wird, muss die Anzahl der Teilungen erhöht werden, da die Potentiale am Mittelpunkt und an den Enden unterschiedlich sind. --diam: Zellendurchmesser --L: Zellenlänge --insert ('hh') : Hodgkin-Set ein Modell vom Typ Huxley (hh). Andere schließen "pas" ein, das nur Leckstrom annimmt. Sie können auch Ihr eigenes Modell erstellen.

Außerdem kann mit der Funktion psection angezeigt werden, welche Art von Parametern vorhanden sind und welche Werte vorhanden sind. (Obwohl dies der Fall sein sollte, scheint die Druckfunktion in NEURON auf Jupyter nicht gut angezeigt zu werden, sodass ein Beispiel für die Ausführung im Interpreter gezeigt wird.) Sie kann durch Einfügen des "hh" -Modells neu festgelegt werden. Sie können auch beobachten, wo die Parameter zunehmen.

>>> soma = neuron.h.Section(name='soma')
>>> neuron.h.psection()
soma { nseg=1  L=100  Ra=35.4
	/*location 0 attached to cell 0*/
	/* First segment only */
	insert morphology { diam=500}
	insert capacitance { cm=1}
}
1.0
>>> soma.insert('hh')
<nrn.Section object at 0x7fe655562648>
>>> neuron.h.psection()
soma { nseg=1  L=100  Ra=35.4
	/*location 0 attached to cell 0*/
	/* First segment only */
	insert morphology { diam=500}
	insert capacitance { cm=1}
	insert hh { gnabar_hh=0.12 gkbar_hh=0.036 gl_hh=0.0003 el_hh=-54.3}
	insert na_ion { ena=50}
	insert k_ion { ek=-77}
}
1.0

Stimulationseinstellungen

stim = neuron.h.IClamp(soma(0.5))
stim.delay = 50  # [ms]
stim.dur = 200   # [ms]
stim.amp = 0.1   # [nA]

Selbst wenn Zellen definiert werden und ein Modell vom Hodgkin-Huxley-Typ eingeführt wird, ändert sich das konstante Potential nicht, wenn keine Stimulation vorliegt, so dass eine Konstantstromstimulation eingestellt wird. In NEURON kann durch die Funktion "IClamp" ein Konstantstromstimulus hinzugefügt werden. Die Erklärung der Parameter ist wie folgt.

--deley: Zeit, mit der Stimulation zu beginnen -- dur: Dauer des Stimulus --amp: Stimulationsintensität

Einstellung der Messmethode

rec_t = neuron.h.Vector()
rec_t.record(neuron.h._ref_t)
rec_v = neuron.h.Vector()
rec_v.record(soma(0.5)._ref_v)

Ordnen Sie in NEUORON ein Array mit der Funktion "Vektor" zu und legen Sie den Wert fest, der mit der Funktion "Aufnahme" aufgezeichnet werden soll. Infolgedessen wird der für jeden Berechnungsschritt festgelegte Wert zum Array hinzugefügt.

Simulationsbedingungen einstellen und ausführen

neuron.h.finitialize(-65)
tstop = 300
neuron.run(tstop)

Die Funktion "Finitialisieren" initialisiert das Zellpotential auf -65 [mV]. Verwenden Sie auch die Funktion "Ausführen", um die Simulation tatsächlich zu starten. Das Argument ist die Endzeit der Simulation (in diesem Fall 300 ms).

Nachbearbeitung

t = rec_t.as_numpy()
v = rec_v.as_numpy()
return np.array(t), np.array(v)

Der aufgezeichnete Wert wird durch die Funktion as_numpy vom internen Format von NEURON in ndarray konvertiert. Außerdem kann das Objekt (wahrscheinlich) aufgrund eines Fehlers auf der NEURON-Seite ohne Erlaubnis freigegeben werden. Verwenden Sie daher "np.array", um den Wert zu kopieren und als Rückgabewert zu verwenden.

Wenn Sie diesen Wert mit matplotlib grafisch darstellen, erhalten Sie die folgenden Hodgkin-Huxley-ähnlichen Spitzen.

download.png

abschließend

Künstliche Intelligenz boomt in der Welt, aber für diejenigen, die daran interessiert sind, tatsächliche Gehirne und neuronale Schaltkreise zu simulieren, anstatt extrem stark abstrahierte Modelle wie Deep Learning, hilft dieser verschiedene Text. Ich hoffe es wird.

Referenz

Geschichte verändern

Recommended Posts

Erste Nervenzellsimulation mit NEURON + Python
Web Scraping mit Python Erster Schritt
[GUI mit Python] PyQt5-Der erste Schritt-
Versuchen Sie die Frequenzsteuerungssimulation mit Python
FizzBuzz in Python3
Erster Python
Scraping mit Python
Erster Python 3 ~ Erster Vergleich ~
Scraping mit Python
Python mit Go
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
Erster Python
Ambisonics Simulation Python
[Python / PyRoom Acoustics] Raumakustische Simulation mit Python
mit Syntax (Python)
Erste Python ~ Codierung 2 ~
Bingo mit Python
Zundokokiyoshi mit Python
Erste Python [O'REILLY]
"Erste elastische Suche" beginnend mit einem Python-Client
Excel mit Python
Mikrocomputer mit Python
Ich habe mit Python einen Neuronensimulator erstellt
Mit Python besetzen
Erste Python ① Umgebungskonstruktion mit Pythonbrew & Hello World !!
[Einführung in die Udemy Python3 + -Anwendung] 9. Drucken Sie zunächst mit print
[Cloud102] # 1 Erste Schritte mit Python (Teil 1 Python Erste Schritte)
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Erste Python 3rd Edition
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
PyQ ~ Python Erster Schritt ~
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Kernel-Methode mit Python
Scraping mit Python + PhantomJS
Erste Python-Bildverarbeitung
Fahren Sie WebDriver mit Python
[Python] Mit CGIHTTPServer umleiten