[英]Keras: transposing kernel of Conv2D layer for reuse in another Conv2D layer
[英]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_size
和filters
值。 iX
和iY
是初始圖像尺寸。 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.