RNN模型仅预测一个类别?

时间:2019-09-01 17:34:30

标签: python machine-learning keras lstm recurrent-neural-network

我正在尝试使用GloVe嵌入来训练基于this article的rnn模型。 我有一个带标签的数据:一列上的文本(tweets),另一列上的标签(仇恨,令人反感或两者都不带)。 但是,该模型似乎只能预测结果中的一类。

这是LSTM模型:

model = Sequential()
hidden_layer = 3
gru_node = 32

# model embedding matrix here....

for i in range(0,hidden_layer):
    model.add(GRU(gru_node,return_sequences=True, recurrent_dropout=0.2))
    model.add(Dropout(dropout))
model.add(GRU(gru_node, recurrent_dropout=0.2))
model.add(Dropout(dropout))
model.add(Dense(64, activation='softmax'))
model.add(Dense(nclasses, activation='softmax'))
start=time.time()
model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

拟合模型:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 1)
X_train_Glove,X_test_Glove, word_index, embeddings_index = loadData_Tokenizer(X_train, X_test)

model_RNN = Build_Model_RNN_Text(word_index,embeddings_index, 20)    
model_RNN.fit(X_train_Glove,y_train,
                            validation_data=(X_test_Glove, y_test),
                            epochs=4,
                            batch_size=128,
                            verbose=2)
y_preds = model_RNN.predict_classes(X_test_Glove)
print(metrics.classification_report(y_test, y_preds))

结果:

  1. 分类报告

classifn report

  1. 混乱矩阵

confus_mat

我在这里想念东西吗?

更新: 这就是分布的样子 distribn

和模型摘要(或多或少)

enter image description here

1 个答案:

答案 0 :(得分:0)

您的数据分布情况如何?第一个建议是对训练/测试拆分进行分层(这里是文档的link)。

第二个问题是,与模型的复杂性相比,您拥有多少数据?也许您的模型是如此复杂,以至于过拟合。您可以使用命令model.summary()查看可训练参数的数量。