Мне интересно, как выполнить конкатенацию двух слоев в один в 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)
# ...
вам может понадобиться добавить '' слой «Reshpe», чтобы сгладить 'n.relu4' выход. – Shai
В подобной нейронной сети, которую я сделал, мой 'n.relu4' был напрямую загружен в' n.ip1' без каких-либо изменений или concat. Было бы неправильно, но работало? –
, если вы кормите * только * 'n.relu4', чтобы' n.ip1' caffe «сгладил» его для вас. но если вы разделите две капли, вы должны убедиться, что их размеры совместимы в первую очередь. – Shai