From 64b78c684be8e69b24cd5ccd703152224fa570ec Mon Sep 17 00:00:00 2001
From: rtalbi <dr_talbi@esi.dz>
Date: Mon, 20 Dec 2021 01:44:34 +0100
Subject: [PATCH] non-privacy presrerving neural networks

---
 .idea/workspace.xml | 220 +++++++++++++++++++-------------------------
 ML/NN/NN.cpp        | 106 +++++++++++++++------
 ML/NN/NN.h          |   7 +-
 3 files changed, 175 insertions(+), 158 deletions(-)

diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 4ac60f6d..f91da57a 100755
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -11,54 +11,10 @@
     </configurations>
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="2624f523-8bdb-4867-a32b-0c8fa25f5cda" name="Default" comment="New optim  + large datasets modif">
-      <change afterPath="$PROJECT_DIR$/ML/NN/NN.cpp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/ML/NN/NN.h" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/ML/NN/neuron.cpp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/ML/NN/neuron.h" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/PPML/PPLR2/PPLR_Classifier.cpp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/PPML/PPLR2/PPLR_Classifier.h" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/PPML/PPNN/PPNN_Classifier.cpp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/PPML/PPNN/Perceptron.cpp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/PPML/PPNN/Perceptron.h" afterDir="false" />
+    <list default="true" id="2624f523-8bdb-4867-a32b-0c8fa25f5cda" name="Default" comment="non-privacy presrerving neural networks">
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/CMakeLists.txt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/CONFIG/DAPPLE.config" beforeDir="false" afterPath="$PROJECT_DIR$/CONFIG/DAPPLE.config" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/CRYPTO/EvalSigmoid.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/CRYPTO/EvalSigmoid.cpp" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_1.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_1.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_10.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_10.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_11.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_11.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_12.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_12.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_13.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_13.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_14.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_14.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_15.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_15.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_16.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_16.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_2.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_2.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_3.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_3.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_4.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_4.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_5.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_5.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_6.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_6.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_7.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_7.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_8.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_8.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_9.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/DO_9.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/LR/testing.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/LR/testing.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/testing.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/testing.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/DATA/Datasets/Adult/training.enc" beforeDir="false" afterPath="$PROJECT_DIR$/DATA/Datasets/Adult/training.enc" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/PPML/IO/PPDatasetReader.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/PPML/IO/PPDatasetReader.cpp" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/PPML/IO/PPDatasetReader.h" beforeDir="false" afterPath="$PROJECT_DIR$/PPML/IO/PPDatasetReader.h" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/PPML/PPLR/PPLR_Classifier.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/PPML/PPLR/PPLR_Classifier.cpp" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/PPML/PPNN/PPNN_Classifier.h" beforeDir="false" afterPath="$PROJECT_DIR$/PPML/PPNN/PPNN_Classifier.h" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/TEST/main.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/TEST/main.cpp" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/CXX.includecache" beforeDir="false" afterPath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/CXX.includecache" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/DependInfo.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/DependInfo.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/build.make" beforeDir="false" afterPath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/build.make" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/cmake_clean.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/cmake_clean.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/link.txt" beforeDir="false" afterPath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/link.txt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/progress.make" beforeDir="false" afterPath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/DAPPLE.dir/progress.make" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/Makefile2" beforeDir="false" afterPath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/Makefile2" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/progress.marks" beforeDir="false" afterPath="$PROJECT_DIR$/cmake-build-debug/CMakeFiles/progress.marks" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/cmake-build-debug/DAPPLE.cbp" beforeDir="false" afterPath="$PROJECT_DIR$/cmake-build-debug/DAPPLE.cbp" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/cmake-build-debug/Makefile" beforeDir="false" afterPath="$PROJECT_DIR$/cmake-build-debug/Makefile" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/ML/NN/NN.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/ML/NN/NN.cpp" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/ML/NN/NN.h" beforeDir="false" afterPath="$PROJECT_DIR$/ML/NN/NN.h" afterDir="false" />
     </list>
     <ignored path="$PROJECT_DIR$/cmake-build-debug/" />
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
@@ -87,22 +43,10 @@
   </component>
   <component name="FileEditorManager">
     <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/PPML/PPNN/PPNN_Classifier.h">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="900">
-              <caret line="60" column="11" selection-start-line="60" selection-start-column="11" selection-end-line="60" selection-end-column="11" />
-              <folding>
-                <element signature="e#67#101#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/TEST/main.cpp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="-190">
+            <state relative-caret-position="21600">
               <caret line="1440" selection-start-line="1440" selection-end-line="1440" />
             </state>
           </provider>
