【问题标题】:Having a problem with input_shape on Conv1d LayerConv1d 层上的 input_shape 有问题
【发布时间】:2020-09-08 14:23:11
【问题描述】:

我正在尝试使用 CNN 执行情绪分类。该错误似乎与 input_shape 参数有关。

x 数据由使用 tokenizer.texts_to_sequences 创建的整数数组组成。

? x_train.shape 
(4460, 20)
? x_trains.shape[0]
array([  49,  472, 4436,  843,  756,  659,   64,    8, 1328,   87,  123,
        352, 1329,  148, 2996, 1330,   67,   58, 4437,  144])

y 数据由一个用于分类的热编码值组成。

y_train.shape
(4460, 2)
y_train[0]
array([1., 0.], dtype=float32)

这是模型:

model.add(layers.Conv1D(filters=256, kernel_size=3, activation='relu', input_shape=(max_seqlen,)))
model.add(layers.SpatialDropout1D(0.2))
model.add(layers.GlobalMaxPooling1D())
model.add(layers.Dense(100, activation='relu'))
model.add(layers.Dense(num_classes, activation="softmax"))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    
history = model.fit(x_train, y_train, epochs=3, batch_size=512, 
                    validation_data=(x_val, y_val), class_weight=label_weights)

添加 Conv1D 层时引发错误。消息是:

“输入 0 与层 conv1d_1 不兼容:预期 ndim=3,发现 ndim=2”

我不知道我做错了什么。非常感谢任何帮助。

【问题讨论】:

    标签: keras conv-neural-network keras-layer


    【解决方案1】:

    Conv1D 采用 2D 输入(我不知道为什么会这样)。由于您的输入只是一维的,因此您的尺寸不匹配。恐怕您可能不得不坚持使用其他 keras 图层类型,或者将您的数据重新调整为 (4460, 20, 1),从而允许您在其上传递一个 conv1D。

    【讨论】:

    • 谢谢,看来我需要在 Conv1D 层前面添加一个 Embedding 层。不知道有没有办法直接进入Conv1D层。
    • 您可以在将数据作为输入传递之前直接重塑数据,将其更改为 (4460, 20, 1),但我不确定这是否会改变结果。
    猜你喜欢
    • 2021-12-31
    • 2020-11-06
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    相关资源
    最近更新 更多