Я новичок в кафе
, Недавно я узнал, как использовать модель предварительно подготовленного кафе, чтобы делать некоторые прогнозы в моем собственном проекте,
и теперь я пытаюсь сделать итеративный прогноз, в то время как в каждом цикле будут новые данные (входные данные), которые будут использоваться для прогнозирования чего-либо.
Я использую слой данных памяти в качестве слоя ввода данных.
Прежде чем войти в цикл, я сделаю некоторые заявления
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» получает новые данные, вывод остается неизменным, он все равно показывает тот же результат, что и первый цикл.
Я пропустил какой-нибудь необходимый шаг?
Как это исправить?
Благодарю.
Решено заменой
datum.clear_data();
в
datum.clear_float_data();
Я думаю, что это потому, что данные с плавающей запятой занимают другое пространство памяти
так что если я хочу очистить старые данные с плавающей точкой
Мне нужно очистить место для данных с плавающей точкой.
Других решений пока нет …