簡體   English   中英

如何在 2D 卷積神經網絡中使用 6x6 濾波器大小而不導致負維度?

[英]How to use 6x6 filter size in a 2D Convolutional Neural Network without causing negative dimensions?

我使用 2D CNN 進行分類。 我的數據由大小為 (3788, 6, 1) 的樣本組成。 (行、列、通道)

每個張量中的 6 列分別代表加速度計傳感器和陀螺儀傳感器的 X、Y 和 Z 值。 我的目標是根據傳感器數據預測樣本中執行的 11 種可能運動中的哪一種。

從邏輯的角度來看,讓過濾器在每個步幅中同時考慮兩個傳感器的 X、Y 和 Z 值對我來說是有意義的,因為所有 6 個值的組合是定義運動的關鍵。 這會給我留下一個大小為(?,6)的過濾器。 由於過濾器主要用於二次形狀,因此我嘗試使用大小為 (6, 6) 的過濾器。 這會引發錯誤,因為過濾器會將我的數據形狀變成負維度。 (2, 2) 的過濾器大小有效,但正如我剛剛描述的那樣,它對我來說沒有邏輯意義,因為它一次只考慮兩行的兩個列值,因此只考慮整個運動的一小部分在給定的時間點。

模型:

model = keras.Sequential()
model.add(Conv2D(filters=32, kernel_size=(6, 6), strides=1, activation = 'relu', input_shape= (3788, 6, 1))) 
model.add(MaxPooling2D(pool_size=(6, 6)))
model.add(Conv2D(filters=64, kernel_size=(6, 6), strides=1, activation = 'relu'))
model.add(Dropout(0.4))
model.add(Flatten())
model.add(Dense(11, activation='softmax'))

model.compile(optimizer=Adam(learning_rate = 0.001), loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
history = model.fit(X_train, y_train, epochs = 10, validation_data = (X_test, y_test), verbose=1)

錯誤:

Negative dimension size caused by subtracting 6 from 1 for '{{node max_pooling2d_7/MaxPool}} = MaxPool[T=DT_FLOAT, data_format="NHWC", ksize=[1, 6, 6, 1], padding="VALID", strides=[1, 6, 6, 1]](conv2d_13/Identity)' with input shapes: [?,3783,1,32].

我有3個問題:

  1. 甚至可以對我的數據使用 6x6 過濾器嗎? 更改過濾器大小和/或省略池化層不起作用。
  2. 我必須承認,我仍然不完全了解我的數據的形狀是如何從一層變化到下一層的。 您能否為此推薦一個示例性和解釋性資源?
  3. 一個 1x6 過濾器是否也是一種選擇,雖然不是 qhadrically 的形狀? 這將確保在每個步幅內考慮一個數據點(由兩個傳感器的 X、Y 和 Z 值組成)。

對於使用 6x6 卷積,請嘗試對所有 Conv2D 層使用“相同”填充。 在兩個 Conv2D 層中添加一個padding='same'參數。 對於您的第二個問題,請嘗試在此網站https://madebyollin.github.io/convnet-calculator/上模擬此行為。 不太確定你的第三個問題。

暫無
暫無

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

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