在dlib中找不到与dnn_trainer匹配的函数

时间:2017-06-30 07:38:02

标签: c++ deep-learning dlib

我正在尝试使用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示例。请帮助我解决问题。

1 个答案:

答案 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类型的测试标签