我正在尝试建立一个模型来使用 nn 将我的文本分类为讨厌 (1) 或不讨厌 (0)。
关于数据的信息,它由推文和类别标签组成(讨厌(1)或不喜欢(0)):
sentences = df['comment']
y = df['isHate']
sentences_train, sentences_test, train_y, test_y = train_test_split(sentences, y, test_size=0.25, random_state=42)
文本通过了很多 Word 嵌入,我在推文上应用了填充序列,在标签上应用了 LabelEncoder。
问题是当我运行时出现此错误:
ValueError: logits and labels must have the same shape ((None, 1) vs (None, 2))
模型代码:
emb_dim = 16
model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim= emb_dim, input_length=maxlen))
model.add(Flatten())
model.add(Dense(2, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
model.summary()
问题发生在这部分:
history = model.fit(X_train, y_train,
batch_size=32,
epochs=15,
validation_data=(X_test, y_test))
有什么帮助吗?
在您的代码中:
model.add(Dense(1, activation='sigmoid'))
您的最后一个密集层只有 1 个单元,但您的标签是一个由 2 个类组成的热编码。所以你需要改变:
model.add(Dense(2, activation='softmax'))
您还需要更改损失函数,因为它们是单热编码的:
loss='categorical_crossentropy'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句