2016-12-21 6 views
1

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

Прямо сейчас, кофейная поддерживает только int32 тип метки для данных lmdb (тип label в Datum является int32).
Чтобы изменить это поведение по умолчанию, я изменил некоторые файлы в caffe следующим образом, но проблема осталась и после преобразования моих меток все равно нулю.

caffe.proto -> line36 : int32 to float 
convert_imageset.cpp -> line 75 and 77 : int to float 
io.cpp and io.hpp -> all the labels were int , I changed them to float 

В конце концов я скомпилировал caffe снова, но он не работает.

Есть ли кто-нибудь, чтобы решить эту проблему. для меня очень важно решить его как можно скорее.

Заранее спасибо.

+0

BTW, вы можете также выбрать сохраните 'label' в поле' float_data' 'Datum'. – Dale

+0

http://stackoverflow.com/q/31774953/6281477 этот пост также может помочь. – Dale

ответ

1

Решение вашей проблемы путем форсирования и настройки инструмента для работы с плавающей меткой в ​​наборе данных LMDB кажется не очень хорошей стратегией.

Предлагаю вместо этого использовать слой "HDF5Data" caffe. Использование hdf5-формата для хранения данных для кофе намного более гибко и позволяет иметь метки с плавающей точкой.

Для получения дополнительной информации см. this answer.

+0

спасибо, что использовать «HDF5Data», поскольку текущая версия имеет размер ограничения, и нам нужно разделить данные, значит, нам нужно конвертировать каждую часть (чтобы удовлетворить размер ограничения) данных отдельно? –

1

Если вы настаиваете на том, чтобы заставить caffe поддерживать метки с плавающей точкой, вам может потребоваться изменить convert_imageset.cpp line 81.
В настоящее время эта линия используется atoi для преобразования строки в Int:

label = atoi(line.substr(pos + 1).c_str()); 

Вы должны преобразовать его пользователю atof для преобразования строки в поплавка:

label = atof(line.substr(pos + 1).c_str()); 
+1

Спасибо за ваш ответ –

+0

@SoodabeZarezade рад, что я мог бы помочь. Если один из ответов сработал для вас, подумайте о том, чтобы принять его, щелкнув значок «v» рядом с ним. – Shai

+0

Только эта строка, а не те, о которых я упоминал в вопросе? –