Skip to content

[DYNAP-SE2] Output layer's neurons seem to be missing in the generated hardware configuration #10

Description

@MarcoBramini

I'm opening this issue because i couldn't find a way to identify the output neurons, after hardware deployment, on DYNAP-SE2:

  • The generated hardware configuration object, after network mapping, doesn't contain any reference to them: contrarily to what happens for the input neurons that are referenced and tracked in the input_channel_map attribute.
  • The output neurons seem to be missing in the configuration object and, therefore, not allocated (see attached code snippet)
n_input_channels = 12
n_population = 32
n_output_channels = 2

net = Sequential(
    LinearTorch((n_input_channels, n_population)), # 12 Input neurons
    LIFTorch(n_population, **neuron_parameters), # 32 Neurons
    LinearTorch((n_population, n_population)),
    LIFTorch(n_population,has_rec=True, **neuron_parameters), #32 Neurons
    LinearTorch((n_population, n_output_channels)),
    LIFTorch(n_output_channels, **neuron_parameters), # 2 Output Neurons
) # Tot neurons: 12+32+32+2 = 78

net_graph = net.as_graph()
spec = mapper(net_graph)

spec["Iscale"] *= 10

spec.update(autoencoder_quantization(**spec))
config = config_from_specification(**spec)

print(spec['n_neuron'] ) # Correctly prints 66 neurons (not considering the 12 input neurons)

# Print all synapses tags for every allocated neuron
tag = []
for core in config["config"].chips[0].cores:
    for neuron in core.neurons:
        for synapse in neuron.synapses:
            tag.append(synapse.tag)
print(np.unique(tag))
# Prints the tags of 76 neurons (but they should be 78): 
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
# 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
# 72 73 74 75]

# Print all destinations tags for every allocated neuron
tag = []
for core in config["config"].chips[0].cores:
    for neuron in core.neurons:
        for destination in neuron.destinations:
            if destination.x_hop != -7 and destination.tag != 0:
                tag.append(destination.tag)
print(np.unique(tag))
# Prints the tags of 64 neurons (but they should be 66):
# [12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
# 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
# 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75]

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions