From 1100114598c20649f52b69a09b2a49c9db93297e Mon Sep 17 00:00:00 2001
From: Elbez Hammouda <hammoudae@gmail.com>
Date: Mon, 7 Sep 2020 10:42:01 +0200
Subject: [PATCH] Update 07-09-2020

Fix cast error in examples
---
 .../features/builder/NeuronGroupRef.scala     |  1 -
 .../io/input/MnistFileInputStream.scala       |  7 +++-
 .../features/logging/NetworkLoading.scala     |  3 +-
 .../n2s3/apps/ExampleMnistCompression.scala   | 39 +++++++++++--------
 .../n2s3/apps/ExampleMnistPrune3Epoch.scala   | 13 ++++---
 .../n2s3/apps/ExampleMnistStaticThres.scala   |  6 +--
 6 files changed, 38 insertions(+), 31 deletions(-)

diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronGroupRef.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronGroupRef.scala
index 7f0024a..de69d6d 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronGroupRef.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronGroupRef.scala
@@ -124,7 +124,6 @@ def getIdentifierOf(ref: NeuronRef): Any = this.identifier+":"+ref.getIndex.mkSt
 
     ExternalSender.askTo(path, Destroy)
     neuronRefs = Some(newNeuronList)
-
   }
 
   /********************************************************************************************************************
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/MnistFileInputStream.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/MnistFileInputStream.scala
index 11e569f..e068f13 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/MnistFileInputStream.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/MnistFileInputStream.scala
@@ -232,8 +232,11 @@ class MnistFileInputStreamP(val imageFile: String, val labelFile: String,from:In
     throw new IOException("Error on magic number for image file: [" + imageFile + "]")
 
   //check the number of elements
-  val numberImage = imagesInputStream.readInt() / 6
-  val numberLabel = labelsInputStream.readInt() / 6
+  var numberImage = imagesInputStream.readInt()
+  numberImage = numberImage / (numberImage/sizeOfChunk)
+  var numberLabel = labelsInputStream.readInt()
+  numberLabel = numberLabel / (numberLabel/sizeOfChunk)
+
   private var numberOfReadImages: Int = 0
 
   var image : IndexedSeq[IndexedSeq[Float]] = _
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/logging/NetworkLoading.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/logging/NetworkLoading.scala
index f8379c5..6d2f651 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/logging/NetworkLoading.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/logging/NetworkLoading.scala
@@ -89,13 +89,12 @@ object NetworkLoading {
             ExternalConnectionSender.askTo(cnxPath,SetConnectionProperty(SynapticWeightFloat.asInstanceOf[ConnectionProperty[Any]] ,targetSyn._3))
           }catch{
             case x : NoSuchElementException => {
-              println("err")
               nGroup.neurons.head.group.connections.head.disconnectByPath(cnxPath)}
           }
 
           i = i+1
           if((i%500) == 0){
-            println(i+"/"+x)
+            println(i)
           }
         })
 
diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistCompression.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistCompression.scala
index 8c87557..7d75da5 100755
--- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistCompression.scala
+++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistCompression.scala
@@ -14,7 +14,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{InputNeuronGroupRef
 import fr.univ_lille.cristal.emeraude.n2s3.features.io.input._
 import fr.univ_lille.cristal.emeraude.n2s3.features.io.report.BenchmarkMonitorRef
 import fr.univ_lille.cristal.emeraude.n2s3.features.logging.graph.{SynapticWeightSelectGraph, SynapticWeightSelectGraphRef}
-import fr.univ_lille.cristal.emeraude.n2s3.features.logging.{NetworkSaving, SimMongoLog, NetworkLoading}
+import fr.univ_lille.cristal.emeraude.n2s3.features.logging.{NetworkLoading, NetworkSaving, SimMongoLog}
 import fr.univ_lille.cristal.emeraude.n2s3.models.neurons.LIF
 import fr.univ_lille.cristal.emeraude.n2s3.models.synapses.{InhibitorySynapse, QBGParameters, SimplifiedSTDP}
 import fr.univ_lille.cristal.emeraude.n2s3.support.N2S3ResourceManager
@@ -45,16 +45,16 @@ object  ExampleMnistCompression extends App {
   var log = false
   var prune = true
   var reinforce = true
-  var globalIteration = 3
-  var sizeChunk = 20000
+  var globalIteration = 6
+  var sizeChunk = 10000
 
   for(x <- 1 to 1) {
     implicit val timeout = Config.longTimeout
     alpha = ArrAlpha((x - 1) / 5)
     beta = ArrBeta((x - 1) % 5)
-    alpha = 0.05F
+    alpha = 0.24858284F  //0.05F
     beta = 0.1F
-    SimName = "100N" + "-" + x
+    SimName = "1600N" + "-" + x
     println("a:" + alpha + " b:" + beta)
     QBGParameters.alf_m = 0.005f
     QBGParameters.alf_p = 0.01f
@@ -89,8 +89,8 @@ object  ExampleMnistCompression extends App {
     //inputStream.append(stream)
 
     val unsupervisedLayer = n2s3.createNeuronGroup()
-      .setIdentifier("OutLayer")
-      .setNumberOfNeurons(100)
+      .setIdentifier("Layer1")  //Layer1 OutLayer
+      .setNumberOfNeurons(1600)
       .setNeuronModel(LIF, Seq(
         (MembranePotentialThreshold, 35 millivolts)))
 
@@ -98,8 +98,7 @@ object  ExampleMnistCompression extends App {
     unsupervisedLayer.connectTo(unsupervisedLayer, new FullConnection(() => new InhibitorySynapse()))
 
     n2s3.create()
-
-    iteration = 1
+    iteration = 6 //1
     inputLayer.neurons.toList.foreach(n => {
       CTotal += n.group.connections.length
     })
@@ -109,12 +108,12 @@ object  ExampleMnistCompression extends App {
     //showHeatMap(inputLayer,unsupervisedLayer)
     SynapsesIndex(inputLayer, unsupervisedLayer)
     SimTime = formatter.format(new Date())
-    folderName = SimName.split("-")(0) + " [" + x + "] " + SimTime
+    folderName = SimName.split("-")(0) + " [" + x + "] " + SimTime+ " " //PP & PWSR
     new File(folderName).mkdir()
 
-    println("Start loading "+System.currentTimeMillis())
-    NetworkLoading.from(n2s3,"100N-1 Arch 3 cropped")
-    println("Done loading "+System.currentTimeMillis())
+    //println("Start loading "+System.currentTimeMillis())
+    NetworkLoading.from(n2s3,"100N")
+    //println("Done loading "+System.currentTimeMillis())
     //NetworkLoading.fromWithDefaultWeights(n2s3,"100N [1] 03-02-2020 23:50:43/100N-1 Archce
     // 6 cropped","100N [1] 03-02-2020 23:50:43/100N-1 Arch 6 cropped",loadRandomWeights = false,binary = false)
     saveNeurones(unsupervisedLayer, "Initial")
@@ -142,6 +141,7 @@ object  ExampleMnistCompression extends App {
 
     while (iteration <= globalIteration) {
       simTime = ""
+      /*
       unsupervisedLayer.unfixNeurons()
       n2s3.first = false
       stream = InputMnist.DataParts(dataFile, labelFile, sizeChunk*(iteration-1), sizeChunk)
@@ -152,13 +152,15 @@ object  ExampleMnistCompression extends App {
       if (iteration == 1 && log) {
         logger = new SimMongoLog(n2s3, listOfConnexions, SimName.split("-")(0), true, true, true, true, "MNIST", SimTime,SynapseIndex)
       }
+       if(iteration != 1) {      
+
       duration = System.currentTimeMillis()
       simTime = "Train " + iteration
       n2s3.runAndWait()
 
       println(System.currentTimeMillis() - duration)
       simTime = simTime + " | " + (System.currentTimeMillis() - duration) + "\n"
-
+    }
       if (iteration == globalIteration && log) {
         logger.storeSimInfoAndDestroy()
       }
@@ -170,7 +172,10 @@ object  ExampleMnistCompression extends App {
       saveNeurones(unsupervisedLayer, "[" + iteration + "]")
       println("end : " + System.currentTimeMillis())
 
-      /*
+      
+
+      // Test before pruning 
+
        inputStream.append(InputMnist.DataFrom(dataTestFile, labelTestFile))
 
         println("Start Testing " + "[" + iteration + "]")
@@ -388,11 +393,11 @@ object  ExampleMnistCompression extends App {
                     d += 1 }
                   }else{
                     if (reinforce) {
-                    if ((Value + beta*Ratio).toFloat<=1.0){
+                    if ((Value + beta*Ratio).toFloat<=(1.0).toFloat){
                     ExternalConnectionSender.askTo(cnx,SetConnectionProperty(SynapticWeightFloat.asInstanceOf[ConnectionProperty[Any]] ,(Value + beta*Ratio).toFloat))
                     SynUpdate += cnx+":"+((Value + beta*Ratio).toFloat)+"\n"
                     }else{
-                    ExternalConnectionSender.askTo(cnx,SetConnectionProperty(SynapticWeightFloat.asInstanceOf[ConnectionProperty[Any]] ,(1.0)))
+                    ExternalConnectionSender.askTo(cnx,SetConnectionProperty(SynapticWeightFloat.asInstanceOf[ConnectionProperty[Any]] ,(1.0).toFloat))
                     SynUpdate += cnx+":"+(1.0)+"\n"}
                     }
                   }
diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistPrune3Epoch.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistPrune3Epoch.scala
index 3f65e62..a92ccfb 100644
--- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistPrune3Epoch.scala
+++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistPrune3Epoch.scala
@@ -48,6 +48,7 @@ object  ExampleMnistPrune3Epoch extends App {
   var SimName = ""
   var NeuroneLabels = List[(Int, String)]()
   var logger: SimMongoLog = null
+  var sizeChunk = 30000
 
   for(x <- 1 to 1){
     implicit val timeout = Config.longTimeout
@@ -55,7 +56,7 @@ object  ExampleMnistPrune3Epoch extends App {
     beta = ArrBeta((x-1) % 5)
     alpha = 0.05F
     beta = 0.1F
-    SimName = "10N"+"-"+x
+    SimName = "100N"+"-"+x
     println("a:"+alpha+" b:"+beta)
     QBGParameters.alf_m = 0.005f
     QBGParameters.alf_p = 0.01f
@@ -89,7 +90,7 @@ object  ExampleMnistPrune3Epoch extends App {
 
     val unsupervisedLayer = n2s3.createNeuronGroup()
       .setIdentifier("Layer1")
-      .setNumberOfNeurons(10)
+      .setNumberOfNeurons(100)
       .setNeuronModel(LIF, Seq(
         (MembranePotentialThreshold, 35 millivolts)))
 
@@ -139,7 +140,7 @@ object  ExampleMnistPrune3Epoch extends App {
     val dataTestFile = N2S3ResourceManager.getByName("mnist-test-images").getAbsolutePath
     val labelTestFile = N2S3ResourceManager.getByName("mnist-test-labels").getAbsolutePath
     simTime = ""
-    for ( epoch <- 1 to 3) {
+    for ( epoch <- 1 to 2) {
       iteration = 1
     while (iteration <= 2) {
       
@@ -149,7 +150,7 @@ object  ExampleMnistPrune3Epoch extends App {
       //  if (iteration != 1) {
       //n2s3.first = false
 
-      stream = InputMnist.DataParts(dataFile, labelFile, (iteration - 1) * 30000)
+      stream = InputMnist.DataParts(dataFile, labelFile, sizeChunk*(iteration-1), sizeChunk)
       // stream = InputMnist.DataFrom(dataFile, labelFile)
       inputStream.append(stream)
       stream.goto()
@@ -173,7 +174,7 @@ object  ExampleMnistPrune3Epoch extends App {
       CropInfo = cropNetwork(inputLayer, Ratio)
       //cropInput(n2s3.inputLayerRef.get, Ratio)
 
-      if(epoch == 3 && iteration == 2) {
+    //  if(epoch == 2 && iteration == 2) {
       unsupervisedLayer.fixNeurons()
       inputStream.append(InputMnist.DataFrom(dataTestFile, labelTestFile))
 
@@ -193,7 +194,7 @@ object  ExampleMnistPrune3Epoch extends App {
 
       benchmarkMonitor.saveCrops(folderName + "/" + "Sim " + SimName + " info a:" + alpha + "b:" + beta, simTime, CropInfo + " Ratio " + Ratio)
 
-      }
+   //   }
       iteration += 1
     }}
 }
diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistStaticThres.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistStaticThres.scala
index 00be9a7..55c86b1 100755
--- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistStaticThres.scala
+++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ExampleMnistStaticThres.scala
@@ -54,7 +54,7 @@ object  ExampleMnistStaticThres extends App {
     beta = ArrBeta((x - 1) % 5)
     alpha = 0.05F
     beta = 0.1F
-    SimName = "900N" + "-" + x
+    SimName = "1600N" + "-" + x
     println("a:" + alpha + " b:" + beta)
     QBGParameters.alf_m = 0.005f
     QBGParameters.alf_p = 0.01f
@@ -90,7 +90,7 @@ object  ExampleMnistStaticThres extends App {
 
     val unsupervisedLayer = n2s3.createNeuronGroup()
       .setIdentifier("Layer1")
-      .setNumberOfNeurons(900)
+      .setNumberOfNeurons(1600)
       .setNeuronModel(LIF, Seq(
         (MembranePotentialThreshold, 35 millivolts)))
 
@@ -113,7 +113,7 @@ object  ExampleMnistStaticThres extends App {
     new File(folderName).mkdir()
 
     println("Start loading "+System.currentTimeMillis())
-    NetworkLoading.from(n2s3,"900N-1 Arch 6")
+    NetworkLoading.from(n2s3,"1600N-1 Arch 6")
     println("Done loading "+System.currentTimeMillis())
     //NetworkLoading.fromWithDefaultWeights(n2s3,"100N [1] 03-02-2020 23:50:43/100N-1 Archce
     // 6 cropped","100N [1] 03-02-2020 23:50:43/100N-1 Arch 6 cropped",loadRandomWeights = false,binary = false)
-- 
GitLab