我尝试用“BBC新闻档案”的数据进行训练。因此,要训练的序列具有以下形状:训练序列:(1780,120),验证序列:(445,120)
标签具有以下形状:标签培训:(1780,1)标签确认:(445,1)
我的模型摘要看起来像这样(我只想得到5个最常见的标签):
Layer (type) Output Shape Param #
=================================================================
embedding_2 (Embedding) (None, 120, 16) 16000
global_average_pooling1d_2 (None, 16) 0
(GlobalAveragePooling1D)
dropout_4 (Dropout) (None, 16) 0
dense_4 (Dense) (None, 512) 8704
dropout_5 (Dropout) (None, 512) 0
dense_5 (Dense) (None, 5) 2565
=================================================================
Total params: 27,269
Trainable params: 27,269
Non-trainable params: 0
字符串
当我尝试拟合它时,我得到以下异常:
ValueError:Shapes(None,1)和(None,5)不兼容
模型是用Keras创建的:
*model = tf.keras.Sequential([
tf.keras.layers.Embedding(num_words, embedding_dim, input_length = maxlen),
tf.keras.layers.GlobalAveragePooling1D(),
tf.keras.layers.Dropout(0.25),
tf.keras.layers.Dense(512, activation = 'relu'),
tf.keras.layers.Dropout(0.1),
tf.keras.layers.Dense(5, activation ='sigmoid')
])
model.compile(loss = 'categorical_crossentropy',
optimizer = 'adam',
metrics = ['accuracy']) *``
型
有人知道我该怎么做吗?
1条答案
按热度按时间tquggr8v1#
您的预测层有5个单元,而每个数据样本只有1个标签。这里有一个明显的不匹配。替换最后一层:
字符串
用这个:
型
这至少可以帮助您解决形状不匹配的问题。
**附加:**从标签的形状和最终的激活函数(=
sigmoid
)来看,我假设您正在执行二进制分类任务。在这种情况下,你的损失函数需要改变如下:型