@@ -111,8 +55,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/ML/NN/neuron.cpp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="875">
-              <caret line="152" lean-forward="true" selection-start-line="152" selection-end-line="152" />
+            <state relative-caret-position="440">
+              <caret line="146" column="18" selection-start-line="146" selection-start-column="13" selection-end-line="146" selection-end-column="18" />
               <folding>
                 <element signature="e#0#19#0" expanded="true" />
               </folding>
@@ -123,8 +67,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/ML/NN/neuron.h">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="230">
-              <caret line="41" lean-forward="true" selection-start-line="40" selection-start-column="12" selection-end-line="41" />
+            <state relative-caret-position="855">
+              <caret line="57" column="13" selection-start-line="57" selection-start-column="9" selection-end-line="57" selection-end-column="14" />
               <folding>
                 <element signature="e#88#105#0" expanded="true" />
               </folding>
@@ -135,8 +79,20 @@
       <file pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/ML/NN/NN.cpp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="500">
-              <caret line="180" lean-forward="true" selection-start-line="180" selection-end-line="180" />
+            <state relative-caret-position="110">
+              <caret line="223" column="75" selection-start-line="223" selection-start-column="75" selection-end-line="223" selection-end-column="75" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/PPML/PPLR/PPLR_Classifier.cpp">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="-910">
+              <caret line="460" lean-forward="true" selection-start-line="460" selection-end-line="460" />
+              <folding>
+                <element signature="e#0#17#0" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
@@ -144,8 +100,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/ML/LR/LR.cpp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="357">
-              <caret line="264" column="1" lean-forward="true" selection-end-line="465" />
+            <state relative-caret-position="371">
+              <caret line="226" column="42" selection-start-line="226" selection-start-column="3" selection-end-line="226" selection-end-column="42" />
               <folding>
                 <element signature="e#0#19#0" expanded="true" />
               </folding>
@@ -156,8 +112,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/ML/LR/LR.h">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="300">
-              <caret line="30" column="26" lean-forward="true" selection-end-line="81" />
+            <state relative-caret-position="450">
+              <caret line="30" column="26" selection-end-line="81" />
             </state>
           </provider>
         </entry>
@@ -165,8 +121,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/ML/NN/NN.h">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="530">
-              <caret line="66" column="2" lean-forward="true" selection-start-line="66" selection-start-column="2" selection-end-line="66" selection-end-column="2" />
+            <state relative-caret-position="365">
+              <caret line="55" column="26" lean-forward="true" selection-start-line="55" selection-start-column="26" selection-end-line="55" selection-end-column="26" />
               <folding>
                 <element signature="e#80#97#0" expanded="true" />
               </folding>
@@ -192,9 +148,6 @@
   </component>
   <component name="FindInProjectRecents">
     <findStrings>
-      <find>trainTime</find>
-      <find>keygen</find>
-      <find>optim</find>
       <find>validateCrypto</find>
       <find>desere</find>
       <find>enc</find>
@@ -221,7 +174,10 @@
       <find>PPStats</find>
       <find>predict</find>
       <find>nb</find>
+      <find>miniBatchGrad</find>
       <find>LR</find>
+      <find>todo</find>
+      <find>train</find>
     </findStrings>
     <replaceStrings>
       <replace>EvalCmp100</replace>
@@ -320,6 +276,7 @@
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
+      <pane id="Scope" />
       <pane id="ProjectPane">
         <subPane>
           <expand>
@@ -354,6 +311,17 @@
               <item name="ML" type="462c0819:PsiDirectoryNode" />
               <item name="NN" type="462c0819:PsiDirectoryNode" />
             </path>
+            <path>
+              <item name="DAPPLE" type="b2602c69:ProjectViewProjectNode" />
+              <item name="DAPPLE-2.0" type="462c0819:PsiDirectoryNode" />
+              <item name="PPML" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="DAPPLE" type="b2602c69:ProjectViewProjectNode" />
+              <item name="DAPPLE-2.0" type="462c0819:PsiDirectoryNode" />
+              <item name="PPML" type="462c0819:PsiDirectoryNode" />
+              <item name="PPLR" type="462c0819:PsiDirectoryNode" />
+            </path>
             <path>
               <item name="DAPPLE" type="b2602c69:ProjectViewProjectNode" />
               <item name="DAPPLE-2.0" type="462c0819:PsiDirectoryNode" />
@@ -363,7 +331,6 @@
           <select />
         </subPane>
       </pane>
-      <pane id="Scope" />
     </panes>
   </component>
   <component name="PropertiesComponent">
