簡體   English   中英

Keras-輸入尺寸為[?,4,80,64],[5,5,64,64]的'conv2d_5 / convolution'(op:'Conv2D')的4中減去5引起的負尺寸大小

[英]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.

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