Ich bin ein Anfänger zu caffe . Kürzlich habe ich gelernt, wie man ein vortrainiertes Caffe-Modell benutzt, um einige Vorhersagen in meinem eigenen Projekt zu machen, und jetzt versuche ich eine iterative Vorhersage zu machen, während in jeder Schleife neue Daten (Eingabe) existieren und verwendet werden etwas vorhersagen.Iterativ Vorhersage mit Caffe in einem C++ Projekt
Ich verwende Speicherdatenschicht als meine Dateneingabeschicht.
Bevor die Schleife eintritt, werde ich einige Erklärung machen
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();
Und in jeder Schleife „mydata“ einige neue Daten erhalten und werden für eine neue Vorhersage verwendet werden.
Hier ist, was ich in jeder Schleife tun
("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;
}
Für die erste Schleife ist das Ergebnis korrekt ist. Aber für die folgende Schleife, obwohl "Mydata" die neuen Daten erhalten, bleibt die Ausgabe unverändert, es zeigt immer noch das gleiche Ergebnis wie die erste Schleife.
Habe ich einen notwendigen Schritt übersprungen? Wie es zu beheben?
Danke.