diff --git a/src/Global_Var.py b/src/Global_Var.py index 288f9341aa0b3f82c059ddc562e37084527d8c38..a24a3b81a285024cfeefebe1b5444ee9985ea60d 100755 --- a/src/Global_Var.py +++ b/src/Global_Var.py @@ -30,7 +30,6 @@ class Global_Var(): InputPerEpoch = 100 stepMax = 0 Max = 0 - nbrClasses = 0 # General network information ------------------------------------ LayersNeuronsInfo = [] @@ -44,6 +43,7 @@ class Global_Var(): Accuracy = 0 finalLabels = None labelsExistance = False + ClassNbr = 0 oldIdSpike = None def __init__(self): @@ -62,6 +62,7 @@ class Global_Var(): self.Accuracy = 0 self.finalLabels = None self.labelsExistance = False + self.ClassNbr = 0 self.oldIdSpike = None # MongoDB connection --------------------------------------------- diff --git a/src/Modules/General/callbacks.py b/src/Modules/General/callbacks.py index 5f486d2231b00553b59832ecba345c67c6288f49..7c1e5abd849c49be8034e1c0304afc8d0f562b89 100755 --- a/src/Modules/General/callbacks.py +++ b/src/Modules/General/callbacks.py @@ -583,7 +583,7 @@ class callbacks(callbacksOp): indices = {} labelData = getNetworkInput(int(sliderValue)*float(updateInterval), g.updateInterval) if callback_context.triggered[0]['prop_id'].split('.')[0] in ["v-step","vis-update"]: - super.SpikesActivityPerInput = {i["layer"]:[[0 for _ in range(g.nbrClasses+1)] for _ in range(g.Layer_Neuron[i["layer"]])] for i in g.LayersNeuronsInfo} + super.SpikesActivityPerInput = {i["layer"]:[[0 for _ in range(g.ClassNbr)] for _ in range(g.Layer_Neuron[i["layer"]])] for i in g.LayersNeuronsInfo} for element in elements: if element["data"]['spiked'] != -1: element["data"]["spiked"] = 0 @@ -707,13 +707,13 @@ class callbacks(callbacksOp): def make_SpikeActivityPerInput(layer,dataLabel,Layer2DViewFilter): fig = make_subplots(rows=5, cols=1, shared_xaxes=True, vertical_spacing=0.08, specs=[[{'rowspan': 4}],[None],[None],[None],[{'rowspan': 1}]]) - fig.add_trace(go.Heatmap(z=super.SpikesActivityPerInput[layer] if layer in Layer2DViewFilter else [], colorscale= 'Reds', zmin=0, hovertemplate=('Class: %{x} <br>Neuron: %{y} <br>Spikes: %{z} <extra></extra>'),xgap=4,ygap=4),row=1, col=1) - fig.update_layout({"xaxis":dict(title="Class",tickmode="array",zeroline = False,tickvals=[i for i in range(g.nbrClasses+1)]),"yaxis":dict(title="Neuron",zeroline = False),"margin":{'l': 0, 'r': 0, 't': 5, 'b': 0},"uirevision":'no reset of zoom'}) + fig.add_trace(go.Heatmap(z=super.SpikesActivityPerInput[layer] if layer in Layer2DViewFilter else [], colorscale= 'Reds' if sum([item for row in super.SpikesActivityPerInput[layer] for item in row]) > 0 else "gray", zmin=0, hovertemplate=('Class: %{x} <br>Neuron: %{y} <br>Spikes: %{z} <extra></extra>'),xgap=4,ygap=4),row=1, col=1) + fig.update_layout({"xaxis":dict(title="Class",tickmode="array",zeroline = False,tickvals=[i for i in range(g.ClassNbr)]),"yaxis":dict(title="Neuron",zeroline = False),"margin":{'l': 0, 'r': 0, 't': 5, 'b': 0},"uirevision":'no reset of zoom'}) if (dataLabel == None) or (layer not in Layer2DViewFilter): fig.add_trace(go.Bar(x=[],y=[],hovertemplate=('Label: %{x} <br>Nbr: %{y} <extra></extra>')),row=5, col=1) else: fig.add_trace(go.Bar(x=list(dataLabel[0].keys()),y=list(dataLabel[0].values()),hovertemplate=('Label: %{x} <br>Nbr: %{y} <extra></extra>')),row=5, col=1) - fig.update_xaxes(tickvals=[i for i in range(g.nbrClasses+1)]) + fig.update_xaxes(tickvals=[i for i in range(g.ClassNbr)]) return fig # --------------------------------------------------------- # MongoDB operations @@ -751,8 +751,10 @@ class callbacks(callbacksOp): if not labels: return None - L = dict({i["_id"]: i["C"] for i in labels}) + L = dict({i: 0 for i in range(g.ClassNbr)}) + for l in labels: + L[l["_id"]] = l["C"] return [L, Max] def getSpike(timestamp, interval, layer, perNeuron): diff --git a/src/Modules/General/layout.py b/src/Modules/General/layout.py index e08e117773d38dfea8d122d1b3eac5ef735ec61f..cfbd7c2851856de99373be8309b9f9f85363f0dd 100755 --- a/src/Modules/General/layout.py +++ b/src/Modules/General/layout.py @@ -85,7 +85,7 @@ class layout(layoutOp): self.MaxSynapse.clear() self.Spikes2D = self.generate2DView(self.g,[str(i) for i in (i["layer"] for i in self.g.LayersNeuronsInfo)]) self.AccumulatedSpikes2D = {i["layer"]:[0 for n in self.Spikes2D if n["data"]["spiked"] != -1 and i["layer"] == n["data"]["parent"]] for i in self.g.LayersNeuronsInfo} - self.SpikesActivityPerInput = {i["layer"]:[[0 for j in range(self.g.nbrClasses+1)] for _ in range(self.g.Layer_Neuron[i["layer"]])] for i in self.g.LayersNeuronsInfo} + self.SpikesActivityPerInput = {i["layer"]:[[0 for j in range(self.g.ClassNbr)] for _ in range(self.g.Layer_Neuron[i["layer"]])] for i in self.g.LayersNeuronsInfo} self.Max = 0 def Vis(self): diff --git a/src/Modules/General/spark.py b/src/Modules/General/spark.py index eb175ab21d45eba707a0eedd9a5c2eb12e83e735..f07bc327d51fb5062100d1fc1a11aec6e1f111a4 100755 --- a/src/Modules/General/spark.py +++ b/src/Modules/General/spark.py @@ -56,8 +56,6 @@ class spark(sparkOp): if ('spikes' in self.g.db.list_collection_names()): M = max(M, pymongo.collection.Collection( self.g.db, 'spikes').find_one(sort=[("T", -1)])["T"]) - self.g.nbrClasses = pymongo.collection.Collection( - self.g.db, 'spikes').find_one(sort=[("Input", -1)])["Input"] if ('potential' in self.g.db.list_collection_names()): M = max(M, pymongo.collection.Collection( self.g.db, 'potential').find_one(sort=[("T", -1)])["T"]) @@ -66,8 +64,8 @@ class spark(sparkOp): self.g.db, 'synapseWeight').find_one(sort=[("T", -1)])["T"]) if ('labels' in self.g.db.list_collection_names()): self.g.labelsExistance = True - M = max(M, pymongo.collection.Collection( - self.g.db, 'labels').find_one(sort=[("T", -1)])["T"]) + M = max(M, pymongo.collection.Collection(self.g.db, 'labels').find_one(sort=[("T", -1)])["T"]) + self.g.ClassNbr = int(max(M, pymongo.collection.Collection(self.g.db, 'labels').find_one(sort=[("L", -1)])["L"]))+1 else: print("No labels")