Python 3.x 实现ConvNN时存在输入和输出维度问题
当尝试实现CNN时,我得到了以下错误:ValueError:当使用as lossPython 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)的输出当
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谢谢!这就是问题所在!