def BindsNET_cpu(n_neurons, time): t0 = t() torch.set_default_tensor_type("torch.FloatTensor") t1 = t() network = Network() network.add_layer(Input(n=n_neurons), name="X") network.add_layer(LIFNodes(n=n_neurons), name="Y") network.add_connection( Connection(source=network.layers["X"], target=network.layers["Y"]), source="X", target="Y", ) data = {"X": poisson(datum=torch.rand(n_neurons), time=time)} network.run(inputs=data, time=time) return t() - t0, t() - t1
render_interval = args.render_interval print_interval = args.print_interval gpu = args.gpu if gpu: torch.set_default_tensor_type("torch.cuda.FloatTensor") torch.cuda.manual_seed_all(seed) else: torch.manual_seed(seed) # Build network. network = Network(dt=dt) # Layers of neurons. inpt = Input(shape=(80, 80), traces=True) # Input layer exc = LIFNodes(n=n_neurons, refrac=0, traces=True) # Excitatory layer readout = LIFNodes(n=16, refrac=0, traces=True) # Readout layer layers = {"X": inpt, "E": exc, "R": readout} # Connections between layers. # Input -> excitatory. w = 0.01 * torch.rand(layers["X"].n, layers["E"].n) input_exc_conn = Connection( source=layers["X"], target=layers["E"], w=0.01 * torch.rand(layers["X"].n, layers["E"].n), wmax=0.02, norm=0.01 * layers["X"].n, ) # Excitatory -> readout.
# So, TxCxHxW sample_shape = train_dataset[0]["encoded_image"].shape print(args.dataset, " has shape ", sample_shape) conv_size = int((sample_shape[-1] - kernel_size + 2 * padding) / stride) + 1 per_class = int((n_filters * conv_size * conv_size) / 10) # Build a small convolutional network network = Network() # Make sure to include the batch dimension but not time input_layer = Input(shape=(1, *sample_shape[1:]), traces=True) conv_layer = LIFNodes( n=n_filters * conv_size * conv_size, shape=(1, n_filters, conv_size, conv_size), traces=True, ) conv_conn = Conv2dConnection( input_layer, conv_layer, kernel_size=kernel_size, stride=stride, update_rule=PostPre, norm=0.4 * kernel_size ** 2, nu=[1e-4, 1e-2], wmax=1.0, )
from bindsnet_qa.network import Network from bindsnet_qa.pipeline import EnvironmentPipeline from bindsnet_qa.encoding import bernoulli from bindsnet_qa.network.topology import Connection from bindsnet_qa.environment import GymEnvironment from bindsnet_qa.network.nodes import Input, LIFNodes from bindsnet_qa.pipeline.action import select_softmax # Build network. network = Network(dt=1.0) # Layers of neurons. inpt = Input(n=80 * 80, shape=[80, 80], traces=True) middle = LIFNodes(n=100, traces=True) out = LIFNodes(n=4, refrac=0, traces=True) # Connections between layers. inpt_middle = Connection(source=inpt, target=middle, wmin=0, wmax=1e-1) middle_out = Connection(source=middle, target=out, wmin=0, wmax=1) # Add all layers and connections to the network. network.add_layer(inpt, name="Input Layer") network.add_layer(middle, name="Hidden Layer") network.add_layer(out, name="Output Layer") network.add_connection(inpt_middle, source="Input Layer", target="Hidden Layer") network.add_connection(middle_out, source="Hidden Layer", target="Output Layer")
np.random.seed(seed) torch.cuda.manual_seed_all(seed) torch.manual_seed(seed) # Sets up Gpu use if gpu and torch.cuda.is_available(): torch.cuda.set_device(device_id) # torch.set_default_tensor_type('torch.cuda.FloatTensor') else: torch.manual_seed(seed) network = Network(dt=dt) inpt = Input(784, shape=(1, 28, 28)) network.add_layer(inpt, name="I") output = LIFNodes(n_neurons, thresh=-52 + np.random.randn(n_neurons).astype(float)) network.add_layer(output, name="O") C1 = Connection(source=inpt, target=output, w=0.5 * torch.randn(inpt.n, output.n)) C2 = Connection(source=output, target=output, w=0.5 * torch.randn(output.n, output.n)) network.add_connection(C1, source="I", target="O") network.add_connection(C2, source="O", target="O") spikes = {} for l in network.layers: spikes[l] = Monitor(network.layers[l], ["s"], time=time) network.add_monitor(spikes[l], name="%s_spikes" % l)