@@ -537,14 +504,8 @@
       <workItem from="1638474949261" duration="12914000" />
       <workItem from="1639473801827" duration="5981000" />
       <workItem from="1639490787929" duration="17710000" />
-      <workItem from="1639730650637" duration="10756000" />
-    </task>
-    <task id="LOCAL-00062" summary="updated testing script for PPLR">
-      <created>1555105032054</created>
-      <option name="number" value="00062" />
-      <option name="presentableId" value="LOCAL-00062" />
-      <option name="project" value="LOCAL" />
-      <updated>1555105032054</updated>
+      <workItem from="1639730650637" duration="19492000" />
+      <workItem from="1639957004094" duration="4027000" />
     </task>
     <task id="LOCAL-00063" summary="updated testing script for PPLR">
       <created>1555426793913</created>
@@ -882,11 +843,18 @@
       <option name="project" value="LOCAL" />
       <updated>1639607466723</updated>
     </task>
-    <option name="localTasksCounter" value="111" />
+    <task id="LOCAL-00111" summary="non-privacy presrerving neural networks">
+      <created>1639741483456</created>
+      <option name="number" value="00111" />
+      <option name="presentableId" value="LOCAL-00111" />
+      <option name="project" value="LOCAL" />
+      <updated>1639741483456</updated>
+    </task>
+    <option name="localTasksCounter" value="112" />
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="1597063000" />
+    <option name="totallyTimeSpent" value="1609826000" />
   </component>
   <component name="TodoView">
     <todo-panel id="selected-file">
@@ -900,7 +868,7 @@
   <component name="ToolWindowManager">
     <frame x="0" y="25" width="1920" height="856" extended-state="6" />
     <layout>
-      <window_info active="true" content_ui="combo" id="Project" order="0" sideWeight="0.8053333" visible="true" weight="0.30256137" />
+      <window_info active="true" content_ui="combo" id="Project" order="0" sideWeight="0.8053333" visible="true" weight="0.30576307" />
       <window_info id="Structure" order="1" sideWeight="0.2735043" side_tool="true" weight="0.3390558" />
       <window_info id="Favorites" order="2" sideWeight="0.19466667" side_tool="true" weight="0.28113064" />
       <window_info anchor="bottom" id="Database Changes" order="0" />
@@ -972,7 +940,6 @@
   <component name="VcsManagerConfiguration">
     <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
     <option name="CHECK_NEW_TODO" value="false" />
-    <MESSAGE value="Almost their (Third classifier)" />
     <MESSAGE value="Added dot product test" />
     <MESSAGE value="Added the call to the PPLR classifier" />
     <MESSAGE value="Updated version of PPLR with para" />
@@ -997,7 +964,8 @@
     <MESSAGE value="updates for microBench" />
     <MESSAGE value="New optim  + large datasets modif" />
     <MESSAGE value="PPNN + modif logistic regression" />
-    <option name="LAST_COMMIT_MESSAGE" value="PPNN + modif logistic regression" />
+    <MESSAGE value="non-privacy presrerving neural networks" />
+    <option name="LAST_COMMIT_MESSAGE" value="non-privacy presrerving neural networks" />
   </component>
   <component name="XDebuggerManager">
     <breakpoint-manager>
@@ -2232,16 +2200,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/PPML/PPLR/PPLR_Classifier.cpp">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="2490">
-          <caret line="166" column="1" selection-end-line="670" />
-          <folding>
-            <element signature="e#0#17#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/PPML/PPNN/Perceptron.cpp">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="276">
@@ -2277,37 +2235,44 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/PPML/PPNB/PPStats.h">
-      <provider selected="true" editor-type-id="text-editor" />
-    </entry>
-    <entry file="file://$PROJECT_DIR$/PPML/PPNN/Perceptron.h">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="735">
-          <caret line="49" column="8" selection-start-line="49" selection-start-column="8" selection-end-line="49" selection-end-column="8" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/TEST/main.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-190">
+        <state relative-caret-position="21600">
           <caret line="1440" selection-start-line="1440" selection-end-line="1440" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/ML/NN/neuron.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="230">
-          <caret line="41" lean-forward="true" selection-start-line="40" selection-start-column="12" selection-end-line="41" />
+        <state relative-caret-position="855">
+          <caret line="57" column="13" selection-start-line="57" selection-start-column="9" selection-end-line="57" selection-end-column="14" />
           <folding>
             <element signature="e#88#105#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/ML/NN/neuron.cpp">
