24 #include <boost/serialization/export.hpp> 25 #include <boost/archive/text_iarchive.hpp> 26 #include <boost/archive/text_oarchive.hpp> 27 #include <boost/archive/xml_iarchive.hpp> 28 #include <boost/archive/xml_oarchive.hpp> 43 using namespace Eigen;
51 print_training_progress_(false)
58 print_training_progress_(false)
76 cerr <<
"WARNING: You may not call FunctionApproximatorLWPR::train more than once. Doing nothing." << endl;
77 cerr <<
" (if you really want to retrain, call reTrain function instead)" << endl;
81 assert(inputs.rows() == targets.rows());
86 int n_in =inputs.cols();
87 int n_out=targets.cols();
89 LWPR_Object* lwpr_object =
new LWPR_Object(n_in, n_out);
90 lwpr_object->setInitD( meta_parameters_lwpr->init_D_[0]);
91 lwpr_object->wGen( meta_parameters_lwpr->w_gen_);
92 lwpr_object->wPrune( meta_parameters_lwpr->w_prune_);
93 lwpr_object->updateD( meta_parameters_lwpr->update_D_);
94 lwpr_object->setInitAlpha(meta_parameters_lwpr->init_alpha_);
95 lwpr_object->penalty( meta_parameters_lwpr->penalty_);
96 lwpr_object->diagOnly( meta_parameters_lwpr->diag_only_);
97 lwpr_object->useMeta( meta_parameters_lwpr->use_meta_);
98 lwpr_object->metaRate( meta_parameters_lwpr->meta_rate_);
99 lwpr_object->kernel( meta_parameters_lwpr->kernel_name_.c_str());
102 vector<double> input_vector(n_in);
103 vector<double> target_vector(n_out);
104 int n_input_samples = inputs.rows();
107 PermutationMatrix<Dynamic,Dynamic> permute(n_input_samples);
108 permute.setIdentity();
109 VectorXi shuffled_indices = VectorXi::LinSpaced(n_input_samples,0,n_input_samples-1);
111 for (
int iterations=0; iterations<50; iterations++)
113 random_shuffle(permute.indices().data(), permute.indices().data()+permute.indices().size());
114 shuffled_indices = (shuffled_indices.transpose()*permute).transpose();
116 for (
int ii=0; ii<n_input_samples; ii++)
119 Map<VectorXd>(input_vector.data(),n_in) = inputs.row(shuffled_indices[ii]);
120 Map<VectorXd>(target_vector.data(),n_out) = targets.row(shuffled_indices[ii]);
122 lwpr_object->update(input_vector, target_vector);
125 if (print_training_progress_)
130 fa_tmp->
predict(inputs, outputs);
132 MatrixXd abs_error = (targets.array()-outputs.array()).abs();
133 VectorXd mean_abs_error_per_output_dim = abs_error.colwise().mean();
134 cout <<
"Iteration " << iterations <<
" MEA=" << mean_abs_error_per_output_dim << endl;
148 cerr <<
"WARNING: You may not call FunctionApproximatorLWPR::predict if you have not trained yet. Doing nothing." << endl;
154 int n_in = model_parameters_lwpr->lwpr_object_->model.nIn;
155 assert(inputs.cols()==n_in);
157 int n_input_samples = inputs.rows();
158 int n_out = model_parameters_lwpr->lwpr_object_->model.nOut;
160 outputs.resize(n_input_samples,n_out);
163 vector<double> input_vector(n_in);
164 vector<double> output_vector(n_out);
167 for (
int ii=0; ii<n_input_samples; ii++)
170 Map<VectorXd>(input_vector.data(),n_in) = inputs.row(ii);
171 output_vector = model_parameters_lwpr->lwpr_object_->predict(input_vector);
172 outputs.row(ii) = Map<VectorXd>(&output_vector[0], n_out);
177 template<
class Archive>
178 void FunctionApproximatorLWPR::serialize(Archive & ar,
const unsigned int version)
void train(const Eigen::Ref< const Eigen::MatrixXd > &inputs, const Eigen::Ref< const Eigen::MatrixXd > &targets)
Train the function approximator with corresponding input and target examples.
FunctionApproximatorLWPR class header file.
bool isTrained(void) const
Determine whether the function approximator has already been trained with data or not...
ModelParametersLWPR class header file.
Base class for all function approximators.
BOOST_CLASS_EXPORT_IMPLEMENT(DmpBbo::FunctionApproximatorLWPR)
For boost::serialization.
FunctionApproximator * clone(void) const
Return a pointer to a deep copy of the FunctionApproximator object.
void predict(const Eigen::Ref< const Eigen::MatrixXd > &inputs, Eigen::MatrixXd &output)
Query the function approximator to make a prediction.
Model parameters for the Locally Weighted Projection Regression (LWPR) function approximator.
LWPR (Locally Weighted Projection Regression) function approximator.
const MetaParameters * getMetaParameters(void) const
Accessor for FunctionApproximator::meta_parameters_.
const ModelParameters * getModelParameters(void) const
Accessor for FunctionApproximator::model_parameters_.
void setModelParameters(ModelParameters *model_parameters)
Accessor for FunctionApproximator::model_parameters_.
void set_print_training_progress(bool print_training_progress)
Print some output to cout during training.
int getExpectedInputDim(void) const
The expected dimensionality of the input data.
Header file for serialization of Eigen matrices.