【问题标题】:Why the input size ot shape is not valid?为什么输入大小 ot shape 无效?
【发布时间】:2021-03-20 17:38:27
【问题描述】:

我知道以前有人问过类似的问题,但解决方案对我没有帮助。

我有以下型号:

        model = Sequential()

        # CNN
        model.add(Conv2D(filters=16, kernel_size=2, input_shape=(40, 2000, 1), activation='relu'))
        model.add(MaxPooling2D(pool_size=2))
        model.add(Dropout(0.2))

        # CNN
        model.add(Conv2D(filters=32, kernel_size=2, activation='relu'))
        model.add(MaxPooling2D(pool_size=2))
        model.add(Dropout(0.2))

        # CNN
        model.add(Conv2D(filters=64, kernel_size=2, activation='relu'))
        model.add(MaxPooling2D(pool_size=2))
        model.add(Dropout(0.2))

        # CNN
        model.add(Conv2D(filters=128, kernel_size=2, activation='relu'))
        model.add(MaxPooling2D(pool_size=2))
        model.add(Dropout(0.2))
        model.add(GlobalAveragePooling2D())
        model.add(Dense(num_labels, activation='softmax'))

        optimizer = optimizers.SGD(lr=0.002, decay=1e-6, momentum=0.9, nesterov=True)
        model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')

我正在尝试拟合模型:

model.fit(X_train, y_train_hot, batch_size=10, epochs=50,
                            validation_data=(X_test, y_test_hot))

在哪里

X_train.shape = {tuple:3} (246, 40, 2000)

从我阅读的其他帖子 (Keras input_shape for conv2d and manually loaded images) 看来,我的输入是正确的。

但我收到以下错误:

ValueError: Input 0 of layer sequential is incompatible with the layer: : expected min_ndim=4, found ndim=3. Full shape received: [None, 40, 2000]

我错过了什么?我该如何解决?

【问题讨论】:

    标签: tensorflow keras conv-neural-network


    【解决方案1】:

    错误是您没有包含4-th 轴(即axis=3 or axis -1)。

    在这里,您可以看到以下内容:

    预期 min_ndim=4,发现 ndim=3。收到的完整形状:[无,40, 2000]

    None 转换为批量大小,当然是可变的并设置为 None。

    那么,你有402000,应该分别对应heightwidth

    同时,请记住,您在代码中写道,您的网络期望的输入形状是 input_shape=(40, 2000, 1) 而不是 (40,2000)

    您需要显式添加“颜色”/“通道数”轴,在这种情况下为第三通道,因此您需要使用reshapeexpand_dims 来实现。

    出于演示目的,假设X 的形状为(40,2000),然后将X 重塑为X = X.reshape(40,2000,1)

    【讨论】:

      【解决方案2】:

      正如您从发布的链接中看到的那样,您必须将数据重塑为 4dim。

      X_train = X_train.reshape(246, 40, 2000, 1)
      

      X_train = X_train.reshape(-1, 40, 2000, 1)
      

      4D:[batch_size, img_height, img_width, number_of_channels]

      【讨论】:

        猜你喜欢
        • 2020-09-03
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 2020-07-08
        • 2021-12-16
        • 2022-06-28
        • 1970-01-01
        • 2015-12-07
        相关资源
        最近更新 更多