Beispiel #1
0
    def __init__(self, net_params):
        super(Network, self).__init__()
        # initialize slayer
        slayer = spikeLayer(net_params['neuron'], net_params['simulation'])

        self.slayer = slayer
        # define network functions
        self.fc1 = slayer.dense(Nin, Nhid)
        self.fc2 = slayer.dense(Nhid, Nout)
	def __init__(self, net_params):
		super(Network, self).__init__()
		# initialize slayer
		slayer = spikeLayer(net_params['neuron'], net_params['simulation'], fullRefKernel=True)

		self.slayer = slayer
		# define network functions
		self.fc1   = slayer.dense(Nin, Nout)
		W1 = np.loadtxt('test_files/snnData/w1Initial.txt')
		self.fc1.weight = torch.nn.Parameter(torch.FloatTensor(W1.reshape((Nout, Nin , 1, 1, 1))).to(self.fc1.weight.device), requires_grad = True)
Beispiel #3
0
# testing against known snn data ##############################################
verbose = True if (('-v' in sys.argv) or ('--verbose' in sys.argv)) else False

net_params = SlayerParams(CURRENT_TEST_DIR + "/test_files/snnData/network.yaml")

Ns = int(net_params['simulation']['tSample'] / net_params['simulation']['Ts'])
Nin = int(net_params['layer'][0]['dim'])
Nhid = int(net_params['layer'][1]['dim'])
Nout = int(net_params['layer'][2]['dim'])

device = torch.device('cuda')
# device = torch.device('cuda:1')

# initialize slayer
# slayer = spikeLayer(net_params['neuron'], net_params['simulation'])
slayer = spikeLayer(net_params['neuron'], net_params['simulation'], fullRefKernel = True).to(device)

# define network functions
fc1   = slayer.dense(Nin, Nhid).to(device)
fc2   = slayer.dense(Nhid, Nout).to(device)

# load input spikes
spikeAER = np.loadtxt('test_files/snnData/spikeIn.txt')
spikeAER[:,0] /= net_params['simulation']['Ts']
spikeAER[:,1] -= 1

spikeData = np.zeros((Nin, Ns))
for (tID, nID) in np.rint(spikeAER).astype(int):
	if tID < Ns : spikeData[nID, tID] = 1/net_params['simulation']['Ts']
spikeIn = torch.FloatTensor(spikeData.reshape((1, Nin, 1, 1, Ns))).to(device)
device = torch.device('cuda')

net_params = SlayerParams(CURRENT_TEST_DIR + "/test_files/parameters.yaml")

Ns = int(net_params['simulation']['tSample'] / net_params['simulation']['Ts'])
spikeData = np.zeros((2, Ns))
spikeData[0, 100] = 1 / net_params['simulation']['Ts']
spikeData[0, 120] = 1 / net_params['simulation']['Ts']
spikeData[0, 870] = 1 / net_params['simulation']['Ts']
spikeData[1, 153] = 1 / net_params['simulation']['Ts']
spikeData[1, 680] = 1 / net_params['simulation']['Ts']

spike = torch.FloatTensor(spikeData.reshape((1, 1, 1, 2, Ns))).to(device)

slayer = spikeLayer(net_params['neuron'], net_params['simulation']).to(device)

a = slayer.psp(spike)

print('neuron type: ', slayer.neuron['type'])
print('Ts         : ', slayer.simulation['Ts'])
print('spikeData  : ', spikeData.shape)
print('spike      : ', spike.shape)
print('psp        : ', a.shape)

###############################################################################
# testing dense layer #########################################################

fcLayer1 = slayer.dense(512, 10)
fcLayer2 = slayer.dense((34, 34), 10)
fcLayer3 = slayer.dense((34, 34, 2), 10)