我正在尝试学习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的培训视频,但没有人解释为什么以及如何使用这些功能。
答案 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 # #
使用此工具,您可以更好地评估模型的准确性。