繁体   English   中英

如何创建具有本地连接层和密集父层的本地连接层?

[英]How can I create a locally-connected layer with both locally-connected and dense parent layers?

我目前有一个带有两个输入层的网络( 玩具示例的图像 )。 in1只是值的简短平面向量,而in2是27通道图像。 我希望将网络构建在本地连接的层上,但是我不知道将in1的数据撒入in2的好方法。 目前,我将in2的分支平整了几层,与in1合并,然后继续添加密集的层。

如何在保持本地连接体系结构的同时密集引入in1的数据? 上面链接的图像用红色箭头显示了此目标。

我想出的一种可能的解决方案是将in1的向量作为通道复制到in2 ,以使in2的尺寸为width * height * (num_original_channels + len(in1) ) 这似乎不雅,因为它会被复制in1 多次 一定会有更好的办法。

我是keras的新手,所以请原谅我摇摇欲坠的词汇。 另外,这只是一个玩具示例,仅用于说明我的想法,因此可能会有其他/无关的建筑批评。

在此先感谢您的任何建议!

首先,这是我正在使用的代码:

input1 = Input( ... ) #small flat vec
input2 = Input( ... ) #deep picture

pre = Reshape( ... )( input2 )
l1 = LocallyConnected2D( ... )( pre )
l2 = LocallyConnected2D( ... )( l1 )
l3 = LocallyConnected2D( ... )( l2 )
flat = Flatten( ... )( l3 )
merge = tensorflow.keras.layers.concatenate( [flat, input1], ... )
l4 = Dense( ... )( merge )
l5 = Dense( ... )( l4 )
output = Dense( ... )( l5 )

在这里回答我自己的问题。 似乎最好的解决方案是让input1和input2都创建两个具有相同层且没有激活函数的单独的张量,将它们加在一起,然后添加激活。

使用之前的示例,它看起来像这样:

(我正在添加示例尺寸以希望阐明我的意思。它们是凭空制作的)

input1 = Input( ... ) #small flat vec, 1x200
input2 = Input( ... ) #deep picture,   50x50x10

l1 = LocallyConnected2D( activation=None, ... )( input2 ) # 40x40x5

num_elements = 40 * 40 * 5
d1 = Dense( units=num_elements, activation=None, ... )( input1 ) # 1x8000
d1_3D = Reshape( target_shape=(40, 40, 5,) )( d1 ) #40x40x5

merge = Add()([ l1, d1_3D ]) #40x40x5
l2 = LeakyReLU( ... )( merge ) #Or whatever activation function you want, 40x40x5

# ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM