SpikingJelly笔记之泊松编码

news2024/9/21 4:32:50

文章目录

  • 前言
  • 一、泊松编码的原理
  • 二、生成符合泊松分布的脉冲序列
  • 三、SpikingJelly中的泊松编码
  • 四、Lena图像的泊松编码与还原
    • 1.原始图像
    • 2.图像编码
    • 3.图像还原
  • 总结


前言

记录SpikingJelly中泊松编码的使用方法,对图像数据进行编码与还原


一、泊松编码的原理

基于频率的编码方式,将输入编码为发放次数分布符合泊松过程的脉冲序列
P ( X = k ) = λ k k ! e − λ P(X=k)=\frac{{\lambda}^{k}}{k!}{e}^{-\lambda} P(X=k)=k!λkeλ
均值λ:时间T内发放的脉冲数目
根据输入决定每个时间步发放脉冲的概率[0,1],各时间步相互独立

二、生成符合泊松分布的脉冲序列

out_spike = torch.rand_like(x).le(x).to(x)

(1)生成与输入形状相同的标准正态分布随机值
(2)将生成值与输入[0,1]比较,<=为1,>为0
(3)将比较生成的布尔值转化为与输入相同的数据类型

三、SpikingJelly中的泊松编码

from spikingjelly.activation_based import encoding
pe = encoding.PoissonEncoder() # 泊松编码器
# 输出脉冲序列,T:时间步长,w:图像宽度,h:图像高度
out_spike = torch.zeros((T, w, h), dtype=torch.bool)
# 按时间步根据输入生成脉冲序列,相互独立
for t in range(T):
    out_spike[t] = pe(x) # x需要归一化[0,1]

四、Lena图像的泊松编码与还原

1.原始图像

读取、展示原始图像

####################泊松编码####################
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import torch
from spikingjelly.activation_based import encoding
from spikingjelly import visualizing
####################读取图像####################
img = np.array(Image.open('../dataset/lena.bmp')) / 255
x = torch.from_numpy(img)
w, h = x.shape
plt.figure()
plt.imshow(x, cmap='gray')
plt.axis('off')

2.图像编码

输出泊松编码后每个时间步的图像

####################泊松编码####################
T = 9 # 时间步长
pe = encoding.PoissonEncoder()
out_spike = torch.zeros((T, w, h), dtype=torch.bool)
for t in range(T):
    out_spike[t] = pe(x)
# 每个时间步的编码图像
nrows, ncols, space = 3, 3, 30
figsize, dpi = (6, 4), 200
visualizing.plot_2d_feature_map(x3d=out_spike.float().numpy(),
                                nrows=nrows,
                                ncols=ncols,
                                space=space,
                                title='PoissonEncoder',
                                figsize=figsize,
                                dpi=dpi)

3.图像还原

按时间步累加可重构出原始图像,时间步T越长,累加结果越接近原始图像

