машинное обучение — итеративное предсказание с использованием caffe в проекте C ++

Я новичок в кафе
, Недавно я узнал, как использовать модель предварительно подготовленного кафе, чтобы делать некоторые прогнозы в моем собственном проекте,
и теперь я пытаюсь сделать итеративный прогноз, в то время как в каждом цикле будут новые данные (входные данные), которые будут использоваться для прогнозирования чего-либо.

Я использую слой данных памяти в качестве слоя ввода данных.

Прежде чем войти в цикл, я сделаю некоторые заявления

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

Я думаю, что это потому, что данные с плавающей запятой занимают другое пространство памяти
так что если я хочу очистить старые данные с плавающей точкой
Мне нужно очистить место для данных с плавающей точкой.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]