-
速率编码:信息通过神经元发放脉冲的频率来编码。更高的频率通常表示更强的激活。
-
延迟编码:信息通过脉冲的时间间隔来编码。不同的时间间隔可以表示不同的信息。
-
德尔塔调制:事件驱动型,根据时间信号前后
在灰度图中,像素的取值范围是从0到255,代表了不同的灰度级别。 当像素的值为0时,该像素是纯黑色;当像素的值为255时,该像素是纯白色。
速率编码就是利用图像中不同像素点的像素值大小进行编码。
黑色像素,他的像素值为0,即代表这个像素点发出脉冲的概率时0
白色像素,他的像素值为255,即代表这个像素点发出脉冲的概率是1
灰色像素,他的像素值为128,即代表这个像素点发出脉冲的概率是0.5
其他像素点按其概率大小,在一定的时间步长上发送脉冲序列。
脉冲神经网络Spiking neural network_脉冲神经网络snns-CSDN博客
Assume a LIF neuron model that charges up with time constant tau. Tensor dimensions use time first.
a = torch.Tensor([0.02, 0.5, 1])
spikegen.latency(a, num_steps=5, normalize=True, linear=True)
>>> tensor([
[0., 0., 1.],
[0., 0., 0.],
[0., 1., 0.],
[0., 0., 0.],
1., 0., 0.]])
在这个上下文中,"延迟编码"(Latency encoding)是一种将输入特征转换为脉冲信号的方式,具体是通过计算首次脉冲到达的时间。对于 LIF(Leaky Integrate-and-Fire)神经元模型,该模型根据输入特征的强度(值在0到1之间)来决定首次脉冲的发放时间。
过程解释:
-
输入特征:
a = torch.Tensor([0.02, 0.5, 1])
表示三个输入特征,它们的值范围在0到1之间。这里,0.02 表示一个较低的输入,0.5 是中等输入,1 是最高输入。 -
时间到首次脉冲:每个特征值会转换为首次脉冲到达的时间。值越大,首次脉冲的时间越早。
-
函数调用:
spikegen.latency(a, num_steps=5, normalize=True, linear=True)
:num_steps=5
表示模拟5个时间步。normalize=True
可能意味着将输入特征归一化为0到1之间。linear=True
指定了脉冲生成的线性方式。
-
tensor([[0., 0., 1.], # 第0步:仅第3个输入产生脉冲 [0., 0., 0.], # 第1步:没有脉冲 [0., 1., 0.], # 第2步:仅第2个输入产生脉冲 [0., 0., 0.], # 第3步:没有脉冲 [1., 0., 0.]]) # 第4步:仅第1个输入产生脉冲
在这个输出中,脉冲在特定的时间步被激活,这反映了输入特征的强度如何影响神经元的活动。特征值较低的输入在后续时间步中产生脉冲,而特征值较高的输入在早期时间步就激活了脉冲。
延迟编码是将像素值大的白色像素,即概率为1的像素点放在最左边,将概率为0的黑色像素点放在最右边
德尔塔调制基于事件驱动的脉冲编码方法。,使用snntorch.delta
函数进行编码。它获取所有时间步长前后特征之间的差值,如果差值为正且大于阈值,则认为包含一个事件,就会产生一个脉冲:
只有当两个后续时间步长之间的差达到阈值时才产生尖峰。可选地包括off_spikes以进行负面更改。
AI为你提供母语级高精翻译
a = torch.Tensor([1, 2, 2.9, 3, 3.9]) spikegen.delta(a, threshold=1) >>> tensor([1., 1., 0., 0., 0.]) spikegen.delta(a, threshold=1, padding=True) >>> tensor([0., 1., 0., 0., 0.]) b = torch.Tensor([1, 2, 0, 2, 2.9]) spikegen.delta(b, threshold=1, off_spike=True) >>> tensor([ 1., 1., -1., 1., 0.]) spikegen.delta(b, threshold=1, padding=True, off_spike=True) >>> tensor([ 0., 1., -1., 1., 0.])
Parameters:
-
data (torch.Tensor) – Data tensor for a single batch of shape [num_steps x batch x input_size]
-
threshold – Input features with a change greater than the thresold across one timestep will generate a spike, defaults to
0.1
-
padding (bool, optional) – Used to change how the first time step of spikes are measured. If
True
, the first time step will be repeated with itself resulting in0
’s for the output spikes. IfFalse
, the first time step will be padded with0
’s, defaults toFalse
-
off_spike (bool, optional) – If
True
, negative spikes for changes less than-threshold
, defaults toFalse
Logarithmic latency encoding of input data. Convert input features or target labels to spike times.
a = torch.Tensor([0.02, 0.5, 1])
spikegen.latency_code(a, num_steps=5, normalize=True)
>>> (tensor([4.0000, 0.1166, 0.0580]), tensor([False, False, False]))
print(below_threshold)
返回的布尔张量表示输入特征是否低于设定的触发阈值。在这个例子中,输出为 tensor([False, False, False])
,意思是:
- False 表示每个输入特征的值都高于阈值(0.01),因此它们在计算中都产生了脉冲。
具体来说:
- 如果某个特征低于阈值,相关位置的值会是
True
,这意味着该特征没有产生脉冲(在最后一个时间步仍然是 0)。 - 如果所有特征都大于等于阈值,则所有位置都是
False
,意味着每个特征都成功地触发了脉冲。
在这个情况下,所有特征都超过了 0.01,因此都触发了脉冲,没有特征被认为是“低于阈值”。
一文细谈SNN的基本数学原理,LIF模型,STDP与STBP学习方法-CSDN博客
如何看待第三代神经网络SNN?详解脉冲神经网络的架构原理、数据集和训练方法 原创-CSDN博客
一文通俗入门·脉冲神经网络(SNN)·第三代神经网络-CSDN博客
如何调整权重
在脉冲时序依赖可塑性(STDP)中
如果神经元的某个输入信号总是发生在整个神经元输出信号前的瞬间,该输入信号会变得更强效。而如果某个输入信号总是发生在神经元输出信号后的瞬间,该输入信号则会变得更弱效,所以得名"脉冲冲时序依赖可塑性"。