关于神经网络中的网络训练过程中的验证集validation_data的认识-程序员宅基地

技术标签: 验证集  神经网络  网络训练  

validation_data中包含了 幅数字图像,这些图像和训练数据集中的 幅图像以及测试数据集中的 幅都不相同。我们会使用 validation_data 来防止过匹配。我们会使用和上面应用在 test_data 的策略。我们每个回合都计算在 validation_data 上的分类准确度。一旦分类准确度已经饱和,就停止训练。这个策略被称为 提前停止(Early stopping)。当然,实际应用中,我们不会立即知道什么时候准确度会饱和。相反,我们会一直训练知道我们确信准确度已经饱和。

这里需要一些判定标准来确定什么时候停止。在我前面的图中,将 回合看成是饱和的地方。可能这有点太悲观了。因为神经网络有时候会训练过程中处在一个平原期,然后又开始提升。如果在 回合后,性能又开始提升(也许只是一些少量提升),那我也不会诧异。所以,在提前停止中采取一点激进的策略也是可以的。

为何要使用 validation_data 来替代 test_data 防止过匹配问题?实际上,这是一个更为一般的策略的一部分,这个一般的策略就是使用 validation_data 来衡量不同的超参数(如训练回合,学习率,最好的网络架构等等)的选择的效果。我们使用这样方法来找到超参数的合适值。因此,尽管到现在我并没有提及这点,但其实本书前面已经稍微介绍了一些超参数选择的方法。

当然,这对于我们前面关于 validation_data 取代 test_data 来防止过匹配的原因仍旧没有回答。实际上,有一个更加一般的问题,就是为何用validation_data 取代 test_data 来设置更好的超参数?为了理解这点,想想当设置超参数时,我们想要尝试许多不同的超参数选择。如果我们设置超参数是基于 test_data 的话,可能最终我们就会得到过匹配于 test_data 的超参数。也就是说,我们可能会找到那些 符合 test_data 特点的超参数,但是网络的性能并不能够泛化到其他数据集合上。我们借助 validation_data 来克服这个问题。然后一旦获得了想要的超参数,最终我们就使用 test_data 进行准确度测量。这给了我们在 test_data 上结果是一个网络泛化能力真正的度量方式的信心。换言之,你可以将验证集看成是一种特殊的训练数据集能够帮助我们学习好的超参数。这种寻找好的超参数的观点有时候被称为 hold out 方法,因为 validation_data 是从训练集中保留出来的一部分。

在实际应用中,甚至在衡量了测试集上的性能后,我们可能也会改变想法并去尝试另外的方法——也许是一种不同的网络架构——这将会引入寻找新的超参数的的过程。如果我们这样做,难道不会产生过匹配于 test_data 的困境么?我们是不是需要一种潜在无限大的数据集的回归,这样才能够确信模型能够泛化?去除这样的疑惑其实是一个深刻而困难的问题。但是对实际应用的目标,我们不会担心太多。相反,我们会继续采用基于 training_data, validation_data, and test_data 的基本 hold out 方法。


如你所见,测试集和训练集上的准确度相比我们使用 个训练数据时相差更小。特别地,在训练数据上的最佳的分类准确度 97.86% 只比测试集上的 95.33% 准确度高一点点。而之前的例子中,这个差距是 17.73%!过匹配仍然发生了,但是已经减轻了不少。我们的网络从训练数据上更好地泛化到了测试数据上。一般来说,最好的降低过匹配的方式之一就是增加训练样本的量。有了足够的训练数据,就算是一个规模非常大的网络也不大容易过匹配。不幸的是,训练数据其实是很难或者很昂贵的资源,所以这不是一种太切实际的选择。

规范化

增加训练样本的数量是一种减轻过匹配的方法。还有其他的一下方法能够减轻过匹配的程度么?一种可行的方式就是降低网络的规模。然而,大的网络拥有一种比小网络更强的潜力,所以这里存在一种应用冗余性的选项。

幸运的是,还有其他的技术能够缓解过匹配,即使我们只有一个固定的网络和固定的训练集合。这种技术就是规范化。本节,我会给出一种最为常用的规范化手段——有时候被称为权重下降(weight decay)或者 L2规范化。L2 规范化的想法是增加一个额外的项到代价函数上,这个项叫做 规范化 项。下面是规范化交叉熵:

训练集上的代价函数持续下降,和前面无规范化的情况一样的规律:


但是这里测试集上的准确度是随着回合次数持续增加的:


显然,规范化的使用能够解决过匹配的问题。而且,准确度相当搞了,最高处达到了 87.1%,相较于之前的 82.27%。因此,我们几乎可以确信持续训练会有更加好的结果。实验起来,规范化让网络具有更好的泛化能力,显著地减轻了过匹配的效果。

+

如果我们换成全部的训练数据进行训练呢?当然,我们之前已经看到过匹配在大规模的数据上其实不是那么明显了。那规范化能不能起到相应的作用呢?保持超参数和之前一样。不过我们这里需要改变规范化参数。原因在于训练数据的大小已经从 改成了 ,这个会改变权重下降因子 。如果我们持续使用 就会产生很小的权重下降,因此就将规范化的效果降低很多。我们通过将 来补偿这种下降。


参考:https://tigerneil.gitbooks.io/neural-networks-and-deep-learning-zh/content/chapter3a.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ai543064193/article/details/80492467

智能推荐

红黑树的实现和代码_junit红黑树-程序员宅基地

