簡體   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