2015-12-30 1 views
0

Мне интересно, как выполнить конкатенацию двух слоев в один в python. В частности, я хочу присоединиться к выходу уровня объединения (подвыборки) с не-визуальными данными, чтобы затем добавить к нему полностью подключенный слой.Caffe: уровень конкатенации в python (L.Concat)

Предположим, что уровень подвыборки будет выводить нейроны с формой 64 * 2 * 2 (если мы игнорируем catch batch_size), и что слой данных, к которому я хочу присоединиться, содержит только 1 функцию (скорость плавания, которая колеблется от 0 до 1).

Вот некоторые фиктивный код, чтобы поставить вас в контексте:

import numpy as np 

import caffe 
from caffe import layers as L 
from caffe import params as P 

# ... 

n.conv4 = L.Convolution(n.relu3, kernel_size=3, num_output=64, weight_filler=dict(type='xavier')) 
n.pool4 = L.Pooling(n.conv4, kernel_size=3, stride=2, pool=P.Pooling.AVE) 
# Data of shape `batch_size*64*2*2` out of this layer (if dropout ignored). 
n.relu4 = L.ReLU(n.pool4, in_place=True) 

### 
# This is what I want to know how to do, yet this might not even be 
# the good way to call the function: 
n.join_speed = L.Concat([n.relu4, n.data_speed], in_place=True) 
#### 

n.ip1 = L.InnerProduct(n.join_speed, num_output=512, weight_filler=dict(type='xavier')) 
n.sig1 = L.Sigmoid(n.ip1, in_place=True) 

# ... 
+0

вам может понадобиться добавить '' слой «Reshpe», чтобы сгладить 'n.relu4' выход. – Shai

+0

В подобной нейронной сети, которую я сделал, мой 'n.relu4' был напрямую загружен в' n.ip1' без каких-либо изменений или concat. Было бы неправильно, но работало? –

+1

, если вы кормите * только * 'n.relu4', чтобы' n.ip1' caffe «сгладил» его для вас. но если вы разделите две капли, вы должны убедиться, что их размеры совместимы в первую очередь. – Shai

ответ

1

я не уверен, если вы выяснили, ответ на ваш вопрос, но если у вас нет, то вы можете попробовать следующее:

bottom_layers = [n.relu4, n.data_speed] 
n.join_speed = L.Concat(*bottom_layers) 

Вышеупомянутое должно позволить вам называть слой Concat через слой pycaffe/python.

+0

это сработало для меня –

0

Я так же пытался сделать питон сгенерированных deconv слой

n.deconv8 = L.Deconvolution(n.conv7) 

работает нормально, но

n.deconv8 = L.Deconvolution(n.conv7,kernel_size=2) 

хиты

AttributeError: 'LayerParameter' object has no attribute 'kernel_size' 

и аналогично для

n.deconv8 = L.Deconvolution(n.conv7,num_output=1024) 

так есть некоторый новый синтаксис для указания этих параметров (также weight_filler, bias_filler, Stride)

+0

btw the bottom_layers = [n.relu4, n.data_speed] n.join_speed = L.Concat (* bottom_layers) работал для меня. –

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