脉冲神经网络2:SNN的仿真2—感受野


import imageio
import numpy
img = imageio.imread("data/training/{}.png".format(0))
print(img)

# 定义感受野函数为rf
#  接受野的卷积
def rf(inp):
	sca1 =  0.625
	sca2 =  0.125
	sca3 = -0.125
	sca4 = -.5

	# 感受野核函数
	w = [[	sca4 ,sca3 , sca2 ,sca3 ,sca4],
	 	[	sca3 ,sca2 , sca1 ,sca2 ,sca3],
	 	[ 	sca2 ,sca1 , 	1 ,sca1 ,sca2],
	 	[	sca3 ,sca2 , sca1 ,sca2 ,sca3],
	 	[	sca4 ,sca3 , sca2 ,sca3 ,sca4]]

	pot = np.zeros([inp.shape[0],inp.shape[1]])
	ran = [-2,-1,0,1,2]
	ox = 2
	oy = 2

	# 卷积
	for i in range(inp.shape[0]):
		for j in range(inp.shape[1]):
			summ = 0
			for m in ran:
				for n in ran:
					if (i+m)>=0 and (i+m)<=inp.shape[0]-1 and (j+n)>=0 and (j+n)<=inp.shape[0]-1:
						summ = summ + w[ox+m][oy+n] * inp[i+m][j+n]/255
			pot[i][j] = summ
	return pot

pot = rf(img)

np.set_printoptions(formatter={'float': '{: 0.3f}'.format})
print(pot)

# 感受野处理后的图片返回后
imageio.imsave("rf_image.png",pot)

 0.png如下图所示

print(img)结果为:

[[255   0   0   0   0   0   0   0   0   0   0   0   0   0   0 255]
 [  0 255   0   0   0   0   0   0   0   0   0   0   0   0 255   0]
 [  0   0 255   0   0   0   0   0   0   0   0   0   0 255   0   0]
 [  0   0   0 255   0   0   0   0   0   0   0   0 255   0   0   0]
 [  0   0   0   0 255   0   0   0   0   0   0 255   0   0   0   0]
 [  0   0   0   0   0 255   0   0   0   0 255   0   0   0   0   0]
 [  0   0   0   0   0   0 255   0   0 255   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0 255 255   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0 255 255   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0 255   0   0 255   0   0   0   0   0   0]
 [  0   0   0   0   0 255   0   0   0   0 255   0   0   0   0   0]
 [  0   0   0   0 255   0   0   0   0   0   0 255   0   0   0   0]
 [  0   0   0 255   0   0   0   0   0   0   0   0 255   0   0   0]
 [  0   0 255   0   0   0   0   0   0   0   0   0   0 255   0   0]
 [  0 255   0   0   0   0   0   0   0   0   0   0   0   0 255   0]
 [255   0   0   0   0   0   0   0   0   0   0   0   0   0   0 255]]

print(pot)显示为

