2016-01-07 2 views
0

При использовании IPython:Pycaffe: Индекс вне диапазона при использовании оригинального train.prototxt как pretrained_file в Caffe.classifier

net = caffe.Classifier(MODEL_FILE, PRETRAINED) 

Я получил исключение, когда я использую оригинальный train.prototxt как pretrained_file (PRETRAINED)

--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-5-af51e3c78bed> in <module>() 
     2 plt.rcParams['image.interpolation'] = 'nearest' 
     3 plt.rcParams['image.cmap'] = 'gray' 
----> 4 net = caffe.Classifier(MODEL_FILE, PRETRAINED) 
/home/xiayu/work/caffe/caffe-master/python/caffe/classifier.pyc in 

__init__(self, model_file, pretrained_file, image_dims, mean, input_scale, raw_scale, channel_swap) 
    27 
    28   # configure pre-processing 
---> 29   in_ = self.inputs[0] 
    30   self.transformer = caffe.io.Transformer(
    31    {in_: self.blobs[in_].data.shape}) 

IndexError: list index out of range 

Я понятия не имею, почему in_ = self.inputs[0] индекс 0 находится вне диапазона, здесь я знаю, указанный deploy.prototxt может работать, но я не знаю, как.

действительно надеюсь, что некоторые могут ответить на мой вопрос!

ответ

2

Вы получаете эту ошибку, потому что ваш train_val.prototxt не имеет «внешних» входов: нет «дна», ожидаемых сетью и не предоставляемых сетью.
Это связано с тем, что train_val.prototxt имеет специализированные уровни данных, которые заботятся о вводе (обычно используются предварительно рассчитанные наборы данных, такие как lmdb/leveldb/hdf5 и т. Д.).
Если вы внимательно посмотрите на ваши deploy.prototxt вы заметите, что не имеет входной слой, вместо этого он имеет объявление:

net: "some name" 
input: "data" 
input_shape { 
    dim: 10 
    dim: 3 
    dim: 224 
    dim: 224 
} 

Это утверждение декларирует «внешний» вход, то есть в результате сеть будет ожидать ввода имени «данные» с формой (10,3,224,224).
Ваш train_val.prototxt не имеет такой декларации.