首页 > 解决方案 > 实现 ConvNN 时输入和输出维度的问题

问题描述

尝试实现 CNN 时出现以下错误: ValueError: A target array with shape (3131, 272, 47) was passed for a output of shape (None, 269, 47) while using as loss categorical_crossentropy。这种损失期望目标具有与输出相同的形状。

我只是在学习神经网络,我以为我正在理解如何实现简单的 CNN,但是当我尝试实现更复杂的任务时,我发现我无法修复这个错误:ValueError: A target array with shape (3131 , 128, 47) 被传递为形状 (None, 125, 47) 的输出,同时用作 loss categorical_crossentropy。这种损失期望目标具有与输出相同的形状。

这就是我想要实现的:

    model = Sequential()
    model.add(Embedding(input_dim=length_word_index, output_dim=length_tag_index, input_length=MAX_LENGTH))
    model.add(Conv1D(filters=MAX_LENGTH, kernel_size=4, activation='relu'))
    model.add(Dense(length_tag_index))
    model.add(Activation('softmax'))
    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    print(model.summary())  

 Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None, 271, 47)           535283    
_________________________________________________________________
conv1d (Conv1D)              (None, 268, 271)          51219     
_________________________________________________________________
dense (Dense)                (None, 268, 47)           12784     
_________________________________________________________________
activation (Activation)      (None, 268, 47)           0         
=================================================================

y_train shape:  (3131, 272)
MAX_LENGTH:  272
length_word_index:  11389 
num_labels:  47 

我知道在没有更多信息的情况下可能很难解决此问题,但我只想知道从哪里开始进行故障排除。在查看问题时,输入为 (3131, 128, 47) 意思是(y_train 的长度,MAX_LENGTH,num_labels)似乎第二个参数为 128(MAX_LENGTH)更改为导致问题的输出形状 125 . 我只是不知道为什么参数从 128 变为 125。

训练或测试数据没有问题,因为我还使用相同的数据实现了 LSTM,这没有问题:

model = Sequential()
    model.add(InputLayer(input_shape=(MAX_LENGTH, )))
    model.add(Embedding(length_word_index, 128))
    model.add(Conv1D(filters=MAX_LENGTH, kernel_size=4, padding='same', activation='relu'))
    model.add(Bidirectional(LSTM(256, return_sequences=True)))
    model.add(TimeDistributed(Dense(length_tag_index)))
    model.add(Activation('softmax'))

    model.compile(loss='categorical_crossentropy', optimizer=Adam(0.001), metrics=['accuracy']))
    model.summary()

标签: python-3.xconv-neural-network

解决方案


推荐阅读