####################编码结果累加####################
T = 100 # 时间步长
pe = encoding.PoissonEncoder()
out_spike = torch.zeros((w, h), dtype=torch.float)
out_spikes = torch.zeros((5, w, h), dtype=torch.float)
# 按时间步累加
show_step = 20
for t in range(T):
    out_spike += pe(x)
    if(t % show_step == 0):
        out_spikes[t//show_step] = out_spike
# 归一化
for i in range(T//show_step):
    out_spikes[i] = (out_spikes[i]-out_spikes[i].min()) / (out_spikes[i].max()-out_spikes[i].min())
# 按时间步累加的编码图像
nrows, ncols, space = 1, T//show_step, 30
figsize, dpi = (6, 4), 200
visualizing.plot_2d_feature_map(x3d=out_spikes.numpy(),
                                nrows=nrows,
                                ncols=ncols,
                                space=space,
                                title='PoissonEncoder',
                                figsize=figsize,
                                dpi=dpi)
plt.axis('off')
plt.show()


总结

泊松编码将输入转化为脉冲序列,是一种基于频率编码的方式
较大的输入对应于较高的脉冲频率
泊松编码的输入需要归一化[0,1]
使用spikingjelly.visualizing可以方便作图

参考:
[1] 时间驱动:编码器
[2]【Spikingjelly】SNN框架教程的代码解读_3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1366044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI-数学-初中-1.1二次函数图像及顶点式

一元二次方程ax^2bxc0&#xff08;a≠0&#xff09;的根的判别式是b^2-4ac&#xff0c;用“Δ”表示(读做“delta”) 实数根就是指方程式的解为实数&#xff0c;实数根也经常被叫为实根。 判别式Δb^2-4ac 若Δb^2-4ac&#xff1c;0,二次方程无实数根 若Δb^2-4ac0,二次方程有…

dynamic_cast, RTTI, 整理

主要是参考下图&#xff0c;了解内存布局&#xff0c;然后写个实例程序就差不多明白了&#xff0c;但是需要熟悉指针转换。 1) 只有多态类才有RTTI信息&#xff0c;dynamic_cast正是运用RTTI进行转换&#xff0c;属于运行时类型检查。 2) dynamic_cast判断两个指针是否能转换…

【大数据】Spark学习笔记

初识Spark Spark和Hadoop HadoopSpark起源时间20052009起源地MapReduceUniversity of California Berkeley数据处理引擎BatchBatch编程模型MapReduceResilient distributed Datesets内存管理Disk BasedJVM Managed延迟高中吞吐量中高优化机制手动手动APILow levelhigh level流…

【花艺电商】SpringBoot集成MyBatis-Plus、Swagger2、SpringSecurity、OAuth2等技术整合开发

目录 一、功能介绍 1. 说明 2. 功能实现 3. 技术应用 二、技术详述 1.MyBatis-Plus 主要体现 项目应用 2.SpringSecurity 应用作用 三、页面展示 1. 登入 2. 主页 3. 详情 4. 购物车 5. 订单 6. 沙箱支付 每篇一获 一、功能介绍 1. 说明 这个项目主要使用了…

SpringIOC之support模块FileSystemXmlApplicationContext

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

单向可控硅充电电路图

单向可控硅工作原理 单向可控硅有阳极A、阴极K、控制极G三个电极&#xff0c;由四层半导体PNPN构成。单向可控硅有三个PN结&#xff0c;其内部结构与等效电路符号如图4-10所示。单相可控硅可等效看成一个PNP型三极管Vl和一个NPN型三极管V2组合而成&#xff0c;Vl基极和V2集电极…

KPU特征识别

前面的颜色识别、二维码识别都是使用了一些简单的图像处理功能&#xff0c;而更高 级的机器视觉就需要使用 KPU 。可以简单类别为计算机的 GPU &#xff08;显卡&#xff09;&#xff0c;本质是 实现高速的图像数据运算 我们来简单介绍一下 K210 的 KPU 。 KPU 是 K21…

vue3开启摄像头并进行拍照

文章目录 一、前言二、文档三、实现3.1、封装3.2、使用3.3、效果 四、最后 一、前言 Vue3 调用本地摄像头实现拍照功能&#xff0c;由于调用摄像头有使用权限&#xff0c;只能在本地运行&#xff0c;线上需用 https 域名才可以使用。主要是使用navigator.mediaDevices.getUser…

SpringBoot-自定义监听器

Spring Boot提供了强大的事件模型&#xff0c;其中包括多种内置监听器&#xff0c;同时也支持开发者自定义监听器。通过实现ApplicationListener接口&#xff0c;开发者可以创建自己的监听器&#xff0c;并在Spring Boot应用程序中进行配置。这样一来&#xff0c;在特定的应用程…

神经网络的核心:简单易懂理解 PyTorch 非线性激活函数

目录 torch.nn子函数非线性激活详解 nn.Softmin Softmin 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.Softmax Softmax 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.Softmax2d Softmax2d 函数简介 函数工作原理 输入…

FineBI实战项目一(9):每日不同支付方式订单总额/订单笔数

1 明确数据分析目标 统计每种支付方式的订单个数以及订单总金额 2 创建用于保存数据分析结果的表 create table app_order_paytype(id int primary key auto_increment,dt date,pay_type varchar(20),total_money double,total_cnt int ); 3 编写SQL语句进行数据分析 selec…

vue3 修饰符大全(近万字长文)

系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、事件修饰符&#xff08;Event Modifiers&#xff09;1、.stop&#xff08;阻止事件冒泡&#xff09;2、.prevent&#xff08;阻止事件的默认行为&#xff09;3、.capture&#xff08;使用事件捕获模式…

何为算法之空间复杂度

前言 不知前面所讲的算法的十大特征你是否记住了呢&#xff1f;其实除了这十大特征之外&#xff0c;算法还有两个衡量标准。 不同的问题需要使用不同的算法作为策略&#xff0c;不同的算法也可能占用不同的时间和空间来完成相同的任务&#xff0c;这时候&#xff0c;对算法的选…

强化学习的数学原理学习笔记 - RL基础知识

文章目录 Roadmap&#x1f7e1;基础概念贝尔曼方程&#xff08;Bellman Equation&#xff09;基本形式矩阵-向量形式迭代求解状态值 vs. 动作值 &#x1f7e1;贝尔曼最优方程&#xff08;Bellman Optimality Equation&#xff0c;BOE&#xff09;基本形式迭代求解 本系列文章介…

alibabacloud学习笔记02(小滴课堂)

什么是注册中心和常见的注册中心有哪些 介绍什么是Nacos和搭建实战 启动Nacos 使用前要先安装jdk。 linux学习专栏笔记中有&#xff0c;大家可以去看。 关闭nacos: 这样我们就登录了nacos。 项目集成Nacos实现服务直接的调用 每个子模块都去添加。 给每个子模块配置nacos配…

ReentrantLock底层原理学习二

以 ReentrantLock 作为切入点&#xff0c;来看看在这个场景中是如何使用 AQS 来实现线程的同步的 ReentrantLock 的时序图 调用 ReentrantLock 中的 lock()方法&#xff0c;源码的调用过程我使用了时序图来展现。ReentrantLock.lock() 这个是 reentrantLock 获取锁的入口 pu…

小H靶场笔记:DC-4

DC-4 January 4, 2024 2:37 PM Tags: teehee提权 Owner&#xff1a;只惠摸鱼 信息收集 探测靶机ip&#xff0c;发现应该是192.168.199.134 扫一下开放端口&#xff08;22、80&#xff09;、服务、版本、漏洞 根据扫描结果&#xff0c;在80端口可能有CSRF漏洞&#xff0c;…

好书推荐丨人工智能B2B落地实战:基于云和Python的商用解决方案(清华社)

文章目录 写在前面人工智能推荐图书图书简介简明目录 推荐理由粉丝福利写在后面 写在前面 本期博主给大家推荐一本全新正版的好书&#xff1a;《人工智能B2B落地实战&#xff1a;基于云和Python的商用解决方案》&#xff01;这本书来自清华大学出版社&#xff0c;是今年刚刚出…

十八:爬虫-JS逆向(下)

一&#xff1a;AES与DES DES对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥&#xff0c;信息的发送者。和信息的接收者在进行信息的传输与处理时&#xff0c;必须共同持有该密钥(称为对称密码),是一种对称加密算法。一般来说加密用的是encrypt()函…

Linux服务器安装操作Nginx

1.下载nginx压缩包 //进入/usr/local目录创建一个文件夹 cd /usr/local mkdir nginx cd nginx //下载tar包 wget http://nginx.org/download/nginx-1.20.1.tar.gz 2.配置nginx安装所需的环境 1. 安装gcc 安装 nginx 需要先将官网下载的源码进行编译&#xff0c;编译依赖 gc…