Caffe:python (L.Concat) 中的连接层

Caffe: concatenation layer in python (L.Concat)

我想知道如何在 python 中将两层连接成一层。更具体地说,我想将池化(子采样)层的输出与非可视化数据结合起来,然后在其上放置一个完全连接的层。

假设子采样层将输出形状为 64*2*2 的神经元(如果我们忽略 caffe 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)

# ...

我不确定您是否找到问题的答案,但如果还没有,那么您可能想尝试以下方法:

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

以上应该允许您通过 pycaffe/python 层调用 Concat 层。

我同样在尝试做一个python生成的反卷积层

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、步幅)

L.Concat(top1, top2, top3) 适合我