: проверка завершилась неудачно: проверка завершилась неудачно: hdf_blobs_ -> shape (0) == num (200 против 6000)

У меня есть данные поезда и метки как data.mat. (У меня есть 200 учебных данных с 6000 функциями и ярлыками (-1, +1), которые были сохранены в data.mat).

Я пытаюсь преобразовать свои данные в hdf5 и запустить Caffe, используя:

load data.mat hdf5write('my_data.h5', '/new_train_x', single( reshape(new_train_x,[200, 6000, 1, 1]) ) ); hdf5write('my_data.h5', '/label_train', single( reshape(label_train,[200, 1, 1, 1]) ), 'WriteMode', 'append' ); 

И мой layer.prototxt (только слой данных):

 layer { type: "HDF5Data" name: "data" top: "new_train_x" # note: same name as in HDF5 top: "label_train" # hdf5_data_param { source: "/path/to/list/file.txt" batch_size: 20 } include { phase: TRAIN } } 

но у меня есть ошибка: (Check failed: hdf_blobs_ [i] -> shape (0) == num (200 против 6000))

 I1222 17:02:48.915861 3941 layer_factory.hpp:76] Creating layer data I1222 17:02:48.915871 3941 net.cpp:110] Creating Layer data I1222 17:02:48.915877 3941 net.cpp:433] data -> new_train_x I1222 17:02:48.915890 3941 net.cpp:433] data -> label_train I1222 17:02:48.915900 3941 hdf5_data_layer.cpp:81] Loading list of HDF5 filenames from: file.txt I1222 17:02:48.915923 3941 hdf5_data_layer.cpp:95] Number of HDF5 files: 1 F1222 17:02:48.993865 3941 hdf5_data_layer.cpp:55] Check failed: hdf_blobs_[i]->shape(0) == num (200 vs. 6000) *** Check failure stack trace: *** @ 0x7fd2e6608ddd google::LogMessage::Fail() @ 0x7fd2e660ac90 google::LogMessage::SendToLog() @ 0x7fd2e66089a2 google::LogMessage::Flush() @ 0x7fd2e660b6ae google::LogMessageFatal::~LogMessageFatal() @ 0x7fd2e69f9eda caffe::HDF5DataLayer::LoadHDF5FileData() @ 0x7fd2e69f901f caffe::HDF5DataLayer::LayerSetUp() @ 0x7fd2e6a48030 caffe::Net::Init() @ 0x7fd2e6a49278 caffe::Net::Net() @ 0x7fd2e6a9157a caffe::Solver::InitTrainNet() @ 0x7fd2e6a928b1 caffe::Solver::Init() @ 0x7fd2e6a92c19 caffe::Solver::Solver() @ 0x41222d caffe::GetSolver() @ 0x408ed9 train() @ 0x406741 main @ 0x7fd2e533ca40 (unknown) @ 0x406f69 _start Aborted (core dumped) 

Большое спасибо!!!! Любой совет будет принят во внимание!

    Проблема

    Кажется, что действительно существует конфликт с порядком элементов в массивах: matlab упорядочивает элементы от первого измерения до последнего (например, fortran), в то время как caffe и hdf5 сохраняют массивы из последнего измерения в первую очередь:
    Предположим, что X имеет форму n x c x h x w тогда «второй элемент X » равен X[2,1,1,1] в matlab, но X[0,0,0,1] в C (1- основанная на индексации на основе 0, не делает жизнь проще вообще).
    Поэтому, когда вы сохраняете массив size=[200, 6000, 1, 1] в Matlab, то, что на самом деле видят hdf5 и caffe, представляет собой массив shape=[6000,200] .

    Использование h5ls командной строки h5ls поможет вам h5ls проблему.
    В Matlab вы сохранили

     >> hdf5write('my_data.h5', '/new_train_x', single( reshape(new_train_x,[200, 6000, 1, 1]) ); >> hdf5write('my_data.h5', '/label_train', single( reshape(label_train,[200, 1, 1, 1]) ), 'WriteMode', 'append' ); 

    Теперь вы можете проверить полученный my_data.h5 с помощью h5ls (в терминале Linux):

     [email protected]:~/$ h5ls ./my_data.h5 label_train Dataset {200} new_train_x Dataset {6000, 200} 

    Как вы можете видеть, массивы написаны «назад».

    Решение

    Принимая во внимание этот конфликт при экспорте данных из Matlab, вы должны permute :

     load data.mat hdf5write('my_data.h5', '/new_train_x', single( permute(reshape(new_train_x,[200, 6000, 1, 1]),[4:-1:1] ) ); hdf5write('my_data.h5', '/label_train', single( permute(reshape(label_train,[200, 1, 1, 1]), [4:-1:1] ) ), 'WriteMode', 'append' ); 

    Осмотрите полученный my_data.h5 используя h5ls теперь результат:

     [email protected]:~/$ h5ls ./my_data.h5 label_train Dataset {200, 1, 1, 1} new_train_x Dataset {200, 6000, 1, 1} 

    Это то, чего вы ожидали в первую очередь.

    Interesting Posts

    Как я могу сбросить память процесса в Windows 7?

    Как использовать регулярное выражение java для соответствия строке

    Как отобразить вывод данных float с 2 десятичными знаками в Java?

    Есть ли бесплатный способ контролировать последовательный порт в Windows 7 x64?

    Сетевая активность сетевого устройства

    Отслеживание положения прокрутки и уведомление об этом других компонентах

    В IndexedDB есть способ сделать отсортированный составной запрос?

    Использование json_encode для объектов в PHP (независимо от области действия)

    Каково максимальное количество разделов, которые можно сделать на жестком диске?

    Страницы, отображающиеся в черном в Firefox Developer Edition

    Как удалить файл со странным именем?

    Какая оптимальная длина для паролей пользователей?

    MySQL ERROR 1045 (28000): доступ запрещен для пользователя ‘bill’ @ ‘localhost’ (с использованием пароля: YES)

    Каков наилучший способ реализации «таймера»?

    Windows: отключить кеширование больших файлов

    Давайте будем гением компьютера.