python - 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 精度仍然很差!!!
解决方案
一些想法。
- 删除所有 softmax 激活(如@Matias 所说)。
- 删除
model.add(Dense(1,activation='softmax'))
,它可能会破坏你的结果。 - 做超过 5 个 epoch。
- 在这两种方法中,您没有使用相同的推文进行验证。
您可能应该给出训练和测试数据集的准确性,以确定发生了什么。
推荐阅读
- arguments - 戈多:论点太少
- azure - 如何创建 Azure Web 应用程序来验证用户并获取其访问令牌?
- qt - OpenGL ES Framebuffer 大小格式无效
- java - 使用apache poi和java生成几个excel文件
- java - 我正在尝试在类 ArrayList 中创建一个类似于 lastIndexOf() 的方法,但我在查找元素的最后一个索引时遇到了一些问题
- lorawan - LoRaWAN 在阿尔及利亚的设置
- java - 将数据从服务传输到活动
- python - Python - Glob - 根据文件名读取 .csv 数据,并根据文件名用颜色绘制数据
- bash - 未使用 bc 的 Bash 百分比
- python - python中的返回列表