Python 3.x 实现ConvNN时存在输入和输出维度问题

Python 3.x 实现ConvNN时存在输入和输出维度问题,python-3.x,conv-neural-network,Python 3.x,Conv Neural Network,当尝试实现CNN时,我得到了以下错误:ValueError:当使用as losscategorical\u crossentropy时,为shape(None,269,47)的输出传递了一个具有形状(313127247)的目标数组。此损失期望目标与输出具有相同的形状 我只是在学习神经网络,我想我理解了如何实现简单的CNN,但是当我尝试实现一个更复杂的任务时,我发现我无法修复这个错误:ValueError:一个具有形状(3131128,47)的目标数组被传递为形状(None,125,47)的输出当

当尝试实现CNN时,我得到了以下错误:ValueError:当使用as loss
categorical\u crossentropy
时,为shape(None,269,47)的输出传递了一个具有形状(313127247)的目标数组。此损失期望目标与输出具有相同的形状

我只是在学习神经网络,我想我理解了如何实现简单的CNN,但是当我尝试实现一个更复杂的任务时,我发现我无法修复这个错误:ValueError:一个具有形状(3131128,47)的目标数组被传递为形状(None,125,47)的输出当使用as loss
分类时
。此损失期望目标与输出具有相同的形状

这就是我试图实现的:

    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 
我理解在没有更多信息的情况下很难进行故障排除,但是我想知道的是从哪里开始进行故障排除。当查看问题时,输入是(3131128,47),意思是(y_序列的长度、最大长度、num_标签)。第二个参数是128(最大长度),似乎被更改为导致问题的输出形状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()

您的Conv1D层可能需要填充=“相同”。@Kalpit谢谢!这就是问题所在!