【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;传统“爆款关键词”打法已显疲态…