void LogHelper::logAndSaveModel()

in recipes/local_prior_match/src/runtime/Logging.cpp [120:146]


void LogHelper::logAndSaveModel(
    SSLTrainMeters& meters,
    const std::unordered_map<std::string, std::string>& config,
    std::shared_ptr<fl::Module> network,
    std::shared_ptr<SequenceCriterion> criterion,
    std::shared_ptr<fl::FirstOrderOptimizer> netoptim,
    const std::unordered_map<std::string, double>& logFields) {
  int iter = logOnEpoch_ ? std::stoi(config.at(kEpoch))
                         : std::stoi(config.at(kIteration));
  std::string tag = "last";
  if (FLAGS_itersave) {
    tag = logOnEpoch_ ? format("epoch_%04d", iter) : format("iter_%08d", iter);
  }

  logStatus(meters, iter, logFields);
  saveModel("model_" + tag + ".bin", config, network, criterion, netoptim);

  for (auto& s : meters.valid) {
    double verr = s.second.edits[kTarget].value()[0];
    auto sit = validminerrs_.find(s.first);
    if (sit == validminerrs_.end() || sit->second > verr) {
      validminerrs_[s.first] = verr;
      saveModel(
          "model_" + s.first + ".bin", config, network, criterion, netoptim);
    }
  }
}