2017-02-19 19 views
2

Я пытаюсь получить доступ к различным слоям с помощью Caffe C++. Однако я не могу получить никаких данных:Caffe C++ - Доступ к данным в других слоях

net_.Forward(); 

std::vector<std::string> layerNames = net_.layer_names(); 
for(int i=0; i<layerNames.size(); i++){ 
    cout << layerNames[i] << endl; 
    std::vector<boost::shared_ptr<caffe::Blob<float> > >& layer = net_.layer_by_name(layerNames[i])->blobs(); 
    cout << layer.size() << endl; 
} 

Выше был подход, который я использовал. Даже слой «data» кажется пустым, с размером вектора 0. Что здесь происходит?

+0

Я думаю, что вы получаете внутренние параметры слоев. «Уровень данных« 'не имеет внутренних параметров, и поэтому вы получаете нулевой размер для этого слоя. Получаете ли вы ненулевой размер для других слоев («Conv» и «InnrrProduct»)? – Shai

+0

Вместо этого вы должны посмотреть на 'net_.blobs()' и 'net_.blob_names()'. – Shai

+1

Это похоже на работу! Вы можете опубликовать его как ответ – Raaj

ответ

0

Ваш код проверяет blobs слоя: это внутренние параметры сети (обучаемые параметры). "Data" слой не имеет внутренних параметров, поэтому size из выбранного blob равен нулю.

С другой стороны, если вы хотите проверить данные о блоках данных сети (т. Е. Входы и ответы), вы должны посмотреть на и net_.blobs().