在Keras中检测字母是否等于“ X”

时间:2019-04-19 19:30:58

标签: python keras neural-network deep-learning artificial-intelligence

我正在尝试学习Keras并尝试一些非常简单的方法。我创建了一个具有200.000个随机字母和两列的数据框。字母和is_x。如果字母为大写“ X”,则is_x设置为1(或True)。

这是我到目前为止所做的:

model = Sequential()
model.add(Dense(32, activation='tanh', input_shape=(X_train.shape[1],)))
model.add(Dense(16, activation='tanh'))
model.add(Dense(y_train.shape[1], activation='sigmoid'))
#model.compile(optimizer=SGD(), loss='categorical_crossentropy', metrics=['accuracy'])
model.compile(optimizer=Adam(lr=0.05), loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=128, epochs=10, verbose=1, validation_data=(X_test, y_test))
results = model.evaluate(X_test, y_test)
y_predict = model.predict(X_test)

print(results)
print("---")
for i in y_predict:
    print(i)

结果如下:

[0.09158177]
[0.09158175]
[0.09158177]
[0.09158177]
[0.09158175]
[0.09158177]
[0.09158173]

如果is_x为True,我想获取的值是1或0。我以字母X_和is_x为y_的形式输入字母,但是我只得到一些数字,它们看起来都一样,例如0.996等。精度也像0.99,但是与实际情况相去甚远。

我对激活,优化器和丢失感到非常困惑。我不知道该选择哪个以及如何解决这个简单的问题。我研究了很多有关udemy的培训视频,但没有人解释为什么以及如何使用这些功能。

1 个答案:

答案 0 :(得分:0)

我不能真正有效地回答优化器和激活部分,但是我可以在其他部分上提供一些帮助。 tanh和relu都是非常流行的激活函数,因此您都可以使用它们。同样,亚当是有效的优化程序,因此您在该级别上应该没问题。

您的问题中的损失函数应该为binary_crossentropy。当您有两个要学习的课程(0/1)时使用。 categorical_crossentropy用于多类问题,mse对回归分析很有用。该算法的目的是最小化该函数的值。因此,您需要为眼前的问题选择合适的解决方案。

您的准确性非常高。造成这种情况的主要原因是样本大小在x到x之间,并且不均匀。为了获得很高的分数,算法要做的所有事情都是预测所有结果均为“非x”。

为了进一步评估您的模型,请尝试以下操作:

from sklearn.metrics import confusion_matrix
# this will remove the probabilities and give 1/0
y_predict = (y_predict > .5)

# this will create a confusion matrix
print(confusion_matrix(y_test, y_predict)

通过显示预测x的次数和实际结果是x的次数,预测x的次数和实际结果不是x的次数以及标注错误的案例,可以更轻松地查看模型的准确性。 / p>

       predicted
         not x       x
not x      #         #
  x        #         #

使用此工具,您可以更好地评估模型的准确性。