我尝试使用“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:形状(无,1)和(无,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']) *``
有人知道我必须做什么吗?
您的预测层有 5 个单元,而每个数据样本只有 1 个标签。那里存在明显的不匹配。替换最后一层:
tf.keras.layers.Dense(5, activation ='sigmoid')
这样:
tf.keras.layers.Dense(1, activation ='sigmoid')
这至少应该可以帮助您解决形状不匹配的问题。
补充: 根据标签的形状和最终激活函数 (=
sigmoid
),我假设您正在执行二元分类任务。在这种情况下,您的损失函数需要进行以下更改:
model.compile(loss = 'binary_crossentropy',
optimizer = 'adam',
metrics = ['accuracy'])