![](/img/trans.png)
[英]Negative dimension size caused by subtracting 5 from 2 for 'conv2d_4/convolution' (op: 'Conv2D') with input shapes: [?,5,2,64], [5,5,64,64]
[英]Keras - Negative dimension size caused by subtracting 5 from 4 for 'conv2d_5/convolution' (op: 'Conv2D') with input shapes: [?,4,80,64], [5,5,64,64]
我有一個與以下模型類似的模型,但是在修改體系結構之后,我不斷收到以下錯誤:
通過對輸入形狀為[?,4,80,64],[5,5,64,64]的'conv2d_5 / convolution'(op:'Conv2D')的4減去5導致的負尺寸大小。
我還是機器學習的新手,所以我不太了解這些參數。 有什么幫助嗎?
model_img = Sequential(name="img")
# Cropping
model_img.add(Cropping2D(cropping=((124,126),(0,0)), input_shape=(376,1344,3)))
# Normalization
model_img.add(Lambda(lambda x: (2*x / 255.0) - 1.0))
model_img.add(Conv2D(16, (7, 7), activation="relu", strides=(2, 2)))
model_img.add(Conv2D(32, (7, 7), activation="relu", strides=(2, 2)))
model_img.add(Conv2D(32, (5, 5), activation="relu", strides=(2, 2)))
model_img.add(Conv2D(64, (5, 5), activation="relu", strides=(2, 2)))
model_img.add(Conv2D(64, (5, 5), activation="relu", strides=(2, 2)))
model_img.add(Conv2D(128, (3, 3), activation="relu"))
model_img.add(Conv2D(128, (3, 3), activation="relu"))
model_img.add(Flatten())
model_img.add(Dense(100))
model_img.add(Dense(50))
model_img.add(Dense(10))
model_lidar = Sequential(name="lidar")
model_lidar.add(Dense(32, input_shape=(360,)))
model_lidar.add(Dropout(0.1))
model_lidar.add(Dense(10))
model_imu = Sequential(name='imu')
model_imu.add(Dense(32, input_shape=(10, )))
model_imu.add(Dropout(0.1))
model_imu.add(Dense(10))
merged = Merge([model_img, model_lidar, model_imu], mode="concat")
model = Sequential()
model.add(merged)
model.add(Dense(16))
model.add(Dropout(0.2))
model.add(Dense(1))
答:由於傳感器問題,我無法完成培訓,但是由於以下兩個答案,該模型現在可以正常工作
這是模型中每個圖層的輸出形狀
(?, 376, 1344, 3) - Input
(?, 126, 1344, 3) - Cropping2D
(?, 126, 1344, 3) - Lambda
(?, 60, 669, 16) - Conv2D 1
(?, 27, 332, 32) - Conv2D 2
(?, 12, 164, 32) - Conv2D 3
(?, 4, 80, 64) - Conv2D 4
到輸入通過第四Conv2D層時,輸出形狀已為(4,80)
。 您不能應用具有濾鏡大小(5,5)的另一個Conv2D圖層,因為輸出的第一維小於濾鏡大小。
卷積層堆棧可以非常快速地減小圖像尺寸。 因此,一旦其沿一維的大小僅為4,就無法再應用5x5卷積。
不進行填充的情況下,卷積層的輸出尺寸為(input_dimension - kernel_size)/strides
。 多次減去7(或5)並不是很重要,但是將大小減小2倍會使尺寸很快減小到4。
解決方案是不使用跨步(在前幾層之后)。 添加填充有助於防止由於內核而不是由於步幅而導致的大小丟失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.