【问题标题】:no matching function found to dnn_trainer in dlib在 dlib 中找不到与 dnn_trainer 匹配的函数
【发布时间】:2017-12-04 02:22:30
【问题描述】:

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

【问题讨论】:

    标签: c++ deep-learning dlib


    【解决方案1】:

    我得到了这个问题的答案并解决了它。 dlib dnn 函数将输入作为矩阵向量,矩阵像 MATLAB 一样在 dlib 中定义以提高速度。所以必须按照该格式定义输入。 csv 加载并传递给所需的变量:

    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);
                }
    
             }
        }
    
    }
    

    在里面

    std:vector<matrix<float> >trdata 
    

    是定义用于 DNN 训练的测试输入和

    std::vector<unsigned long>trlabel
    

    对于必须为无符号长类型的测试标签

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 1970-01-01
      • 2014-09-28
      • 2020-01-14
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      相关资源
      最近更新 更多