SNN 输入编码过程理解

本文通过解析SNN中的泊松编码,探讨如何将MNIST图像数据转化为脉冲序列。每张图片的像素值代表灰度,灰度值越大,脉冲激活的概率越高。利用灰度值/255作为神经元激活的概率,根据泊松分布生成脉冲序列,实现SNN的输入编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SNN 输入编码解析

以Bindset中的examples/eth_mnist.py为例

SNN的输入是时间脉冲,如何把mnist图片数据转换为脉冲序列呢?

首先mnist数据中,每张图片的像素为28×28,实际表示为28×28的矩阵,矩阵中每个元素是0-255之间的整数。

SNN需要输入一个脉冲序列,大体的输入格式是 长度为采样次数,每个元素为0/1,代表激活与否。

其中一种常见的序列编码为泊松编码

泊松分布

描述具有固定频率的事件,在某段时间内发生的概率。

那每个像素的灰度值,代表了颜色的深浅程度。灰度值越大,该像素与背景色之间的差距越大。

换个角度理解,灰度值越大,我们眼睛越容易注意到这个像素,也就越容易激活神经元。

用灰度值/255来比作看到这个像素,然后被神经元注意到的概率。

这样的话我们就有了一个固定的频率,接下来根据泊松分布,即可得到在指定的时间段内,脉冲产生的概率分布,根据这个分布产生脉冲序列即可。

具体代码和注释如下:

def poisson(
    datum: torch.Tensor, time: int, dt: float = 1.0, device="cpu", **kwargs
) -> torch.Tensor:
    
SNN代表脉冲神经网络(Spiking Neural Network),而LIF是其中一种常用的模型,代表了Leaky Integrate-and-Fire(漏电整流-发放)模型。 在LIF模型中,神经元被建模为一个电容器,该电容器通过输入的脉冲信号进行充电,并且随着时间的推移慢慢放电。当电容器的电压超过一个阈值时,神经元会发放一个脉冲信号,并将电压重置为基线值。这个过程可以简化为以下几个步骤: 1. 集成输入:神经元接收来自其他神经元的脉冲输入,每个输入都具有一个权重值,表示其相对重要性。这些输入脉冲会导致神经元电容器的电压增加。 2. 漏电:电容器的电压会随时间推移而自动减少,这是为了模拟神经元的漏电行为。这个过程可以使用一个时间常数来调节。 3. 阈值判断:当电容器的电压超过一个设定的阈值时,神经元会发放一个脉冲信号。这个阈值可以看作是神经元的兴奋性阈值。 4. 重置电压:一旦神经元发放了脉冲,电压会被重置为基线值,以准备接受下一个输入。 LIF模型的优点之一是它的简单性,它可以用较少的计算资源和存储空间来模拟神经元的行为。此外,LIF模型还能够在脉冲编码方案中提供高度的时间精度,这对于处理时间相关的信息非常重要。 希望这个简要的解释能够帮助你理解SNN的LIF模型。如果你有更多的问题,请随时提问!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值