Twitter 情绪分析常量零 (0.0000e+00) 损失值

时间:2021-05-08 12:09:47

标签: python pandas tensorflow keras google-colaboratory

我试图弄清楚为什么模型的损失值总是 0.0,所以准确度似乎也是恒定的(这在我的情况下是不正确的,afaik)。

代码片段:

model = Sequential()
model.add(Embedding(vocab_size, glove_vectors.vector_size, weights=[embedding_matrix], input_length=X.shape[1]))
model.add(Dropout(0.5))
model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation="sigmoid"))
model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=["accuracy"])
model.summary()

EPOCHS = 20

train_data, test_data, train_labels, test_labels = train_test_split(X, Y, test_size=0.20, random_state = 42)


print(train_data.shape, train_labels.shape)
print(test_data.shape, test_labels.shape)



val_data = (test_data, test_labels)
history = model.fit(train_data, train_labels, validation_data=val_data, epochs=EPOCHS)
score = model.evaluate(test_data, test_labels)

输出:

Epoch 1/20
25/25 [==============================] - 4s 69ms/step - loss: 0.0000e+00 - accuracy: 0.5241 - val_loss: 0.0000e+00 - val_accuracy: 0.4650
Epoch 2/20
25/25 [==============================] - 1s 55ms/step - loss: 0.0000e+00 - accuracy: 0.4927 - val_loss: 0.0000e+00 - val_accuracy: 0.4650
Epoch 3/20
25/25 [==============================] - 1s 55ms/step - loss: 0.0000e+00 - accuracy: 0.5110 - val_loss: 0.0000e+00 - val_accuracy: 0.4650
Epoch 4/20
25/25 [==============================] - 1s 56ms/step - loss: 0.0000e+00 - accuracy: 0.5074 - val_loss: 0.0000e+00 - val_accuracy: 0.4650
Epoch 5/20
25/25 [==============================] - 1s 55ms/step - loss: 0.0000e+00 - accuracy: 0.5363 - val_loss: 0.0000e+00 - val_accuracy: 0.4650
Epoch 6/20
25/25 [==============================] - 1s 53ms/step - loss: 0.0000e+00 - accuracy: 0.5042 - val_loss: 0.0000e+00 - val_accuracy: 0.4650
Epoch 7/20
25/25 [==============================] - 1s 54ms/step - loss: 0.0000e+00 - accuracy: 0.4904 - val_loss: 0.0000e+00 - val_accuracy: 0.4650

1 个答案:

答案 0 :(得分:1)

在二元分类中,即使我们将在两个类之间进行预测,输出层中也会有 1 节点。为了以介于 01 之间的概率格式获得输出,我们将使用 sigmoid 函数。

因此 binary_crossentropy 是您案例中正确的损失函数

model.compile(loss='binary_crossentropy', optimizer="adam", metrics=["accuracy"])