[英]Accuracy Difference in Deep Learning - epochs and final accuracy
我正在尝试为我的项目训练深度学习 model。 相同的代码如下所示:
model = Sequential()
# Add an input layer
model.add(Dense(22, activation='relu', input_shape=(22,)))
# Add one hidden layer
model.add(Dense(12, activation='relu'))
# Add an output layer
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(x_train, gender_train,epochs=90, batch_size=1, verbose=1)
gender_pred = model.predict(x_test)
print(confusion_matrix(gender_test,gender_pred.round()))
print(classification_report(gender_test,gender_pred.round()))
print(accuracy_score(gender_pred.round(),gender_test))
每个 epoch 的准确度都在 90 年代。 (例如 0.97)。 但是,当我在 accuracy_score 的帮助下预测性别并打印准确性时,它才刚刚进入 80 年代。 这些精度有什么关系? 我是机器学习的新手,任何帮助将不胜感激。
你错误地混淆了两件事。 一般有两组, train set
:用于训练的用户,你的准确率超过90+
,另一组用于test
,你得到79
顺便说一句,这清楚地表明了model 过度拟合。
您所有的confusion matrix
、 classification report
和最后的accuracy
测量都是使用test
集完成的。 在您的代码中,
model = Sequential()
# Add an input layer
model.add(Dense(22, activation='relu', input_shape=(22,)))
# Add one hidden layer
model.add(Dense(12, activation='relu'))
# Add an output layer
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(x_train, gender_train,epochs=90, batch_size=1, verbose=1)
这是训练部分,它正确地.fit
训练对 - x_train -> gender_train
。 现在,经过一些fitting
或某个epoch
之后,当我们在从未用于训练的看不见的数据上测试 model 时,最终揭示了模型的真实性能。 在您的情况下,这个看不见的数据是x_test
。
gender_pred = model.predict(x_test)
print(confusion_matrix(gender_test,gender_pred.round()))
print(classification_report(gender_test,gender_pred.round()))
print(accuracy_score(gender_pred.round(),gender_test))
如果x_test
集或Unseen数据的性能与训练数据(即x_train
)相比较低或非常低,则简单地称为过度拟合,这不是预期的。 在您的情况下,您的 model 患有过度拟合。
为了避免过拟合,人们一般会这样做:
我会推荐这两篇文章阅读以获得更多的想法。 希望有帮助。
训练和测试准确度分数用于识别过拟合。 远高于测试准确度的训练准确度表明过度拟合。
由于计算方式的性质,准确性可能会产生误导。 在您的情况下,您正在预测具有两个可能值0
和1
的性别。 如果数据不平衡,例如,如果大部分测试数据属于一个 class,则预测 class 将提供高准确度分数,但当分类器应用于其他数据时,它不一定是正确的。
Accuracy = ((True Positive) + (True Negative)) / (Total Population)
混淆矩阵可以准确评估 model 的性能。
True Positives ( TP ) - 当数据点的实际 class 和预测 class 均为 1 时的情况。
True Negatives ( TN ) - 当数据点的实际 class 和预测 class 均为 0 时的情况。
误报 ( FP ) - 数据点的实际 class 为 0 且数据点的预测 class 为 1 的情况。
假阴性 ( FN ) - 当数据点的实际 class 为 1 且数据点的预测 class 为 0 时的情况。
查看您的控制台 output:TP = 93,FP = 27,FN = 24,TN = 101
准确度得分:(93 + 101) / (93 + 27 + 24 + 101) = 0.7918367347
精度:(TP) / (TP + FP):93 / (93 + 27) = 0.775
召回: (TP) / (TP + FN):93 / (93 + 24) = 0.7948
支持是目标值的每个 class 中真实 label 的样本数。 (120 为 class 0,125 为 class 1)
F1-score: 2 * (Precision * Recall) / (Precision + Recall)
F1 分数是准确率和召回率的加权平均值。 其最佳值为 1,最差值为 0。
能够解释这些变量将帮助您更好地了解您的 model。
如果您只是开始您的机器学习冒险,我强烈推荐Andrew Ng 在 Coursera 上的机器学习课程。 他非常简单地解释了您需要理解的所有内容,而无需过多的数学知识。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.