脉冲神经网络:MATLAB实现脉冲神经网络(Spiking Neural Network,SNN) 用于图像分类
一、脉冲神经网络
脉冲神经网络 (Spiking Neural Network,SNN) ,是第三代神经网络。其旨在弥合神经科学和机器学习之间的差距,使用最拟合生物神经元机制的模型来进行计算,更接近生物神经元机制。脉冲神经网络与目前流行的神经网络和机器学习方法有着根本上的不同。SNN 使用脉冲——这是一种发生在时间点上的离散事件——而非常见的连续值。每个峰值由代表生物过程的微分方程表示出来,其中最重要的是神经元的膜电位。本质上,一旦神经元达到了某一电位,脉冲就会出现,随后达到电位的神经元会被重置。对此,最常见的模型是 Leaky Integrate-And-Fire (LIF) 模型。此外,SNN 通常是稀疏连接的,并会利用特殊的网络拓扑。
二、数据集简介
训练集共有十张光学字符图片构成分别是1,2,3,4,5,6,7,8,9,0。其对应类别可表示为:
1: 1 0 0 0 0 0 0 0 0 0
2: 0 1 0 0 0 0 0 0 0 0
3: 0 0 1 0 0 0 0 0 0 0
4: 0 0 0 1 0 0 0 0 0 0
5: 0 0 0 0 1 0 0 0 0 0
6: 0 0 0 0 0 1 0 0 0 0
7: 0 0 0 0 0 0 1 0 0 0
8: 0 0 0 0 0 0 0 1 0 0
9: 0 0 0 0 0 0 0 0 1 0
0: 0 0 0 0 0 0 0 0 0 1
原始图像(训练集):

将上述10个光学字符图像编码成时间脉冲:

含噪图像(测试集):

三、MATLAB实现
3.1部分代码如下:
最大训练次数为30次,训练集上准确率随迭代次数的变化图如下:

可以看出SNN在训练集上准确率达到90%。
3.2测试集上的预测效果:
预测值为:
1: 1 0 0 0 0 0 0 0 0 0 (正确)
2: 0 1 0 0 0 0 1 0 0 0 (错误)
3: 0 0 1 0 0 0 0 0 0 0 (正确)
4: 0 0 0 1 0 0 0 0 0 0 (正确)
5: 0 0 0 0 1 0 0 0 0 0 (正确)
6: 0 0 0 0 0 1 0 0 0 0 (正确)
7: 0 0 0 0 0 0 1 0 0 0 (正确)
8: 0 0 0 1 0 0 0 1 0 0 (错误)
9: 0 0 0 0 0 0 0 0 1 0 (正确)
0: 0 0 0 0 0 0 0 0 0 1 (正确)
由此可以看出,SNN在测试集上的准确率为80%。
四、完整MATLAB代码
完整MATLAB代码请添加up主的主页联系方式。