我使用 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個問題:
- 甚至可以對我的資料使用 6x6 過濾器嗎?更改過濾器大小和/或省略池化層不起作用。
- 我必須承認,我仍然不完全了解我的資料的形狀是如何從一層變化到下一層的。您能否為此推薦一個示例性和解釋性資源?
- 一個 1x6 過濾器是否也是一種選擇,雖然不是 qhadrically 的形狀?這將確保在每個步幅內考慮一個資料點(由兩個傳感器的 X、Y 和 Z 值組成)。
uj5u.com熱心網友回復:
對于使用 6x6 卷積,請嘗試對所有 Conv2D 層使用“相同”填充。padding='same'
在兩個 Conv2D 層中添加一個引數。對于您的第二個問題,請嘗試在此網站https://madebyollin.github.io/convnet-calculator/上模擬此行為。不太確定你的第三個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493865.html
下一篇:ValueError:`logits`和`labels`必須具有相同的形狀,收到((None,16)vs(None,1))