在paddle静态图训练中,训练集和测试集效果都有很好,但验证集上效果很差

  1. 在paddle的训练中,如果使用这样的方式进行训练
main_program = fluid.default_main_program()
cost = fluid.layers.cross_entropy(input=model, label=label)  # 交叉熵损失函数
avg_cost = fluid.layers.mean(cost)
acc = fluid.layers.accuracy(input=model, label=label)
...train_cost, train_acc = exe.run(program=main_program,feed=feeder.feed(data),fetch_list=[avg_cost, acc])
  1. 在epoch的循环中,使用这种结构训练
...
for batch_id, data in enumerate(train_reader()):train_cost, train_acc = exe.run(program=main_program,feed=feeder.feed(data),fetch_list=[avg_cost, acc])if batch_id % 50 == 0:print("pass:%d, batch:%d, cost:%0.5f, acc:%0.5f" %(pass_id, batch_id, train_cost[0], train_acc[0]))# 测试eval_accs = []eval_costs = []# 每训练一轮测试一轮for batch_id, data in enumerate(eval_reader()):eval_cost, eval_acc = exe.run(program=main_program,feed=feeder.feed(data),fetch_list=[avg_cost, acc])eval_accs.append(eval_acc[0])eval_costs.append(eval_cost[0])# 求测试结果的平均值eval_avgcost = (sum(eval_costs) / len(eval_costs))eval_avgacc = (sum(eval_accs) / len(eval_accs))
...
  1. 那么如果没有问题,有可能会发现训练集和测试集的cost稳步下降,acc越来越高。但如果使用全新的test的数据进行验证,就会得到一个非常差的结果。这个问题有可能就是数据过拟合造成的,但是为什么在训练集和测试集的表现都非常好呢?
  2. 原因是上述代码有误,应复制一个program用于测试,这个program的过程不能进行反向传播。否则等于让算法学习了测试集,所以测试集的效果也会逐渐变好。所以此处需要一个test_program,并将其for_test设置为True,表示其结果不会用于更新参数【这里要注意test_program要写在avg_cost和acc后面,因为这个program是复制的main_program,如果在avg_cost和acc之前就复制了,那个这个test_program中将没有avg_cost和acc】
main_program = fluid.default_main_program()
cost = fluid.layers.cross_entropy(input=model, label=label)  # 交叉熵损失函数
avg_cost = fluid.layers.mean(cost)
acc = fluid.layers.accuracy(input=model, label=label)
test_program = fluid.default_main_program().clone(for_test=True)
...train_cost, train_acc = exe.run(program=main_program,feed=feeder.feed(data),fetch_list=[avg_cost, acc])
  1. 在测试时将program设置为test_program
...
for batch_id, data in enumerate(train_reader()):train_cost, train_acc = exe.run(program=main_program,feed=feeder.feed(data),fetch_list=[avg_cost, acc])if batch_id % 50 == 0:print("pass:%d, batch:%d, cost:%0.5f, acc:%0.5f" %(pass_id, batch_id, train_cost[0], train_acc[0]))# 测试eval_accs = []eval_costs = []# 每训练一轮测试一轮for batch_id, data in enumerate(eval_reader()):eval_cost, eval_acc = exe.run(program=test_program,feed=feeder.feed(data),fetch_list=[avg_cost, acc])eval_accs.append(eval_acc[0])eval_costs.append(eval_cost[0])# 求测试结果的平均值eval_avgcost = (sum(eval_costs) / len(eval_costs))eval_avgacc = (sum(eval_accs) / len(eval_accs))
...
  1. 此时训练查看结果,如果训练集效果很好,但测试集效果很差,就说明该训练过拟合了,可以采用正则化、dropout、调整网络、增强/多数据等方法进行改进。这时的测试集才做到了它应该有的作用
pass:0, batch:0, cost:2.95071, acc:0.06250
pass:0, batch:50, cost:3.77059, acc:0.15625
eval:0, cost:3.10242, acc:0.25000
pass:1, batch:0, cost:0.07284, acc:0.96875
pass:1, batch:50, cost:0.08076, acc:0.96875
eval:1, cost:3.05008, acc:0.28795
...

