[英]Can 2D convolutional neural network be converted into 1D convolutional neural network?
[英]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個問題:
對於使用 6x6 卷積,請嘗試對所有 Conv2D 層使用“相同”填充。 在兩個 Conv2D 層中添加一個padding='same'
參數。 對於您的第二個問題,請嘗試在此網站https://madebyollin.github.io/convnet-calculator/上模擬此行為。 不太確定你的第三個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.