/* Main function with command line parameters - Validates parameters & calls necessary functions to support the parameters*/ int main(int argc, char *argv[]) { int func_num; if (argc >= 2) { if (streq(argv[1], "rootap_addr")) { get_set_addr(1); } else if (streq(argv[1], "rpt_addr")) { get_set_addr(2); } else if (streq(argv[1], "sta_addr")) { get_set_addr(3); } else if(streq(argv[1], "rec_msg")) { if (argc != 4) { printf("Missing argument : msg \n"); usage(); exit(0); } if (atoi(argv[2]) == 3) func_num = 1; else if (atoi(argv[2]) == 6) func_num = 2; else if (atoi(argv[2]) == 7) func_num = 3; else { printf("Invalid func: msg \n"); exit(0); } rpttoolListen(func_num, 0, atoi(argv[3])); } else if (streq(argv[1], "rec_gput")) { if (argc != 4) { printf("Missing argument : mode \n"); usage(); exit(0); } rpttoolListen(0,atoi(argv[2]), atoi(argv[3])); } else if (streq(argv[1], "node_blk")) { if (argc != 3) { printf("Missing argument : mode \n"); usage(); exit(0); } block_nodes(atoi(argv[2])); } else if (streq(argv[1], "master")) { master = atoi(argv[2]); if (master < 0 || master > 4 ) { printf("Invalid mode. Exiting...\n"); usage(); } mode = master >> 1; interface = atoi(argv[3]); init_training(); if (master%2 == 1) { master_sm(); } else { slave_sm(); } } else if (streq(argv[1],"-h")) {
typename rbm_t::weight train(RBM& rbm, IIterator ifirst, IIterator ilast, EIterator efirst, EIterator elast, std::size_t max_epochs) { dll::auto_timer timer("rbm_trainer:train"); //In case of shuffle, we don't want to shuffle the input, therefore create a copy and shuffle it std::vector<typename std::iterator_traits<IIterator>::value_type> input_copy; std::vector<typename std::iterator_traits<EIterator>::value_type> expected_copy; auto iterators = prepare_it(ifirst, ilast, efirst, elast, input_copy, expected_copy); decltype(auto) input_first = std::get<0>(iterators); decltype(auto) input_last = std::get<1>(iterators); decltype(auto) expected_first = std::get<2>(iterators); decltype(auto) expected_last = std::get<3>(iterators); //Initialize RBM and trainign parameters init_training(rbm, input_first, input_last); //Some RBM may init weights based on the training data //Note: This can't be done in init_training, since it will //sometimes be called with the wrong input values init_weights(rbm, input_first, input_last); //Allocate the trainer auto trainer = get_trainer(rbm); //Train for max_epochs epoch for (std::size_t epoch = 0; epoch < max_epochs; ++epoch) { //Shuffle if necessary shuffle(input_first, input_last, expected_first, expected_last); //Create a new context for this epoch rbm_training_context context; //Start a new epoch init_epoch(); //Train on all the data train_sub(input_first, input_last, expected_first, trainer, context, rbm); //Finalize the current epoch finalize_epoch(epoch, context, rbm); } return finalize_training(rbm); }