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

Python Twitter情绪分析常量零(0.0000e+;00)损失值,python,pandas,tensorflow,keras,google-colaboratory,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, r

我试图弄明白为什么模型的损失值总是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
之间的概率格式的输出,我们将使用
sigmoid
函数

因此,在您的情况下,
二进制交叉熵
是正确的损失函数

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

将损失更改为:
二进制\u交叉熵
。谢谢!现在它似乎像预期的那样工作!