文章浏览阅读434次。/*** Introduction to Algorithms, Second Edition * 13 Red-Black Trees* * 红黑树的条件:* 1.每个节点标记为“红”或“黑”。* 2.根标记为“黑”。* 3.所有叶节点(nil)标记为“黑”。* 4.如果一个节点为“红”,则它的两个节点都为“黑”。* 5.对每个的节点,从该节点至后继叶节点包含相同数量的“黑”节点。* @auth_junit红黑树

快速入门Openstack,无脑多节点部署Mitaka(6)--Neutron网络部署_] 重启compute api服务命令是____-程序员宅基地

文章浏览阅读2.9k次。openstack中neutron服务的介绍和配置_] 重启compute api服务命令是____

例题 4-4 信息解码_解码 4-4编码-程序员宅基地

文章浏览阅读377次。题解:A,B,#,T,A,N相对应:0,00,01,10,000,001,010,011,100,101,110,0000,0001.........1101,1110,00000,.......... 例如:编码头 $ # * * \ 01串 0 00 01 10 000 code[len,value]表..._解码 4-4编码

原神换服报错(二级地址解析失败),换服失败,无反应_原神二级地址解析失败是什么原因-程序员宅基地

文章浏览阅读1.4w次。原神换服报错(二级地址解析失败),换服失败,无反应!问题就是缺少文件!缺少DLL"PCGameSDK")这个问题我之前发过点我跳转另一个教程_原神二级地址解析失败是什么原因

An error occured during the installation of assembly__ 'Microsoft.VC90.CRT,version="9.0.21022.8"...._an error occurred during the installation of assem-程序员宅基地

文章浏览阅读4k次。An error occured during the installation of assembly__ 'Microsoft.VC90.CRT,version="9.0.21022.8",publickeyToken="1fc8b3b9a1e18e3b",__ processorArchitecture="x86",type="win32"安装python2.7碰到这个问题,然后查了_an error occurred during the installation of assembly 'microsoft.vc90.crt

HTML5----字体rem,px,em,设置_html5让字体变细-程序员宅基地

文章浏览阅读2.2w次。PX为单位在Web页面初期制作中,我们都是使用“px”来设置我们的文本,因为他比较稳定和精确。但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,他改变了浏览器的字体大小,这时会使用我们的Web页面布局被打破。这样对于那些关心自己网站可用性的用户来说,就是一个大问题了。因此,这时就提出了使用“em”来定义Web页面的字体_html5让字体变细

随便推点

python的强大功能_Python 3.8刚刚发布!一分钟了解新版本的强大功能!-程序员宅基地

文章浏览阅读92次。今天Python3.8发布啦,新版本添加了很多全新功能,也表明Python的版本之路前进了一大步,小编整理了新版本的几个主要更新,为大家做详细解读!顺便一提,导致Python之父龟叔愤然离职的赋值表达式功能还是上线了~新增赋值表达式PEP 572的标题是赋值表达式,也叫做「命名表达式」,不过它现在被广泛的别名是「海象运算符」(The Walrus Operator)。因为:=很像海象「眼睛小,长着..._python sys.addaudithook

python的gdal库,读取tif影像为DataFrame,或将DataFrame转为tif_python gdal tif-程序员宅基地

文章浏览阅读2.4k次,点赞3次,收藏30次。将tif转为DataFrame存为csv此数据为modis的LAI产品,仅有LAI一个波段from osgeo import gdalimport pandas as pdgdal.AllRegister()filePath = r'C:\Users\Administrator\遥感文件\MOD15A2H.006_Lai_500m_doy2020097_aid0001.tif'dataset = gdal.Open(filePath)adfGeoTransform = dataset.Ge_python gdal tif

MSVC和gcc得到不同结果_拔剑-浆糊的传说_新浪博客-程序员宅基地

文章浏览阅读47次。写了个小程序,在MSVC 2008 和 gcc 3.4.4 ( under cygwin)下面跑了一下,发现结果不一样。 gcc 3.4.4: 1 1 gcc 4.5.2 2 2 MSVC: ..._msvc 不同版本 运算结果不同

CCS(Code Composer Studio) 10.2.0的下载和安装(最新教程)_ccs10下载-程序员宅基地

文章浏览阅读9.6k次,点赞4次,收藏23次。CCS(Code Composer Studio)是一整套用于开发和调试嵌入式应用的工具,包含适用于每个TI器件系列的编译器、源码编译器、项目构建环境、调试器、描述器、仿真器以及多种功能。本文将介绍最新版CCS 10.2.0安装的具体步骤,操作系统为64位Windows10。CSS官网的下载地址为:https://software-dl.ti.com/ccs/esd/documents/ccs_downloads.html#Download_the_latest_CCS下载完成后可以看到_ccs10下载

Koa 框架教程_koa框架教程-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏9次。Koa 就是一种简单好用的 Web 框架。它的特点是优雅、简洁、表达力强、自由度高。本身代码只有1000多行,所有功能都通过插件实现,很符合 Unix 哲学。本文从零开始,循序渐进,教会你如何使用 Koa 写出自己的 Web 应用。每一步都有简洁易懂的示例,希望让大家一看就懂。零、准备首先,检查 Node 版本。$ node -vv8.0.0Koa 必须使用 7.6 以上的版本。如果你的版本..._koa框架教程

.NET Core HttpClient调用腾讯云对象存储Web API的"ERROR_CGI_PARAM_NO_SUCH_OP"问题-程序员宅基地

文章浏览阅读469次。开门见山地说一下问题的原因:调用 web api 时请求头中多了双引号,请求体中少了双引号。腾讯云提供的对象存储(COS)C# SDK 是基于 .NET Framework 用 WebRequest 实现的,我们直接将这个实现迁移到 .NET Core 是可以正常调用,但后来我们基于 HttpClient 实现,调用 web api 时总是返回 "ERROR_CGI_PARAM_NO_SUCH..._error_cgi_param_no_such_op