簡體   English   中英

為什么我的輸入和來自 keras conv2d 的 output 形狀尺寸相同?

[英]Why is my input and output shape from keras conv2d the same dimensions?

我正在嘗試用這種形狀重建別人的網絡:

在此處輸入圖像描述

我的(圖像)數據進入 .network 具有以下形狀:

print(X_train[0].shape)
print(len(X_train))
print(len(y_train))

(150,150,3)
2160
2160

我可以寫一個 neural.network 來運行沒問題:

model = Sequential()
model.add(Input(shape=(150,150,3)))
model.add(Conv2D(32, kernel_size=3,strides=(1, 1),activation='relu', padding='same', dilation_rate=1))
model.add(MaxPooling2D(pool_size=(2, 2)))

但是當我查看 plot 時,它看起來像這樣:

在此處輸入圖像描述

有人可以向我解釋為什么我的 Conv2D 層的 output 沒有按預期從 150 減少到 148 嗎? (據推測,max_pooling 層中的“錯誤”數字是這個的結果,所以我只需要專注於理解 Conv2D 層中的差異)。

一種可能的解決方案是在Conv2D層中使用padding=valid

model = Sequential()
model.add(Input(shape=(150,150,3)))
model.add(Conv2D(32, kernel_size=3, strides=(1, 1), activation='relu', padding='valid', dilation_rate=1))
model.add(MaxPooling2D(pool_size=(2, 2)))

結果總結:

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             (None, 148, 148, 32)      896       
                                                                 
 max_pooling2d (MaxPooling2D)  (None, 74, 74, 32)       0         

=================================================================

您使用padding='same這樣您就不會“松動”側面的任何值

對不同的填充策略有很好的 gif

暫無
暫無

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

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