From 4876271c37ac2b47637ef070c1d935aacea621cb Mon Sep 17 00:00:00 2001 From: Franck Dary <franck.dary@lis-lab.fr> Date: Sun, 4 Nov 2018 19:37:07 +0100 Subject: [PATCH] Added the nbTrain option to train the same model many times with different seeds --- MLP/include/MLP.hpp | 2 ++ MLP/src/MLP.cpp | 7 +++---- maca_common/include/Dict.hpp | 2 ++ maca_common/include/ProgramParameters.hpp | 2 ++ maca_common/src/Dict.cpp | 5 +++++ maca_common/src/ProgramParameters.cpp | 2 ++ trainer/src/macaon_train.cpp | 20 ++++++++++++++++++-- 7 files changed, 34 insertions(+), 6 deletions(-) diff --git a/MLP/include/MLP.hpp b/MLP/include/MLP.hpp index 14b011c..479f403 100644 --- a/MLP/include/MLP.hpp +++ b/MLP/include/MLP.hpp @@ -37,6 +37,8 @@ class MLP /// @brief The seed that will be used by RNG (srand and dynet) static int randomSeed; + static bool dynetIsInit; + /// @brief Get the string corresponding to an Activation. /// /// @param a The activation. diff --git a/MLP/src/MLP.cpp b/MLP/src/MLP.cpp index af43355..7b64414 100644 --- a/MLP/src/MLP.cpp +++ b/MLP/src/MLP.cpp @@ -7,6 +7,7 @@ #include <dynet/io.h> int MLP::randomSeed = 0; +bool MLP::dynetIsInit = false; std::string MLP::activation2str(Activation a) { @@ -72,12 +73,10 @@ MLP::Activation MLP::str2activation(std::string s) void MLP::initDynet() { - static bool init = false; - - if(init) + if(dynetIsInit) return; - init = true; + dynetIsInit = true; dynet::initialize(getDefaultParams()); } diff --git a/maca_common/include/Dict.hpp b/maca_common/include/Dict.hpp index d547a3d..68de327 100644 --- a/maca_common/include/Dict.hpp +++ b/maca_common/include/Dict.hpp @@ -203,6 +203,8 @@ class Dict /// @param directory The directory in which we will save every Dict. /// @param namePrefix The prefix of the name of the dicts we need to save. static void saveDicts(const std::string & directory, const std::string & namePrefix); + /// @brief Delete all Dicts. + static void deleteDicts(); /// @brief Save the current Dict in the corresponding file. void save(); /// @brief Get the vector value of an entry. diff --git a/maca_common/include/ProgramParameters.hpp b/maca_common/include/ProgramParameters.hpp index 1e8e527..5f0a5e4 100644 --- a/maca_common/include/ProgramParameters.hpp +++ b/maca_common/include/ProgramParameters.hpp @@ -12,6 +12,7 @@ struct ProgramParameters static std::string input; static std::string expName; static std::string expPath; + static std::string baseExpName; static std::string langPath; static std::string templatePath; static std::string templateName; @@ -41,6 +42,7 @@ struct ProgramParameters static float dynamicProbability; static bool showFeatureRepresentation; static int iterationSize; + static int nbTrain; private : diff --git a/maca_common/src/Dict.cpp b/maca_common/src/Dict.cpp index 8a8179d..3e6f655 100644 --- a/maca_common/src/Dict.cpp +++ b/maca_common/src/Dict.cpp @@ -416,3 +416,8 @@ void Dict::printForDebug(FILE * output) fprintf(output, "Dict name \'%s\' nbElems = %lu\n", name.c_str(), str2vec.size()); } +void Dict::deleteDicts() +{ + str2dict.clear(); +} + diff --git a/maca_common/src/ProgramParameters.cpp b/maca_common/src/ProgramParameters.cpp index e864d3f..c84bf7c 100644 --- a/maca_common/src/ProgramParameters.cpp +++ b/maca_common/src/ProgramParameters.cpp @@ -6,6 +6,7 @@ ProgramParameters::ProgramParameters() std::string ProgramParameters::input; std::string ProgramParameters::expName; +std::string ProgramParameters::baseExpName; std::string ProgramParameters::expPath; std::string ProgramParameters::langPath; std::string ProgramParameters::templatePath; @@ -36,3 +37,4 @@ int ProgramParameters::dynamicEpoch; float ProgramParameters::dynamicProbability; bool ProgramParameters::showFeatureRepresentation; int ProgramParameters::iterationSize; +int ProgramParameters::nbTrain; diff --git a/trainer/src/macaon_train.cpp b/trainer/src/macaon_train.cpp index 5debf9d..3505310 100644 --- a/trainer/src/macaon_train.cpp +++ b/trainer/src/macaon_train.cpp @@ -54,6 +54,8 @@ po::options_description getOptionsDescription() "Learning rate of the optimizer") ("seed,s", po::value<int>()->default_value(100), "The random seed that will initialize RNG") + ("nbTrain", po::value<int>()->default_value(0), + "The number of models that will be trained, with only the random seed changing") ("duplicates", po::value<bool>()->default_value(true), "Remove identical training examples") ("showFeatureRepresentation", po::value<bool>()->default_value(false), @@ -209,6 +211,7 @@ int main(int argc, char * argv[]) po::variables_map vm = checkOptions(od, argc, argv); ProgramParameters::expName = vm["expName"].as<std::string>(); + ProgramParameters::baseExpName = ProgramParameters::expName; ProgramParameters::templateName = vm["templateName"].as<std::string>(); ProgramParameters::tmName = vm["tm"].as<std::string>(); ProgramParameters::bdName = vm["bd"].as<std::string>(); @@ -219,6 +222,7 @@ int main(int argc, char * argv[]) ProgramParameters::lang = vm["lang"].as<std::string>(); ProgramParameters::nbIter = vm["nbiter"].as<int>(); ProgramParameters::seed = vm["seed"].as<int>(); + ProgramParameters::nbTrain = vm["nbTrain"].as<int>(); ProgramParameters::removeDuplicates = vm["duplicates"].as<bool>(); ProgramParameters::interactive = vm["interactive"].as<bool>(); ProgramParameters::shuffleExamples = vm["shuffle"].as<bool>(); @@ -232,11 +236,23 @@ int main(int argc, char * argv[]) ProgramParameters::showFeatureRepresentation = vm["showFeatureRepresentation"].as<bool>(); ProgramParameters::iterationSize = vm["iterationSize"].as<int>(); - for (int i = 0; i < 10; i++) + if (ProgramParameters::nbTrain) + { + for (int i = 0; i < ProgramParameters::nbTrain; i++) + { + fprintf(stderr, "Training number %d / %d :\n", i+1, ProgramParameters::nbTrain); + ProgramParameters::expName = ProgramParameters::baseExpName + "_" + std::to_string(i); + updatePaths(); + createExpPath(); + Dict::deleteDicts(); + launchTraining(); + } + } + else { - ProgramParameters::expName += "_" + std::to_string(i); updatePaths(); createExpPath(); + Dict::deleteDicts(); launchTraining(); } -- GitLab