+    <entry file="file://$PROJECT_DIR$/ML/LR/LR.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="875">
-          <caret line="152" lean-forward="true" selection-start-line="152" selection-end-line="152" />
+        <state relative-caret-position="450">
+          <caret line="30" column="26" selection-end-line="81" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/PPML/PPNB/PPStats.h">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/PPML/PPNN/Perceptron.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="735">
+          <caret line="49" column="8" selection-start-line="49" selection-start-column="8" selection-end-line="49" selection-end-column="8" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/ML/LR/LR.cpp">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="371">
+          <caret line="226" column="42" selection-start-line="226" selection-start-column="3" selection-end-line="226" selection-end-column="42" />
           <folding>
             <element signature="e#0#19#0" expanded="true" />
           </folding>
@@ -2316,35 +2281,38 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/ML/NN/NN.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="530">
-          <caret line="66" column="2" lean-forward="true" selection-start-line="66" selection-start-column="2" selection-end-line="66" selection-end-column="2" />
+        <state relative-caret-position="365">
+          <caret line="55" column="26" lean-forward="true" selection-start-line="55" selection-start-column="26" selection-end-line="55" selection-end-column="26" />
           <folding>
             <element signature="e#80#97#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/ML/LR/LR.h">
+    <entry file="file://$PROJECT_DIR$/ML/NN/neuron.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="300">
-          <caret line="30" column="26" lean-forward="true" selection-end-line="81" />
+        <state relative-caret-position="440">
+          <caret line="146" column="18" selection-start-line="146" selection-start-column="13" selection-end-line="146" selection-end-column="18" />
+          <folding>
+            <element signature="e#0#19#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/ML/LR/LR.cpp">
+    <entry file="file://$PROJECT_DIR$/PPML/PPLR/PPLR_Classifier.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="357">
-          <caret line="264" column="1" lean-forward="true" selection-end-line="465" />
+        <state relative-caret-position="-910">
+          <caret line="460" lean-forward="true" selection-start-line="460" selection-end-line="460" />
           <folding>
-            <element signature="e#0#19#0" expanded="true" />
+            <element signature="e#0#17#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/ML/NN/NN.cpp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="500">
-          <caret line="180" lean-forward="true" selection-start-line="180" selection-end-line="180" />
+        <state relative-caret-position="110">
+          <caret line="223" column="75" selection-start-line="223" selection-start-column="75" selection-end-line="223" selection-end-column="75" />
         </state>
       </provider>
     </entry>
diff --git a/ML/NN/NN.cpp b/ML/NN/NN.cpp
index 248c82f0..371c8f48 100644
--- a/ML/NN/NN.cpp
+++ b/ML/NN/NN.cpp
@@ -58,13 +58,13 @@ NN::NN(double alpha, int epochs, int batchSize, float th, DatasetReader *dt, str
 }
 
 
