【发布时间】:2018-12-22 22:28:15
【问题描述】:
我正在研究LeNet5 架构。如here 所述,我想在 C3 层和 S2 层之间实现自定义连接。如果我想按照here 的说明实现自定义连接,我该如何在“CODE-1”和“CODE-2”中定义我的模型。我应该在“CODE-2”中使用多少个过滤器。任何类型的帮助将不胜感激。
s2的输出是14*14*6,需要对这6个特征图应用16个过滤器。然而,不是所有 6 个 S2 映射到 c3 的 16 个神经元,而是 C3 层映射中的大多数神经元仅连接到三个或四个 S2 映射中的神经元。更多细节可以在图 2 和图 3 中找到。 c3 层有 16 个特征图,大小为 5×5,步幅为 1。在这一层中,16 个特征图中只有 10 个与 s2 的 6 个特征图相连。
如果您注意到图像 3,c3 的神经元 0 连接到 s2 的 0、1 和 2 个特征图。如何实现这种连接。
我的代码如下所示:
from keras.models import Model
from tensorflow.keras.layers import Conv2D, Input, Concatenate, Lambda
CODE-1
inputTensor = Input(shape=(14, 14, 6))
group0 = Lambda(lambda x: x[:,:,:3], output_shape=((10, 10, 1)))(inputTensor)
group1 = Lambda(lambda x: x[:,:,1:4], output_shape=((10, 10, 1)))(inputTensor)
group2 = Lambda(lambda x: x[:,:,2:5], output_shape=((10, 10, 1)))(inputTensor)
group3 = Lambda(lambda x: x[:,:,3:6], output_shape=((10, 10, 1)))(inputTensor)
# all 16 layers of c3 (of the Custom Connections image)
CODE-2
conv_group0 = Conv2D(1, kernel_size=[5,5], strides=(stride,stride), padding="valid", activation = 'tanh')(group0)
conv_group1 = Conv2D(1, kernel_size=[5,5], strides=(stride,stride), padding="valid", activation = 'tanh')(group1)
conv_group2 = Conv2D(1, kernel_size=[5,5], strides=(stride,stride), padding="valid", activation = 'tanh')(group2)
#all 16 layers convolution
output_layer = Concatenate()([conv_group0,conv_group1,conv_group2,conv_group3,conv_group4,conv_group5,conv_group6,conv_group7,
conv_group8,conv_group9,conv_group10,conv_group11,conv_group12,conv_group13,conv_group14,conv_group15])
Mymodel = Model(inputTensor,output_layer)
【问题讨论】:
-
我看不到您在图片中所说的自定义连接,您能澄清一下吗?
-
@Matias Valdenegro s2 的输出为 14*14*6,需要在这 6 个特征图上应用 16 个过滤器。然而,不是所有 6 个 S2 映射到 c3 的 16 个神经元,而是 C3 层映射中的大多数神经元仅连接到三个或四个 S2 映射中的神经元。例如,如果您注意到图像 3,则 c3 的神经元 0 连接到 s2 的 0、1 和 2 个特征图。如何实现这种连接。更多细节可以在图片 2 和 3 中找到。
标签: tensorflow machine-learning keras neural-network data-science