我正在尝试使用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))
结果:
我在这里想念东西吗?
和模型摘要(或多或少)
答案 0 :(得分:0)
您的数据分布情况如何?第一个建议是对训练/测试拆分进行分层(这里是文档的link)。
第二个问题是,与模型的复杂性相比,您拥有多少数据?也许您的模型是如此复杂,以至于过拟合。您可以使用命令model.summary()查看可训练参数的数量。