繁体   English   中英

深度学习中的准确度差异 - 时期和最终准确度

[英]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 matrixclassification 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 患有过度拟合

如何克服

为了避免过拟合,人们一般会这样做:

  • 制作验证集以在训练时选择超参数
  • 强大的数据增强

我会推荐这两篇文章阅读以获得更多的想法。 希望有帮助。

训练和测试准确度分数用于识别过拟合。 远高于测试准确度的训练准确度表明过度拟合。

由于计算方式的性质,准确性可能会产生误导。 在您的情况下,您正在预测具有两个可能值01的性别。 如果数据不平衡,例如,如果大部分测试数据属于一个 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM