【问题标题】:When bulding a CNN, I am getting complaints from Keras that do not make sense to me.在构建 CNN 时,我收到了来自 Keras 的抱怨,这些抱怨对我来说毫无意义。
【发布时间】:2016-09-02 07:27:18
【问题描述】:

我的输入形状应该是 100x100。它代表一个句子。每个词是一个100维的向量,一个句子最多有100个词。

我向 CNN 提供了 8 个句子。我不确定这是否意味着我的输入形状应该是 100x100x8。

然后是下面几行

Convolution2D(10, 3, 3, border_mode='same',
                       input_shape=(100, 100))

抱怨:

输入 0 与层卷积 2d_1 不兼容:预期 ndim=4,发现 ndim=3

这对我来说没有意义,因为我的输入维度是 2。我可以通过将 input_shape 更改为 (100,100,8) 来解决它。但是“预期的ndim = 4”位对我来说没有意义。

我也看不出为什么带有 10 个过滤器的 3x3 卷积层不接受 100x100 的输入。

即使我收到了关于“预期 ndim=4”的抱怨。我的激活层遇到了问题。它在那里抱怨:

不能将 softmax 应用于不是 2D 或 3D 的张量。这里,ndim=4

谁能解释这里发生了什么以及如何解决它?非常感谢。

【问题讨论】:

    标签: python neural-network keras


    【解决方案1】:

    我遇到了同样的问题,我解决了它为channel 添加一个维度到input_shape 参数。

    我建议以下解决方案:

    Convolution2D(10, 3, 3, border_mode='same', input_shape=(100, 100, 1))
    

    【讨论】:

    【解决方案2】:

    2D 卷积层的缺失维度是“通道”维度。

    对于图像数据,灰度图像的通道维度为 1,彩色图像的通道维度为 3。

    在您的情况下,为确保 Keras 不会抱怨,您可以使用 1 通道的 2D 卷积,或 100 通道的 1D 卷积。

    参考:http://keras.io/layers/convolutional/#convolution2d

    【讨论】:

      【解决方案3】:

      Keras 的卷积层采用 4 维数组,因此您需要构建输入以适应这种方式。维度由(batch_size,x_dim,y_dim,channels) 组成。这在图像的情况下很有意义,这是 CNN 最常用的地方,但对于您的情况,它变得有点棘手。

      但是,batch_size 对数据集是不变的,因此您需要将第一维中的 8 个句子堆叠起来才能得到(8,100,100)。通道可以保持为 1,并且您需要以 keras 接受数据的方式编写它,因此将数据扩展为 (8,100,100,1) 将是您需要的输入形状。

      【讨论】:

        猜你喜欢
        • 2012-02-20
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2013-10-02
        • 1970-01-01
        • 2022-01-10
        相关资源
        最近更新 更多