python - 在多标签分类中使用带有嵌入层的双向 LSTM 时出现维度错误
问题描述
我试图使用双向 LSTM 将文本数据(句子)分类到某些类。我以其中 3 个为例。我遵循了多标签分类帖子,即“使用 sigmoid 激活输出层”、“使用 binary_crossentropy 进行损失函数”。我使用了一个嵌入层(大小为 300 的词向量)。我的句子被填充和截断,因此每个句子都有 100 个标记。这是我的模型的代码:
model = Sequential()
embedding_layer = Embedding(6695,
300,
weights=[embedding_matrix],
input_length=100,
trainable=True)
model.add(embedding_layer)
model.add(Bidirectional(LSTM(32,
return_sequences=False)))
model.add(Dense(3,
activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['acc'])
print("model fitting - Bidirectional LSTM")
model.summary()
x= model.fit(X_train, y_train,
batch_size=256,
epochs=6,
validation_data=(X_val, y_val),
shuffle = True,
verbose = 1
)
这是模型摘要,这是预期的: 在此处输入图像描述
但是,我收到了这个错误:
Traceback (most recent call last):
File "/Users/master/Documents/Deep Learning/Learning Keras/reveiw_classification.py", line 159, in <module>
verbose = 1
File "/Users/master/.pyenv/versions/ENV4/lib/python3.6/site-packages/keras/engine/training.py", line 955, in fit
batch_size=batch_size)
File "/Users/master/.pyenv/versions/ENV4/lib/python3.6/site-packages/keras/engine/training.py", line 792, in _standardize_user_data
exception_prefix='target')
File "/Users/master/.pyenv/versions/ENV4/lib/python3.6/site-packages/keras/engine/training_utils.py", line 136, in standardize_input_data
str(data_shape))
ValueError: Error when checking target: expected dense_1 to have shape (3,) but got array with shape (100,)
我不需要 LSTM 返回一系列隐藏状态输出,我只需要最后一个输出。我以为我在 LSTM 中使用了 return_sequences=False,所以输出的维度应该是 1,然后一个具有 32 个单位的双向 LSTM 将具有模型摘要中的输出维度 (None,64)。但是为什么它说期望dense_1具有形状(3,)但得到形状为(100,)的数组?有人可以在这里帮助我吗?
解决方案
看起来您的目标y_train
实际上是句子而不是标签向量[1, 0, 1]
。错误与模型无关,而是与您传递的数据有关。
- 您
y_train
应该是一个二维形状数组,(num_samples, 3)
因此对于每个样本(句子),您都有一个包含 3 个标签的矢量目标。 X_train
在这种情况下,(num_samples, 100)
就像您输入的长度为 100 的句子一样。
推荐阅读
- java - 未知来源 Java 10
- plsql - 如何要求用户输入另一个值,直到用户在 plsql 中仅输入正数
- python - 带有计数器的python中的for循环?
- c++ - 在构造函数中初始化成员时,是否应该对成员使用 std::move?
- html - 页脚不会填满页面的整个宽度
- r - R:如何根据频率为我的网络创建权重?
- html - 上传时如何在 GitHub 自述文件中保留 HTML 格式?
- javascript - 如何将输入字段值存储在 jquery td 标记内的变量中?
- java - Spring Boot 应用程序中对 REST 端点的自定义访问控制
- flutter - 如何让黄色容器扩展并填充其紫色父母可用的其余空间