void saveNetwork(const NeuralNetwork<TDevice> &nn, const std::string &filename) { rapidjson::Document jsonDoc; jsonDoc.SetObject(); nn.exportLayers (&jsonDoc); nn.exportWeights(&jsonDoc); FILE *file = fopen(filename.c_str(), "w"); if (!file) throw std::runtime_error("Cannot open file"); rapidjson::FileStream os(file); rapidjson::PrettyWriter<rapidjson::FileStream> writer(os); jsonDoc.Accept(writer); fclose(file); }
void saveState(const NeuralNetwork<TDevice> &nn, const optimizers::lmOptimizer<TDevice> &optimizer, const std::string &infoRows) { // create the JSON document rapidjson::Document jsonDoc; jsonDoc.SetObject(); // add the configuration options jsonDoc.AddMember("configuration", Configuration::instance().serializedOptions().c_str(), jsonDoc.GetAllocator()); // add the info rows std::string tmp = boost::replace_all_copy(infoRows, "\n", ";;;"); jsonDoc.AddMember("info_rows", tmp.c_str(), jsonDoc.GetAllocator()); // add the network structure and weights nn.exportLayers (&jsonDoc); nn.exportWeights(&jsonDoc); // add the state of the optimizer optimizer.exportState(&jsonDoc); // open the file std::stringstream autosaveFilename; std::string prefix = Configuration::instance().autosavePrefix(); autosaveFilename << prefix; if (!prefix.empty()) autosaveFilename << '_'; autosaveFilename << "epoch"; autosaveFilename << std::setfill('0') << std::setw(3) << optimizer.currentEpoch(); autosaveFilename << ".autosave"; std::string autosaveFilename_str = autosaveFilename.str(); FILE *file = fopen(autosaveFilename_str.c_str(), "w"); if (!file) throw std::runtime_error("Cannot open file"); // write the file rapidjson::FileStream os(file); rapidjson::PrettyWriter<rapidjson::FileStream> writer(os); jsonDoc.Accept(writer); fclose(file); }