【SNN脈沖神經網絡3】HH神經元軟件仿真

本篇文章主要核心目的在于研究明白HH神經元的數學模型,并且驗證其正確性。因此,在本篇文章中只會使用numpy函數庫用于構建神經元,以及matplotlib用于繪圖。

1.導入對應的庫

import numpy as np
import matplotlib.pyplot as plt
import re
import os

2.建立神經元的類別

HH神經元的數學模型如下所示:

對應的示例代碼如下:

class HHNeuron:def __init__(self, name, V_Neuron, G_Synapsis_Excitatory, G_Synapsis_Inhibitory, E_Excitatory, E_Inhibitory, E_local, G_local, V_Excitatory_Threshold,C_Membrane, tau_Synapsis,V_Reset_Threshold, V_Reset,I_Synapsis, T_refractory, T_rest,Connecting_Neuron, Q_Synapsis, Probability_Connecting,G_Synapsis_K, G_Synapsis_Na, E_K, E_Na,n_coefficient, m_coefficient, h_coefficient):# variable parametersself.name = nameself.V_Neuron = V_Neuronself.G_Synapsis_Excitatory = G_Synapsis_Excitatoryself.G_Synapsis_Inhibitory = G_Synapsis_Inhibitory# fixed parametersself.E_Excitatory = E_Excitatoryself.E_Inhibitory = E_Inhibitoryself.E_local = E_localself.G_local = G_localself.V_Excitatory_Threshold = V_Excitatory_Thresholdself.C_Membrane = C_Membraneself.T_refractory = T_refractory# adaptive parametersself.tau_Synapsis = tau_Synapsis# reset parametersself.V_Reset_Threshold = V_Reset_Thresholdself.V_Reset = V_Resetself.I_Synapsis = I_Synapsisself.T_rest = T_rest# connecting neuronsself.Connecting_Neuron = Connecting_Neuronself.Q_Synapsis = Q_Synapsisself.Probability_Connecting = Probability_Connecting# HH model parametersself.G_Synapsis_K = G_Synapsis_Kself.G_Synapsis_Na = G_Synapsis_Naself.E_K = E_Kself.E_Na = E_Naself.n_coefficient = n_coefficientself.m_coefficient = m_coefficientself.h_coefficient = h_coefficientdef refresh_membrane_potential(self):if self.T_rest<=0:self.V_Neuron =self.V_Neuron+dt*(self.G_Synapsis_Excitatory*(self.E_Excitatory-self.V_Neuron)+self.G_Synapsis_Inhibitory*(self.E_Inhibitory-self.V_Neuron)+self.G_local*(self.E_local-self.V_Neuron)+self.G_Synapsis_K*self.n_coefficient*self.n_coefficient*self.n_coefficient*self.n_coefficient*(self.E_K-self.V_Neuron)+self.G_Synapsis_Na*self.m_coefficient*self.m_coefficient*self.m_coefficient*self.h_coefficient*(self.E_Na-self.V_Neuron)+self.I_Synapsis)/self.C_Membraneelse:self.T_rest=self.T_rest-dtdef refresh_G_Synapsis_Excitatory(self):self.G_Synapsis_Excitatory = self.G_Synapsis_Excitatory-dt*self.G_Synapsis_Excitatory/self.tau_Synapsisdef refresh_G_Synapsis_Inhibitory(self):self.G_Synapsis_Inhibitory = self.G_Synapsis_Inhibitory-dt*self.G_Synapsis_Inhibitory/self.tau_Synapsisdef refresh_n_coefficient(self):self.n_coefficient = self.n_coefficient+dt*(0.032/mV*(15*mV-self.V_Neuron+self.V_Excitatory_Threshold)/(np.exp((15*mV-self.V_Neuron+self.V_Excitatory_Threshold)/5/mV)-1)*(1-self.n_coefficient)/ms-0.5*np.exp((10*mV-self.V_Neuron+self.V_Excitatory_Threshold)/40/mV)*self.n_coefficient/ms)def refresh_h_coefficient(self):self.h_coefficient = self.h_coefficient+dt*(0.128*np.exp((17*mV-self.V_Neuron+self.V_Excitatory_Threshold)/18/mV)*(1-self.h_coefficient)/ms-4/(1+np.exp((40*mV-self.V_Neuron+self.V_Excitatory_Threshold)/5/mV))*self.h_coefficient/ms)def refresh_m_coefficient(self):self.m_coefficient = self.m_coefficient+dt*(0.32/mV*(13*mV-self.V_Neuron+self.V_Excitatory_Threshold)/(np.exp((13*mV-self.V_Neuron+self.V_Excitatory_Threshold)/4/mV)-1)*(1-self.m_coefficient)/ms-0.28/mV*(self.V_Neuron-self.V_Excitatory_Threshold-40*mV)/(np.exp((self.V_Neuron-self.V_Excitatory_Threshold-40*mV)/5/mV)-1)*self.m_coefficient/ms)def fire(self, num1, num2):global fire_matrix# refresh self parameter# print(self.name)self.V_Neuron = self.V_Resetself.T_rest=self.T_refractoryif self.name[1]=='1':num1=num1+1fire_matrix1[extract_number_from_string(self.name)-1,test_input_index]=2for neuron1 in self.Connecting_Neuron:neuron1.G_Synapsis_Inhibitory=neuron1.G_Synapsis_Inhibitory+self.Q_Synapsisif self.name[1]=='2':num2=num2+1fire_matrix2[extract_number_from_string(self.name)-1,test_input_index]=2for neuron2 in self.Connecting_Neuron:neuron2.G_Synapsis_Excitatory=neuron2.G_Synapsis_Excitatory+self.Q_Synapsisreturn num1, num2def judge_fire(self, num1, num2):if self.V_Neuron>self.V_Reset_Threshold:print(self.V_Neuron)num1, num2=self.fire(num1, num2)else:passreturn num1, num2def Add_Synapsis(self, Synapsis):self.Connecting_Neuron.append(Synapsis)