-vector<float> NN::forward_layer(vector<neuron*> layer, vector<float> x, bool test ){
+vector<vector<float>> NN::forward_layer(vector<neuron*> layer, vector<vector<float>> x, bool test ){
 
-    vector<float> res;
+    vector<vector<float>> res;
     for (int j=0; j < layer.size(); j++)
     {
         neuron *n = layer[j];
-        res.push_back(n->predict(x,test));
+        res.push_back(n->predict_batch(x,test));
     }
 
     return  res;
@@ -72,36 +72,55 @@ vector<float> NN::forward_layer(vector<neuron*> layer, vector<float> x, bool tes
 }
 
 
-int NN::predict(Record *r, bool test ) {
+vector<int> NN::predict(vector<Record *>R, bool test ) {
 
 
-    vector<float> x = vector<float> (r->values.begin(), r->values.end());
+    vector<vector<float>> XB;
+    for (int i=0; i < R.size(); i++)
+    {
+        Record *r = R[i];
+        vector<float> x = vector<float> (r->values.begin(), r->values.end());
+        XB.push_back(x);
+    }
+
     for (int i=0; i < network.size(); i++)
     {
-        x = forward_layer(network[i], x, test );
+        XB = forward_layer(network[i], XB, test );
     }
 
-    float max = -1.0;
-    int argmax =0;
-    for (int j=0; j < x.size(); j++)
+
+    vector<int> res;
+
+    for (int j=0; j < XB.size(); j++)
     {
-        if (x[j]>max)
-        {
-            max = x[j];
-            argmax = j;
-        }
+
+        vector<float> x  = XB[j];
+        float max = -1.0;
+        int argmax =0;
+            for (int k=0; k < x.size(); k++) {
+
+                if (x[k]>max)
+                {
+                    max = x[k];
+                    argmax = k;
+                }
+            }
+            res.push_back(argmax);
     }
 
-    return argmax;
+
+
+    return res;
 }
 
 
 
-vector<vector<float>> NN::backpropagate_layer(vector<neuron*> layer, vector<vector<float>> XB,vector<vector<float>> ytrue) {
+vector<vector<float>> NN::backpropagate_layer(vector<neuron*> layer, vector<vector<float>> ytrue) {
 
     vector<vector<float>> new_output_layer;
     for(int i=0; i < ytrue.size(); i++)
     {
+        vector<vector<float>> XB = layer[i]->previous_input;
         layer[i]->train(XB, ytrue[i]);
         vector <float > new_output_neuron = layer[i]->new_output;
         new_output_layer.push_back(new_output_neuron);
@@ -110,9 +129,11 @@ vector<vector<float>> NN::backpropagate_layer(vector<neuron*> layer, vector<vect
 
 }
 
+
+
 void NN::backpropagate(vector<Record *> XB){
 
-    forward(XB); //todo define function for forwarding a batch of records
+    vector<int> prediction = predict(XB, false);
     vector<vector<float>> R;
     vector<vector<float>>ytrue;
     int dim = XB[0]->values.size()-1;
@@ -133,7 +154,7 @@ void NN::backpropagate(vector<Record *> XB){
 
     for(int j= network.size()-1; j>=0; j-- )
     {
-        vector<vector<float>> new_output_layer = backpropagate_layer(network[j],ytrue); //todo remove the record from this method and replace it with the previous input resulting from the forward
+        vector<vector<float>> new_output_layer = backpropagate_layer(network[j],ytrue);
         ytrue = new_output_layer;
     }
 
@@ -145,6 +166,7 @@ void NN::train () //
     int sizeBatch=batchSize;
     int size = dt->train_size;
     Record * record;
+    vector<Record*> XB;
     extTrainBd = 0;
 
     map<int, vector <Record*>> workerBatches;
@@ -153,6 +175,41 @@ void NN::train () //
 
     for (int epochCpt = 0; epochCpt < epochs ; epochCpt ++ ) {
 
+        while (counter < size) {
+            if (size - counter < batchSize)
+                sizeBatch = size - counter;
+
+
+            for (recordCounter = 0; recordCounter < sizeBatch; recordCounter++) {
+                try {
+
+                    record = dt->getTrainRecord();
+                    XB.push_back(record);
+                    extTrainBd += record->values.size() + 1;
+                    counter++;
+                }
+                catch (std::exception const &e) {
+                    cout << e.what() << endl;
+                }
+
+            }
+
+
+            backpropagate(XB);
+
+
+            for (int i = 0; i < XB.size(); i++) {
+                delete XB[i];
+            }
+
+            XB.clear();
+
+
+        }
+
+        counter = 0;
+
+
 
     }
 
@@ -164,6 +221,7 @@ void NN::train () //
 
 }
 
+//todo : transform this method so that prediction happens for fa test batch
 void NN::Test( ){
 
     int counter =0;
@@ -178,16 +236,6 @@ void NN::Test( ){
     auto begin = chrono::high_resolution_clock::now();
     while (counter < size) {
 
-        try {
-            record = dt->getTestRecord();
-            //record->print();
-
-            extTestBd += sizeof(int)*record->values.size();
-        }
-        catch (std::exception const &e) {
-            //std::cout << "Exception: " << e.what() << "\n";
-
-        }
 
         counter++;
 
@@ -207,7 +255,7 @@ void NN::Test( ){
     this->testTime = duration.count(); //- removeTime;
     cout << this->testTime << endl;
     classOutput.close();
-} //todo use the forward function here
+}
 
 
 
diff --git a/ML/NN/NN.h b/ML/NN/NN.h
index 6b260024..9ef4ceb3 100644
--- a/ML/NN/NN.h
+++ b/ML/NN/NN.h
@@ -49,17 +49,18 @@ public :
     NN  (double alpha, int epochs, int batchSize, float th, DatasetReader * dt, string logfile, bool debug, string mainpath);
 
 public :
-    int predict (Record *r, bool test);
+    vector<int> predict(vector<Record *>R, bool test );
+
 
 public :
-    vector<vector<float>> backpropagate_layer(vector<neuron*> layer, vector<vector<float>> XB,vector<vector<float>> ytrue);
+    vector<vector<float>> backpropagate_layer(vector<neuron*> layer, vector<vector<float>> ytrue);
 
 
 public :
     void backpropagate(vector<Record *> XB);
 
 public :
-    vector<float> forward_layer(vector<neuron*> layer, vector<float> x, bool test);
+    vector<vector<float>> forward_layer(vector<neuron*> layer, vector<vector<float>> x, bool test );
 
 public :
     void train ();
-- 
GitLab