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