3.建立直流激勵源進行仿真

for tick_time in time_sim:FS_HH_neuron.refresh_membrane_potential()single_membrane_potential.append(FS_HH_neuron.V_Neuron)FS_HH_neuron.refresh_G_Synapsis_Excitatory()FS_HH_neuron.refresh_G_Synapsis_Inhibitory()FS_HH_neuron.refresh_n_coefficient()FS_HH_neuron.refresh_h_coefficient()FS_HH_neuron.refresh_m_coefficient()FS_HH_neuron.judge_fire(0,0)

4.仿真結果

n參數:

m參數:

h參數:

?膜電位:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89716.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

「日拱一碼」014 Python常用庫——Pandas

目錄 數據結構 pandas.Series &#xff1a;一維數組&#xff0c;類似于數組&#xff0c;但索引可以是任意類型&#xff0c;而不僅僅是整數 pandas.DataFrame &#xff1a;二維表格型數據結構&#xff0c;類似于 Excel 表格&#xff0c;每列可以是不同的數據類型 數據讀取與寫…

狂命爆肝21天,共51K字的JAVA學習筆記奉上,JAVA從入門到精通一文搞定,一文在手JAVA無憂

背景知識 Java 相關概念 JavaSE (Java Standard Edition): 基礎版&#xff0c;用于開發桌面應用程序。JavaEE (Java Enterprise Edition): 企業版&#xff0c;用于開發企業級應用程序。JavaME (Java Micro Edition): 微型版&#xff0c;用于開發嵌入式系統和移動設備應用程序…

Dijkstra 算法#圖論

Dijkstra 算法 算法前提&#xff1a;在沒有負邊的情況下使用。算法思路&#xff1a;將結點分成已確定最短路長度的點集 S 和未確定最短路長度的點集 T&#xff0c;每次從 T 集合中選取最短路長度最小的結點移到 S 集合中&#xff0c;并對其出邊執行更新操作 從T集合中&#x…

開源與閉源大模型的生態與技術對比:以百度文心4.5開源為視角

技術對比&#xff1a;開源與閉源大模型的優劣勢 性能對比&#xff1a;算力效率與場景適配的博弈 在模型性能的競技場上&#xff0c;開源與閉源大模型呈現出明顯的差異化特征。以百度文心4.5開源系列為例&#xff0c;其47B參數的混合專家&#xff08;MoE&#xff09;模型在飛槳…

企業電商解決方案哪家好?ZKmall模塊商城全渠道支持 + 定制化服務更省心

在數字化浪潮席卷各行各業的當下&#xff0c;企業要想拓展市場、提升競爭力&#xff0c;搭建專屬電商平臺已經成了繞不開的選擇。但市場上的電商解決方案五花八門&#xff0c;怎么才能挑到真正適合自己的&#xff1f;其實道理很簡單&#xff1a;能同時搞定全渠道支持和定制化服…

使用哪種語言的人更容易通過面試?

Ruby 和 Swift&#xff01;似乎語言越大眾面試通過率越低&#xff0c;畢竟崗位數量有限&#xff0c;Java 和 C 程序員所面對的競爭也會更加激烈。使用 Ruby 和 Swift 的程序員比例到底怎么樣&#xff1f;我們可以從 Google Trends 中發現一些蛛絲馬跡。最火熱的 Java 的熱度平均…

Axios 二次封裝高級教程(含請求取消等功能)

Axios 二次封裝高級教程&#xff08;含請求取消等功能&#xff09; 整理不易&#xff0c;收藏、點贊、關注哦&#xff01; 一、總體架構設計 目的&#xff1a;構建一套功能完善、易用且健壯的 HTTP 請求封裝層 核心功能&#xff1a; 請求攔截、響應攔截請求取消&#xff08;防…

MobileNet V1的Pytorch實現并加載預訓練模型進行驗證

一. 環境 windonws 11RTX5060CUDA 12.8Pytorch 2.9.0dev20250630cu128torchvision 0.23.0dev20250701cu128 二. 代碼 基于Mobilenet-CustomData 的Mobilenet_Pretrain.ipynb 1. 定義Mobile Net V1 import os import time import torch import torch.nn as nn import torch…

