PDA

View Full Version : دوباره Train کردن شبکه ی عصبی Train شده در FANN



IamOverlord
پنج شنبه 02 مرداد 1393, 04:07 صبح
سلام دوستان!
از FANN (https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0CC4QFjAC&url=http%3A%2F%2Fleenissen.dk%2F&ei=Q0_QU7zJBcPG0QXyvoC4Dg&usg=AFQjCNHc_sKvOmvyii3WfMYFTMRkG7Q-YA&sig2=FQ348R704DSdcLv1Eg8DrA&bvm=bv.71667212,d.d2k) استفاده می کنم...
وقتی شبکه ی عصبی ام رو Train می کنم و در فایلی ذخیره می کنم و بعد دوباره اون رو Load می کنم و دوباره Train می کنم، انگار شبکه عصبی داره از اول Train می شه!
چرا؟! مشکل چیه؟!
ببخشید اگه کدم شلوغه! main ها رو بخونید! ...

#include <iostream>#include <fstream>


using namespace std;


#include <stdio.h>
#include <opencv2/opencv.hpp>


using namespace cv;


#include <algorithm>
#include <boost/filesystem.hpp>


#include "fann.h"




/* COMMAND LINE ARGUMENTS */
char* getCmdOption(char ** begin, char ** end, const std::string & option)
{
char ** itr = std::find(begin, end, option);
if (itr != end && ++itr != end)
{
return *itr;
}
return 0;
}


bool cmdOptionExists(char** begin, char** end, const std::string& option)
{
return std::find(begin, end, option) != end;
}
/* --------------------------- */






int main(int argc, char** argv)
{

string train_data_path ("train.data");
if (cmdOptionExists (argv, argv+argc, "-i")) train_data_path.assign (getCmdOption (argv, argv+argc, "-i"));

string nn_file_path ("output.nn");
if (cmdOptionExists (argv, argv+argc, "-o")) nn_file_path.assign (getCmdOption (argv, argv+argc, "-o"));


const unsigned int num_layers = 4;
const unsigned int layers[] = {9, 100, 100, 9};

const float desired_error = (const float) 0.0000001;
const unsigned int max_epochs = 1000;
const unsigned int epochs_between_reports = 1;


struct fann *ann = fann_create_standard_array(num_layers, layers);


fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);


//fann_set_activation_function_hidden(ann, FANN_SIGMOID);
//fann_set_activation_function_output(ann, FANN_SIGMOID);




fann_train_on_file(ann, train_data_path.c_str(), max_epochs,
epochs_between_reports, desired_error);


fann_save(ann, nn_file_path.c_str());


fann_destroy(ann);


return 0;
}

#include <iostream>#include <fstream>


using namespace std;


#include <stdio.h>
#include <opencv2/opencv.hpp>


using namespace cv;


#include <algorithm>
#include <boost/filesystem.hpp>


#include "fann.h"




/* COMMAND LINE ARGUMENTS */
char* getCmdOption(char ** begin, char ** end, const std::string & option)
{
char ** itr = std::find(begin, end, option);
if (itr != end && ++itr != end)
{
return *itr;
}
return 0;
}


bool cmdOptionExists(char** begin, char** end, const std::string& option)
{
return std::find(begin, end, option) != end;
}
/* --------------------------- */






int main(int argc, char** argv)
{
string train_data_path ("train.data");
if (cmdOptionExists (argv, argv+argc, "-i")) train_data_path.assign (getCmdOption (argv, argv+argc, "-i"));

string nn_file_path ("output.nn");
if (cmdOptionExists (argv, argv+argc, "-o")) nn_file_path.assign (getCmdOption (argv, argv+argc, "-o"));

struct fann *ann = fann_create_from_file(nn_file_path.c_str());


const float desired_error = (const float) 0.0000001;
const unsigned int max_epochs = 100;
const unsigned int epochs_between_reports = 1;

fann_train_on_file(ann, train_data_path.c_str(), max_epochs,
epochs_between_reports, desired_error);


fann_save(ann, nn_file_path.c_str());


fann_destroy(ann);

return 0;
}

royall
جمعه 03 مرداد 1393, 13:28 عصر
fann چی هست؟

IamOverlord
جمعه 03 مرداد 1393, 13:42 عصر
سلام دوست عزیز!
FANN یه کتابخونه ی شبکه ی عصبی در C (که من در ++C استفاده می کنم...) هست که ادعا می کنه سریعه... نسبتا معروف هم هست... Binding های مختلفی به زبان های مختلف داره...
لینک وب سایتش: http://leenissen.dk
لینک پروژه در GitHub:
https://github.com/libfann/fann
(https://github.com/libfann/fann)اینم بخش Getting Started اش: http://leenissen.dk/fann/wp/help/getting-started

IamOverlord
شنبه 04 مرداد 1393, 00:43 صبح
سلام دوستان!
مشکلم حل شد!
با توجه به این جواب:
http://stackoverflow.com/questions/12838431/fann-build-a-neural-network-with-offline-data-and-retrain-it-by-online-data
(http://stackoverflow.com/questions/12838431/fann-build-a-neural-network-with-offline-data-and-retrain-it-by-online-data)فهمیدم که باید از یه همچین روشایی استفاده کنم که مشکلم حل بشه نه RPROP:
fann_set_training_algorithm(my_nn, FANN_TRAIN_INCREMENTAL);
یا:
fann_set_training_algorithm(my_nn, FANN_TRAIN_QUICKPROP);
با فرض این که اسم شبکه ی عصبی ای که ساختیم رو my_nn گذاشتیم...