【问题标题】:Keras {ValueError}: Input 0 is incompatible with layer conv2d_2Keras {ValueError}:输入 0 与层 conv2d_2 不兼容
【发布时间】:2017-07-26 14:09:31
【问题描述】:

我是 keras 的新手,我正在尝试对文档进行卷积。每个文档由一个形状为 [40 * 4000] 的矩阵表示(每个文档有 40 个句子,每个句子有 20 个词,因此词嵌入维度为 200)。

我想对 3 个单词进行卷积,这是我的代码(不完全相同,但您可以在您的机器上运行此代码):

import keras
from keras.layers import Input, Embedding, Dense, merge, Conv2D
from keras.layers.core import Reshape

tokens_input = Input(name='input', shape=(40, 20), dtype='int32')

x = Embedding(25000 + 1, 200, name="embedding")(tokens_input)
x = Reshape((40, -1), 
             name="reshape")(x)


cur_conv = Conv2D(20, kernel_size=(3*200, 1),
                 strides=(200, 1), padding='valid', activation='relu')(x)

但我收到此错误消息:输入 0 与层 conv2d_1 不兼容:预期 ndim=4,发现 ndim=3

【问题讨论】:

    标签: python keras


    【解决方案1】:

    Conv2D 层的输入应具有形状(样本、通道、宽度、高度),并且 Embedding 的输出是 3D,而不是应有的 4D。您应该定义如何将 Embedding 输出解释为图像,也许您应该添加通道维度并将其设置为 1。

    【讨论】:

    • 谢谢,我解决了这个问题,但是我阅读了 Conv2D 的 keras 文档,它说参数 kernel_size 指定了 2D 卷积窗口的 宽度和高度 (keras.io/layers/convolutional) ,在实践中,我认为 kernel_size 指定 height 和 width,换句话说,rows 和 cols,对吗?
    • @Joey 输入形状中指定的宽度和高度对应于输入数据,而不是卷积过滤器。您可以拥有比卷积过滤器大得多的图像。
    • 可能我没说清楚。我的意思是Conv2D kernel_size的参数,文档说它指定了过滤器的宽度和高度,但我发现它指定了过滤器的高度和宽度,换句话说,过滤器的行和列。
    猜你喜欢
    • 1970-01-01
    • 2017-11-06
    • 2021-07-04
    • 2020-11-28
    • 2021-05-31
    • 2021-09-13
    • 1970-01-01
    • 2022-07-22
    相关资源
    最近更新 更多