HTTP協議利用TCP的特性來實現長連接

在討論網絡協議時,經常會有人提出這樣一個問題:“既然HTTP是基于TCP的,而TCP本身支持長連接,為什么HTTP不支持長連接?”這種說法其實是一種誤解。實際上,HTTP確實可以并且經常使用長連接(也稱為持久連接)。 什么是長連接? 首先,我們需要明確什么是“長連接”。在網…

整流電路Multisim電路仿真實驗匯總——硬件工程師筆記

目錄 1 整流電路基礎 1.1 整流電路基本原理 1.2 整流電路的類型 1.2.1 單相整流電路 1.2.2 三相整流電路 1.3 整流電路的應用 1.3.1 直流電源 1.3.2 電池充電器 1.3.3 變頻調速系統 1.34 電解和電鍍 1.4 整流電路的優缺點 1.4.1 優點 1.4.2 缺點 2 二極管整流電路…

LangChain 全面入門

什么是 LangChain&#xff1f; LangChain 是一個專門為 大語言模型 (LLM) 應用開發設計的開源框架&#xff0c;幫你快速實現&#xff1a; ? 多輪對話 ? 知識庫問答 (RAG) ? 多工具協同調用 (function calling / tool) ? 智能體 Agent 自動決策任務鏈 解耦 LLM 接口、Prom…

RabbitMQ 高級特性之消息確認

1. 簡介 RabbitMQ 的消息發送流程&#xff1a; producer 將消息發送給 broker&#xff0c;consumer 從 broker 中獲取消息并消費 那么在這里就涉及到了兩種消息發送&#xff0c;即 producer 與 broker 之間和 consumer 與 broker 之間。 “消息確認” 討論的是 consumer 與…

【51單片機用數碼管顯示流水燈的種類是按鈕控制數碼管加一和流水燈】2022-6-14

緣由 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共陰0~F消隱減號 unsigned char Js0, miao0;//中斷計時 秒 分 時 毫秒 sbit k0P3^0; sbit k1P3^1; void smxs(u…

Android15 開機動畫播放結束之后如何直接啟動應用

問題背景 軟件版本:Android15 在一些需求場景里面,需要開機動畫播放結束立馬去啟動一個應用,下面介紹如何實現這種方案。 解決方案 首選我們需要知道開機動畫播放結束之后的流程,這里會調用到wms里面,也就是一些enableScreen之類的函數,知道這個大概流程之后,再去對應…

AI實踐:大模型痛點和解決方案討論

大家好&#xff0c;我是星野&#xff0c;歡迎來到我的CSDN博客。在這個技術日新月異的時代&#xff0c;我們一起學習&#xff0c;共同進步。 今天想和大家分享的是大模型在實際應用中的痛點以及解決方案&#xff0c;特別是RAG&#xff08;檢索增強生成&#xff09;技術。 大模…

Web前端工程化

Web前端工程化 前端工程化是指將軟件工程的方法和原則應用到前端開發中&#xff0c;以提高開發效率、保證代碼質量、便于團隊協作和項目維護的一套體系化實踐。以下是前端工程化的主要內容和實踐&#xff1a; 核心組成部分 1. 模塊化開發 JavaScript模塊化&#xff1a;Comm…

Java 原生 HTTP Client

?介紹 Java 原生 HttpClient 是從 Java 11 開始引入的標準庫&#xff0c;用于簡化 HTTP 請求的發送與響應處理。它支持同步和異步請求&#xff0c;并內置對 HTTP/1.1 和 HTTP/2 協議的支持。HttpClient 提供了易用的 API 來設置請求頭、請求體、處理響應以及配置 SSL/TLS 加密…

【C語言刷題】第十天:加量加餐繼續,代碼題訓練,融會貫通IO模式

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題 &#x1f349;學習方向&#xff1a;C/C方向 ??人生格言&#xff1a;為天地立心&#xff0c;為生民立命&#xff0c;為…

【WEB】Polar靶場 6-10題 詳細筆記

六.jwt 這題我又不會寫 先來了解下jwt **JWT&#xff08;JSON Web Token&#xff09;**是一種基于JSON的開放標準&#xff08;RFC 7519&#xff09;&#xff0c;主要用于在網絡應用環境間傳遞聲明信息。JWT通常用于身份驗證和信息交換&#xff0c;確保在各方之間安全地傳輸信…

高階亞馬遜運營秘籍:關鍵詞矩陣打法深度解析與應用

當競爭對手還在為單個大詞競價廝殺時&#xff0c;頭部賣家已悄然構建了一張覆蓋數千長尾關鍵詞的隱形網絡&#xff0c;精準觸達每一個細分需求&#xff0c;以更低的成本撬動更高的轉化率在亞馬遜流量紅利消退、廣告成本高企的2025年&#xff0c;傳統“爆款關鍵詞”打法已顯疲態…