[[ 0.625  1.125  0.375 -0.250 -0.500  0.000  0.000  0.000  0.000  0.000
   0.000 -0.500 -0.250  0.375  1.125  0.625]
 [ 1.125  0.750  1.000  0.375 -0.250 -0.500  0.000  0.000  0.000  0.000
  -0.500 -0.250  0.375  1.000  0.750  1.125]
 [ 0.375  1.000  0.250  1.000  0.375 -0.250 -0.500  0.000  0.000 -0.500
  -0.250  0.375  1.000  0.250  1.000  0.375]
 [-0.250  0.375  1.000  0.250  1.000  0.375 -0.250 -0.500 -0.500 -0.250
   0.375  1.000  0.250  1.000  0.375 -0.250]
 [-0.500 -0.250  0.375  1.000  0.250  1.000  0.375 -0.750 -0.750  0.375
   1.000  0.250  1.000  0.375 -0.250 -0.500]
 [ 0.000 -0.500 -0.250  0.375  1.000  0.250  0.500  0.125  0.125  0.500
   0.250  1.000  0.375 -0.250 -0.500  0.000]
 [ 0.000  0.000 -0.500 -0.250  0.375  0.500  0.000  1.375  1.375  0.000
   0.500  0.375 -0.250 -0.500  0.000  0.000]
 [ 0.000  0.000  0.000 -0.500 -0.750  0.125  1.375  1.250  1.250  1.375
   0.125 -0.750 -0.500  0.000  0.000  0.000]
 [ 0.000  0.000  0.000 -0.500 -0.750  0.125  1.375  1.250  1.250  1.375
   0.125 -0.750 -0.500  0.000  0.000  0.000]
 [ 0.000  0.000 -0.500 -0.250  0.375  0.500  0.000  1.375  1.375  0.000
   0.500  0.375 -0.250 -0.500  0.000  0.000]
 [ 0.000 -0.500 -0.250  0.375  1.000  0.250  0.500  0.125  0.125  0.500
   0.250  1.000  0.375 -0.250 -0.500  0.000]
 [-0.500 -0.250  0.375  1.000  0.250  1.000  0.375 -0.750 -0.750  0.375
   1.000  0.250  1.000  0.375 -0.250 -0.500]
 [-0.250  0.375  1.000  0.250  1.000  0.375 -0.250 -0.500 -0.500 -0.250
   0.375  1.000  0.250  1.000  0.375 -0.250]
 [ 0.375  1.000  0.250  1.000  0.375 -0.250 -0.500  0.000  0.000 -0.500
  -0.250  0.375  1.000  0.250  1.000  0.375]
 [ 1.125  0.750  1.000  0.375 -0.250 -0.500  0.000  0.000  0.000  0.000
  -0.500 -0.250  0.375  1.000  0.750  1.125]
 [ 0.625  1.125  0.375 -0.250 -0.500  0.000  0.000  0.000  0.000  0.000
   0.000 -0.500 -0.250  0.375  1.125  0.625]]

感受野处理后保存的图片为:

已标记关键词 清除标记
NNBP 1.0用法说明 本程序是BP算法的演示程序, 其中的Levenberg-Marquardt算法具有实用价值. 程序主界面如下: 一、网络训练 程序默认状态是样本训练状态,现将样本训练状态下的如何训练网络进行说明: 1. 系统精度: 定义系统目标精度,根据需要定义网络训练误差精度.误差公式是对训练出网络的输出层节点和实际的网络输出结果求平方差的和. 2. 最大训练次数: 默认为10000次,根据需要调整,如果到达最大训练次数网络还未能达到目标精度,程序退出. 3. 步长: 默认为0.01,由于采用变步长算法,一般不需人工设置. 4. 输入层数目: 人工神经网络的输入层神经元的节点数目. 5. 隐含层数目: 人工神经网络的隐含层神经元的节点数目. 6. 输出层数目: 人工神经网络的输出层神经元的节点数目. 7. 训练算法: 强烈建议选取Levenberg-Marquardt算法,该算法经过测试比较稳定. 8. 激活函数: 不同的网络激活函数表现的性能不同,可根据实际情况选择. 9. 样本数据的处理: 由于程序没有实现归一化功能, 因此用来训练的样本数据首先要归一化后才能进行训练. 其中: 数据输入: 就是选择用来训练的样本的文件,文件格式为每个参与训练网络的样本数据(包括输入和输出)占用一行,数据之间用空格隔开. 存储网络: 就是用来存放最终训练成功的网络权值等信息的文件,在仿真时调用用. 保存结果: 网络训练的最终结果,副产品,可丢弃,用来查看网络训练的精度. 10. 训练 点击该按钮用来训练网络。 二、网络仿真 首先要点击按钮 切换到数据仿真状态. 界面如图: 调入训练好的网络,然后选择用来仿真的数据(只包含输入层神经元的节点数目),点击仿真按钮即可。 调入网络: 选择已经训练好的网络文件,假设net_lm_sigmoid_16.txt文件是已经满足精度和泛化能力较好的网络文件,就调入该文件。 数据输入: 选择用来仿真的数据文件,该文件格式同前面介绍的用来训练网络的文件的格式,但需要去掉用网络来模拟的参数,只提供用来测试的网络输入层数据。 仿真结果: 用来保存对测试数据仿真后得到结果文件,即为所想要的数据。
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页