2016-11-01 47 views
0

我是caffe 的初學者。最近我一直在學習如何使用pretrained caffe模型在我自己的項目中做一些預測,現在我試圖做一個迭代預測,而在每個循環中都會有一個新的數據(輸入),並將用於預測某事。在C++項目中使用caffe迭代式預測

我使用內存數據層作爲我的數據輸入層。

進入循環之前,我會做出一些聲明

caffe::Datum datum; 
    datum.set_channels(1); 
    datum.set_height(1); 
    datum.set_width(30); 
    vector<float> mydata; 

    vector<caffe::Datum> dvector; 
    boost::shared_ptr<MemoryDataLayer<float> > memory_data_layer; 
    memory_data_layer = boost::static_pointer_cast<MemoryDataLayer<float>>(net.layer_by_name("datas")); 
    const boost::shared_ptr<Blob<float>> & blobs = net.blob_by_name("result"); 
    const float* output = blobs->cpu_data(); 

而且在每個循環中,「MYDATA」會得到一些新的數據,將被用於新的預測。

這是我在每個循環

("mydata" updated) 

    datum.clear_data(); 

    for(int i=0;i<30;i++) 
    datum.add_float_data(mydata[i]); 

    dvector.clear(); 
    dvector.push_back(datum); 

    memory_data_layer->AddDatumVector(dvector); 

    float loss = 0.0; 
    net.Forward(&loss); 
    for (int i = 0; i < 10; i =++) 
     {    
       cout<< output[i] <<endl; 
     } 

對於第一個循環做,結果是正確的。 但是,對於下面的循環,儘管「mydata」獲取新數據,但輸出保持不變,仍然顯示與第一個循環相同的結果。

我跳過了任何必要的步驟嗎? 如何解決它?

謝謝。

回答

0

通過更換

datum.clear_data(); 

datum.clear_float_data(); 

解決,我認爲這是因爲如果我想清理舊浮點數據 我需要清除浮動數據採取另一種內存空間 所以浮點數據的空間。