paddle静态图训练,训练集和测试集效果都有很好,但验证集上效果很差相关推荐

  1. 训练集明明很高,验证集,测试集精度却很低

    损失函数一直在下降,为什么识别率上不去. 1.最常见的原因:过拟合 过拟合值得单独开个章节.主要包括 1.数据量小,网络复杂 2.learning rate 比较高,又没有设置任何防止过拟合的机制 解 ...

  2. 十个原因可能导致 训练集明明很高,验证集,测试集 validation accuracy stuck 准确率 很低 损失不减小

    损失函数一直在下降,为什么识别率上不去. ----------------2021-01-08更新----------------------- 0.学习率设置太高,一个epoch直接收敛,所以损失不 ...

  3. 使用resnet, inception3进行fine-tune出现训练集准确率很高但验证集很低的问题

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 最近用keras跑基于resnet50,inception3的一些迁移学习的实验,遇到一些问题 ...

  4. 【已解决】使用keras对resnet, inception3进行fine-tune出现训练集准确率很高但验证集很低的问题(BN)

    最近用keras跑基于resnet50,inception3的一些迁移学习的实验,遇到一些问题.通过查看github和博客发现是由于BN层导致的,国外已经有人总结并提了一个PR(虽然并没有被merge ...

  5. 训练集准确率很高,验证集准确率低问题

    训练集在训练过程中,loss稳步下降,准确率上升,最后能达到97% 验证集准确率没有升高,一直维持在50%左右(二分类问题,随机概率) 测试集准确率57% 在网上搜索可能打的原因: 1.learnin ...

  6. Python机器学习:多项式回归与模型泛化004为什么需要训练数据集和测试数据集

    泛化能力:由此及彼能力 遇见新的拟合能力差 数据 #数据 import numpy as np import matplotlib.pyplot as plt x = np.random.unifor ...

  7. 31,32,33_过拟合、欠拟合的概念、L2正则化,Pytorch过拟合欠拟合,交叉验证-Train-Val-Test划分,划分训练集和测试集,K-fold,Regularization

    1.26.过拟合.欠拟合及其解决方案 1.26.1.过拟合.欠拟合的概念 1.26.1.1.训练误差和泛化误差 1.26.1.2.验证数据集与K-fold验证 1.26.1.3.过拟合和欠拟合 1.2 ...

  8. 机器学习典型步骤以及训练集、验证集和测试集概念

    1. 机器学习典型步骤 数据采集和标记 数据清洗 特征选择 如房子的面积.地理位置.朝向.价格等. 模型选择 有监督还是无监督,问题领域.数据量大小.训练时长.模型准确度等多方面有关. 模型训练和测试 ...

  9. 【入门篇】如何正确使用机器学习中的训练集、验证集和测试集?

    [注] ·本文为转载文章,原文作者是王树义老师,原文链接为 https://zhuanlan.zhihu.com/p/71961236 训练集.验证集和测试集,林林总总的数据集合类型,到底该怎么选.怎 ...

最新文章

  1. jmeter异步请求测试怎么测试_JMeter接口测试之HTTP请求默认值
  2. 【Jmeter】 Report Dashboard 生成html图形测试报告
  3. Android组件系列----Activity的生命周期
  4. 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】...
  5. ES6-2 块级作用域与嵌套、let、暂行性死区
  6. 从Spring开始,Java EE 6必须具备哪些附加功能?
  7. Membership 数据字典
  8. oracle内存表与临时表,Oracle 临时表之临时表空间组(TTG)
  9. POJ-3264-Balanced Lineup
  10. 多类别分类问题由 confusion matrix 到分类准确率(accuracy)的计算
  11. 神经损伤怎么康复好 成都顾连康复医院专科专治
  12. 十.jmeter性能测试基础实践(2)
  13. 史上最强大的浏览器嗅探
  14. 中文python笔记
  15. 逆流而上不如顺势而为——SaaS时代正悄然来临
  16. 2021.4.17日简报:五子登科、BMEX、优选家、加电、链淘等项目
  17. 【Rust 日报】2021-11-11 保持冷静,学习Rust,我们很快就会在Linux中更多的看到这种语言...
  18. 统计文章中的单词数量
  19. Shellshock Lab
  20. 一维中值、均值、高斯滤波的MATLBA实现

热门文章

  1. R语言使用epiDisplay包的kap函数(kap.m.raters)计算Kappa统计量的值(总一致性、期望一致性)、对多个评分对象的结果进行一致性分析、评分的类别为多个类别
  2. 三光(可见光、红外光、激光)云台产品调研
  3. 2.8 Linux打包压缩与搜索命令
  4. 渣渣本科的2021届秋招总结-泪目
  5. 2020年南京大学软件工程考研上岸经验帖
  6. 揭秘POS机套现江湖:代理商层层抽佣,支付机构“默许”?
  7. VALSE2019总结(6)-年度总结-GAN
  8. 在服务器系统Windows 2003安装Avira AntiVir小红伞免费个人版
  9. mysql 梅花掌_红砂手 梅花掌 红砂掌2
  10. GSMArena魅族mx四核评测全文|去除英文|