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)
# 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)