Не найдена соответствующая функция для dnn_trainer в dlib

Я пытаюсь обучить модель глубокого обучения dlib'd с моим набором функций, который находится в CSV. Я импортировал 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 
    ) 

Я следую этому примеру с моим набором данных. Пожалуйста, помогите мне решить проблему.

1 ответ

Я получил ответ на эту проблему, и это решило ее. Функция dlib dnn принимает входные данные как матричный вектор, а матрица определяется в dlib, как MATLAB, для повышения скорости. Поэтому входные данные должны быть определены в соответствии с этим форматом. 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

для тестовых этикеток, которые должны быть без знака длинного типа

Другие вопросы по тегам