首页 > 解决方案 > Keras 的准确率低于任何分类器

问题描述

我使用 python 进行多类文本分类,我的数据集包含 25000 条阿拉伯语推文,分为 10 个类[体育、政治、....] 当我使用

training = pd.read_csv('E:\cluster data\One_File_nonnormalizenew2norm.txt', sep="*")
training.dropna(inplace=True)
training.columns = ["text", "class1"]
training['class1'] = training.class1.astype('category').cat.codes
training.dropna(inplace=True)
# create our training data from the tweets
text = training['text']

y = (training['class1'])

from sklearn.model_selection import train_test_split
sentences_train, sentences_test, y_train, y_test = train_test_split(text, y, test_size=0.25, random_state=1000)
from sklearn.feature_extraction.text import CountVectorizer



vectorizer = CountVectorizer()
vectorizer.fit(sentences_train)

X_train = vectorizer.transform(sentences_train)
X_test  = vectorizer.transform(sentences_test)
X_train
from sklearn.linear_model import LogisticRegression

classifier = LogisticRegression()
classifier.fit(X_train, y_train)
score = classifier.score(X_test, y_test)

print("Accuracy:", score)

精度:0.9525099601593625

当我使用 keras 时:

model = Sequential()
max_words=5000
model.add(Dense(512, input_shape=(input_dim,), activation='softmax'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='softmax'))
model.add(Dropout(0.5))
model.add(Dense(1,activation='softmax'))
model.add(Dense(10))

model.summary()

model.compile(loss='sparse_categorical_crossentropy',
  optimizer='adam',
  metrics=['accuracy'])
model.fit(X_train, y_train,  batch_size=150,  epochs=5,  verbose=1, validation_split=0.3,shuffle=True)


predicted = model.predict(X_test)
predicted = np.argmax(predicted, axis=1)
accuracy_score(y_test, predicted)

0.28127490039840636

哪里错???

更新 我将代码更改为:

model = Sequential()
max_words=5000
model.add(Dense(512, input_shape=(input_dim,)))
model.add(Dropout(0.5))
model.add(Dense(256))
model.add(Dropout(0.5))
#model.add(Dense(1,activation='sigmoid'))####
model.add(Dense(10))

model.summary()
model.compile(loss='sparse_categorical_crossentropy',
  optimizer='adam',
  metrics=['accuracy'])


model.fit(X_train, y_train,batch_size=150,epochs=10,verbose=1,validation_split=0.3,shuffle=True)
predicted = model.predict(X_test)
predicted = np.argmax(predicted, axis=1)
accuracy_score(y_test, predicted)

0.7201593625498008 精度仍然很差!!!

标签: pythonkerasdeep-learningtext-classification

解决方案


一些想法。

  1. 删除所有 softmax 激活(如@Matias 所说)。
  2. 删除model.add(Dense(1,activation='softmax')),它可能会破坏你的结果。
  3. 做超过 5 个 epoch。
  4. 在这两种方法中,您没有使用相同的推文进行验证。

您可能应该给出训练和测试数据集的准确性,以确定发生了什么。


推荐阅读