我正在尝试使用csv中的功能集训练dlib深度学习模型。我导入了csv并将数据转换为trainindata和traininglabels的向量
unsigned int col=22;
std::vector<std::vector<float> >trainingdata(10711,std::vector<float>(col));
for (int j=0; j<10712; j++) {
std::vector<float> vt;
// <vector<float> >vt;
float tmp;
for (int i = 0; i < 22; i++) {
tmp=data[j][i];
// cout<< tmp;
vt.push_back(tmp);
}
trainingdata.push_back(vt);
}
std::vector<float> traininglabel;
for (int i=0;i<10712;i++) {
float tmp = lastCol[i];
traininglabel.push_back(tmp);
}
数据已成功转换为向量,但我怀疑它不是按照dnn_trainer的要求格式。错误是
error: no matching function for call to 'dlib::dnn_trainer<dlib::add_loss_layer<dlib::loss_multiclass_log_, dlib::add_layer<dlib::fc_<22ul, (dlib::fc_bias_mode)0u>, dlib::add_layer<dlib::relu_, dlib::add_layer<dlib::fc_<84ul, (dlib::fc_bias_mode)0u>, dlib::add_layer<dlib::relu_, dlib::add_layer<dlib::fc_<120ul, (dlib::fc_bias_mode)0u>, dlib::add_layer<dlib::max_pool_<2l, 2l, 2, 2, 0, 0>, dlib::add_layer<dlib::relu_, dlib::add_layer<dlib::con_<16l, 5l, 5l, 1, 1, 2, 2>, dlib::add_layer<dlib::max_pool_<2l, 2l, 2, 2, 0, 0>, dlib::add_layer<dlib::relu_, dlib::add_layer<dlib::con_<6l, 5l, 5l, 1, 1, 2, 2>, dlib::input<dlib::matrix<float> >, void>, void>, void>, void>, void>, void>, void>, void>, void>, void>, void> > >::train(std::vector<std::vector<float> >&, std::vector<float>&)'
trainer.train( trainingdata,traininglabel);
trainer.h文件表明输入数据的类型应为
void train (
const std::vector<input_type>& data,
const std::vector<training_label_type>& labels
)
我正在关注我的数据集的this示例。请帮助我解决问题。
答案 0 :(得分:0)
我得到了这个问题的答案并解决了它。 dlib dnn函数将输入作为矩阵向量,矩阵在dlib中定义,如MATLAB,以提高速度。必须根据该格式定义输入。 csv加载并传递给所需的变量:
[[UITextView appearance] setKeyboardAppearance:UIKeyboardAppearanceDark];
在其中
std::vector<matrix<float> > trdata;
std::vector<unsigned long> trlabel;
std::vector<matrix<float> > testdata;
std::fstream file("features.csv");
if (file.good()) {
for(int row=0;row<10712; row++){
for (int col = 0; col < 24; col++)
{
string temp;
if (col == 0)
getline(file, temp,',');
else if (col == 23)
{
getline(file, temp);
trlabel[row]=stof(temp);
}
else
{
getline(file,temp , ',');
trdata[row](0,0)=stof(temp);
}
}
}
}
是定义用于训练DNN和
的测试输入的方法std:vector<matrix<float> >trdata
表示必须为unsigned long类型的测试标签