2017-01-15 18 views
1

У меня есть обученная сеть, состоящая из следующих слоев: {conv1, pool1, conv2, pool2, conv3, pool3, conv4, pool4, fc5, fc6, output} , которые fc означает полностью связанные слои, а conv - сверточные слои.Функция экстракции на нейронных сетях с использованием Theano

Мне нужно выполнить извлечение объектов для некоторых изображений. Я использую Лазанью и Теано. Мне нужно сохранить функции из каждого слоя для последующего анализа. Я новичок на этом языке, поэтому я попытался найти примеры кода или некоторые учебники по этому вопросу (с помощью theano/lasagne). Однако я не понял, что мне делать сам.

Я был бы признателен, если кто-то может помочь мне в этом, чтобы реализовать извлечение функции.

Спасибо заранее

Edit: Я последовал за замечания г-н/г-жа gntoni, вот мой код:

feat_all = [] 
    for layer in layer_list: 
     feat = np.zeros_like(lasagne.layers.get_output([self.acnn.cnn[layer]], inputs = img, deterministic=True)) 
     feat[:] = lasagne.layers.get_output([self.acnn.cnn[layer]], inputs = img, deterministic=True) 
     feat_all.append(feat) 
= 

Для моего случая, мне нужно сохранить функции от каждого слоя. Я хочу, чтобы написать функцию, как тот, который мы имеем в Caffe:

self.net.blobs['data'].data[0] = img 
     self.net.forward(end=layer_list[-1]) 

     feat_all = [] 
     for layer in layer_list: 
      feat = np.zeros_like(self.net.blobs[layer].data[0]) 
      feat[:] = self.net.blobs[layer].data[0] 
      feat_all.append(feat) 

Однако моя обучен модель написана с лазанием и Феан Так что я должен реализовать это в формате лазание.

После написания кода выше (в лазаньи), я получаю пустой вывод. Интересно, почему и как я могу это исправить.

Спасибо заранее

ответ

1

свёрточной нейронных сетей, как ваши, состоят из двух частей:

Первых из них является часть выделения признаков и в вашем случае заключается в ко-пуле слоях {CONV1 , pool1, conv2, pool2, conv3, pool3, conv4, pool4}.

Вторая часть классификации. В вашей сети: {fc5, fc6, output}.

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

Таким образом, если после обучения вы отсоедините две эти части, то вы увидите, что на выходе слоя conv вам будут доступны функции.

Указанные функции могут быть использованы другими классификаторами. Фактически, многие люди используют уже подготовленную сеть (например, AlexNet), удаляют последние слои классификации и используют функции со своей собственной системой классификации.

+0

Большое вам спасибо. Можете ли вы также помочь мне с частью реализации? Поскольку я не могу найти, какую функцию я должен использовать для этого случая. – kadaj13

+0

У вас должна быть некоторая функция, например 'lasagne.layers.get_output()' получение значений из последнего слоя. Просто создайте новую функцию, чтобы получить значения из слоя pool4. – gntoni

+0

Большое вам спасибо за помощь. Я попробую. – kadaj13

0

Имейте в виду, что в Лазанье метод get_output возвращает тензоры Anano, и вы не можете напрямую использовать их для вычисления функций из массива numpy. Однако вы можете определить функцию Theano и использовать ее для вычисления значений. В вашем случае:

layers = [self.acnn.cnn[layer] for layer in layer_list] 
feat_fn = theano.function([input_var], lasagne.layers.get_output(layers), 
          deterministic=True) 

где input_var тензор вход в сеть. Метод get_output может принимать несколько уровней, а функции Theano могут иметь несколько выходов, поэтому вы можете определить одну функцию для извлечения всех функций.Получение числовых значений так же просто, как:

feat_all = feat_fn(img) 

 Смежные вопросы

  • Нет связанных вопросов^_^