簡體   English   中英

在Keras Sequential模型中,Conv2D似乎要求內核比前一層更厚。 為什么?

[英]In a Keras Sequential model, Conv2D seems to require the kernel be narrower than the previous layer is thick. Why?

我正在Conv2D創建一個Sequential模型,它采用彩色圖像並通過與頂層大致相同大小和形狀的多個Conv2D層進行卷積(基本上減去由卷積切掉的邊緣)。

我的理解如下:

kernel_size表示每個卷積輸入filters大小表示每個卷積輸出的層深度。

然后我在卷積之后做了一些其他的事情,這在這里是不相關的。

但是,當我在對一些小數據進行測試之前嘗試編譯我的模型時,我發現當我嘗試使給定圖層的kernel_size大於前一層的filters時,Tensorflow會抱怨。 它實際上並沒有這么說; 相反它說

通過輸入形狀[?,1,1022,1022],[3,3,1022,1]為'conv2d_2 / convolution'(op:'Conv2D')從1中減去3得到的負尺寸大小

這並不完全是提供信息的。 但是,我注意到它所放的數字對應於

從<上一層的filters >中減去<this layer的kernel_size >導致的負尺寸大小....

並將filters設置為更高可以阻止錯誤。

我的問題是:為什么會這樣? 我認為filters指定了深度 ,而kernel_size指定了寬度 不應該需要將卷積補丁適合前一層的厚度。 而且,在第一層上不會出現這個問題,其溝道深度(我理解為有效地等效於filters )是3。

這是一個錯誤,還是我誤解了這些參數的含義,還是其他什么?

代碼段:

__model = Sequential()

# feature layers
__model.add(Conv2D(input_shape=(3, iX, iY), data_format="channels_first", kernel_size=kernelfilters[0][0],
                   filters=kernelfilters[0][1], activation=ACTIVATION))

for kernelfilter in kernelfilters:
    __model.add(Conv2D(kernel_size=kernelfilter[0], filters=kernelfilter[1], activation=ACTIVATION))

最后一行是破壞​​的那一行。

kernelfilters數組中的每個kernelfilter都是一對數字,按順序指定kernel_sizefilters值。 iXiY是初始圖像尺寸。 ACTIVATION是一個常數,目前設置為"relu"但我可能會在以后更改它!

你的前提是錯的,一般情況並非如此。 只有當您使用image_data_format keras參數(在~/.keras/keras.kson )或每個圖層的data_format參數時,才會發生這種情況。

以一致的方式更改此參數(僅在某些層中)將完全搞砸數據的解釋方式,因為它會更改通道維度的位置,這可能是解釋器作為空間維度之一。 對於TF后端(意味着input_shape中的input_shape應該是形式的元組(width, height, channels) )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM