我目前有一个具有两个输入层的网络(image of toy example)。 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 )
答案 0 :(得分:0)
在这里回答我自己的问题。似乎最好的解决方案是让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
# ...