Функция Pycaffe Net forward_all() не работает

#python #caffe #pycaffe

#python #caffe #pycaffe

Вопрос:

После того, как я определил некоторые веса CNN, я решаю использовать ту же сетевую архитектуру для выполнения прогнозирования. Я установил свои данные batch_size = 64 .

Я могу правильно запустить pred_net.forward() функцию, и я могу получить предсказанные классы из blobs['prob'] .

В моем наборе данных 20000 выборок. Если я вызову forward() функцию несколько i раз, я получу 64*i образцы, пересылаемые в сеть. Поэтому я не могу охватить 20000 выборок, не пересылая некоторые выборки дважды.

Поэтому я попробовал forward_all() функцию. Но я получил исключение без какой-либо полезной информации. Я не знаю, что не так.

Я ожидал, что forward() и forward_all() похожи (но нет).

Вот часть моего кода и сообщение об ошибке:

 pred_net = caffe.Net(pred_net_proto_file, 'kg_trained.caffemodel', caffe.TEST)

pred_net.forward_all()
  

 ---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-6-cefd35621a35> in <module>()
----> 1 pred_net.forward_all()

/home/microos/Space/caffe-master/python/caffe/pycaffe.pyc in _Net_forward_all(self, blobs, **kwargs)
    197         all_outs[out] = np.asarray(all_outs[out])
    198     # Discard padding.
--> 199     pad = len(six.next(six.itervalues(all_outs))) - len(six.next(six.itervalues(kwargs)))
    200     if pad:
    201         for out in all_outs:

StopIteration: 
  

Надеюсь, я все четко описал.

Ответ №1:

вы должны передать данные, которые хотите переслать, в функцию forward_all():

 pred_net = caffe.Net(pred_net_proto_file, 'kg_trained.caffemodel', caffe.TEST)
pred_net.forward_all(data=data_samples)
  

предположим, что ваш CNN ожидает изображения формы (3,224,224), тогда ваши data_samples должны иметь форму (20000,3,224,224)

Комментарии:

1. Согласно вашему ответу, похоже, необходимо ввести некоторые данные в forward_all . Но в моем prototxt, net define моем источнике данных есть lmdb , могу ли я использовать данные внутри prototxt ? Спасибо