python-3.x - 实现 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 - 在多个标题数据框中选择一列
- groovy - groovy.lang.MissingPropertyException:没有这样的属性:类的getBtnRCR:CustomerCommonRequestBean
- c# - 在 C# 中通过异步 TCP 损坏包
- jquery - jQuery:textarea 占位符中的换行符不适用于 Mozilla Firefox
- java - Java中的灯光控制器
- mysql - 我在数据库中收到 MYSQL 插入错误
- java - 作为 Maven 依赖项的 War 项目
- delphi - 将共享变量添加到 Tframe
- linux - Yocto rtsp 流
- java - 使用 JavaFX 中的线程更改 GUI