TensorFlow之过拟合与欠拟合-2

news2024/9/20 6:29:51

1 基本概念

过度拟合(overfit)

正则化(regularization)

L1正则化(L1 regularization)

L2正则化(L2 regularization)

删除正则化(dropout regularization)

提早停止(early stopping)

离群值

2 过拟合与欠拟合

安装工具

Higgs数据集

如上所示,从教育机构下载Higgs的实验数据,使用CsvDataset工具解压以及读取Csv格式的数据集。

如上所示,定义一个函数,处理Csv格式的数据集的每行数据样本,并且返回每行数据样本的特征与标签,其中,label是标签,features是特征。

如上所示,分批处理原始数据集ds,每批处理1000行记录,并使用函数pack_row处理每行的记录,输出所有特征集合以及对应的标签。读取第一行数据样本的特征数据,并显示其数据分布图,从图中可以体现出部分特征数据没有规范化,存在离群的特征值。

如上所示,从数据集packed_ds中提取1000个数据样本作为验证数据集,提取10000个数据样本作为训练数据集,其中,validate_ds是验证数据集,train_ds是训练数据集。

如上所示,设置训练数据的每次迭代处理的批量,其中,BATCH_SIZE等于500是表示训练数据每次处理500个数据样本。

演示过度拟合

最简单的方式去阻止过度拟合是从构建小模型开始,再逐渐增大构建的模型,而小模型是指只具备少量可学会的参数的模型,这些参数是由网络的层数以及每层包括的单元数确定,在深度学习中这些可学会的模型参数通常是指模型的容积能力。

直觉地一个拥有更多参数的模型具备更多可记忆的容积能力,因而,这个模型能够容易地从数据样本与模型的目标之间学到更好的字典式的映射关系,但是,这个映射关系还不具备概括泛化的能力,也就是,不具备从新数据集中预测的能力。

通常地一个深度学习模型的训练目标是擅长拟合训练数据,但是,对于深度学习模型来说,其真正的挑战是需要具备概括泛化能力,而不是拟合能力。

此外,假如一个网络可记忆的资源有限,则这个模型不能够容易地学习样本与目标之间的映射关系,模型为了让预测更加准确以及最小化损失值,其不得不学会使用压缩表示的方式去处理可记忆资源不足的问题,压缩处理会让模型具备更多预测能力。同时,如果构建的模型太小,则很难去拟合训练数据,因此,构建模型的时候需要把握容积能力太多以及容积能力不足之间的平衡。

理论上不存在通用的方程式用于确定模型的正确大小以及模型的架构(模型的层数以及每层的单元数)。需要用户自行地使用不同的模型架构进行试验,才能得出正确的结论。

实际上为了确定一个模型合适的大小,最好的实践方式是先构建一个层数与参数相对较少的模型,然后根据实际情况逐渐增加模型的层数以及增加每层的单元数,直到得出验证数据集的最小化的损失值,也就是,先构建只有一个全连接层的神经网络模型,再构建多个全连接层的神经网络模型,最后对比分析每个模型的损失值,得出损失值最小的模型,则这个模型是最优的模型。

训练过程

很多模型如果在训练过程中降低学习的速率,则会获得更好的训练效果,使用keras技术框架的函数tf.keras.optimizers.schedules可以降低学习过程中的学习速率。

如上所示,使用函数schedules调度类的函数InverseTimeDecay构建一个学习速率的函数,然后,定义一个Adam优化函数。其中,在1000次迭代的时候学习速率降低1/2,在2000次迭代的时候学习降低1/3。使用曲线显示速率变化的图形,使用平滑的曲线递减处理学习速率。

如上所示,函数get_callbacks是用于定义防止过度拟合,其使用的是EarlyStopping正则化的类型,使用TensorBoard记录训练日志,该记录日志的方式有利于减少对训练的噪声影响。定义compile_and_fit函数用于编译传入的模型、使用训练数据集以及验证数据集对传入的模型执行训练。

构建细模型(Tiny model)

如上所示,构建一个只有一个全连接层、每层包括16个处理单元的细小模型,然后,调用前面定义的compile_and_fit函数编译以及训练该模型。

如上所示,图形显示细模型的训练效果,其中,Tiny Train是训练数据集的效果,Tiny Val是验证数据集的效果,图形显示该次训练过程执行1200次的迭代。

构建小模型(Small model)

如上所示,构建了两个全连接层、每层包括16个处理单元的小模型,然后,调用前面定义的compile_and_fit函数编译以及训练该模型。

构建中模型(Medium model)

如上所示,构建三个全连接层、每层包括64个处理单元的中模型,然后,调用前面定义的compile_and_fit函数编译以及训练该模型。

构建大模型(Large model)

如上所示,构建四个全连接层、每层包括512个处理单元的大模型,然后,调用前面定义的compile_and_fit函数编译以及训练该模型。

(未完待续)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

植物大战僵尸:实现灵魂收割者

植物大战僵尸这款游戏可以说是很多90后的回忆了,基本上只要是90后或多或少的都接触过,而玩游戏与制作辅助是两个概念,今天我将给大家分享一些游戏辅助方面的制作技巧,之所以使用植物大战僵尸这款游戏是因为游戏简单容易分析&#…

【JavaSE成神之路】聊聊封装这件事

哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是Java的封装。 1. 什么是封装 Java的封装是指,在一个类中把一些重要的信息隐藏起来,使得外部不能直接访问。 Java的封…

Java --- JUC之volatile

目录 一、volatile两大特点 二、volatile的内存语义 三、volatile内存屏障 四、volatile四大屏障 五、volatile的特性 六、volatile使用场景 一、volatile两大特点 1、可见性 2、有序性 二、volatile的内存语义 1、当写一个volatile变量时,JMM会把该线程对…

C语言入门系列 - 共用体union,枚举enum,宏定义#define,条件编译,const与指针

C语言入门系列 - 共用体union,枚举enum,宏定义#define,条件编译,const与指针 第一节 C 语言基础以及基本数据类型 第二节 C 语言运算符 第三节 C 语言控制语句 第四节 C 语言自定义函数 第五节 C 语言修饰变量的关键字 第六节 C 语言构造数据类型–数组 第七节 C 语…

创建型模式

创建型模式 创建型模式对类的实例化过程进行了抽象,能够将软件中对象的创建和使用分离,使整个系统的设计更加符合单一职责原则。 什么是对象的创建与对象的使用分离? 一个女生想吃苹果,怎么办? 对象的创建和对象的使用…

TC275——04Blinky-LED

项目工程框架 项目驱动文件这个见过,三个main文件真的是开了眼,一个main代表一个核吗? 按照以往对实现LED闪烁的流程,一般是先配置时钟、再配置IO、延时,实现反转效果。 Blinky_LED.c 在驱动文件里: /*…

数据分析 -Hive学习 Day5

HIVE 核心技能之窗口函数 大家好呀,这节课我们学习 Hive 核心技能中最难的部分——窗口函数。窗口函数我们之前在学 MySQL 的时候有学过一些,但是只学了三个排序的窗口函数。这节课我们会学习更多的窗口函数,包括累计计算、分区排序、切片排…

nvm中node包管理器在windows中的使用

你要使用的 1/nuvm 只能在Linux 和 OS X 2/推荐使用nvm-windows,git上,我认为还可以就使用 操作 1/下载的git地址nvm-windows 2/好像要清除掉所有node,是个注意点 3/安装 4/路径上不允许存在空格,否则后面会各种报错 5…

读书笔记《硬件十万个为什么——开发流程篇》

大家好,这里是大话硬件。 今天想给大家分享上周末在家写的读书笔记,内容来源于重读《硬件十万个为什么——开发流程篇》这本书的一些启发和总结。 1. 为什么我要重读这本书籍? 这本书收到快递的时间是2022.8.26,拆开快递的那个晚上大约花了2个小时从头到尾快速浏览了一次…

(创建失败)小米万兆路由器里的Docker安装Redis7.0

小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装Redis7.0。 创建失败,有时间时确认是否可以解决。 Server cant set maximum open files to 10032 because of OS error: Operation not permitted. Current m…

【STM32 Cortex-M4核中断实验】

STM32 Cortex-M4核中断实验实验要求MX相关设置LED设置按键设置光电开关,火焰传感器,人体红外设置UART4设置代码编写结果测试实验要求 使用M4核开发 PF7/PF8/PF9/PF5/PF12/PE15检测中断 要求1:当中断到来时,LED灯状态取反 要求2&a…

EpilepsyGAN:具有隐私保护的合成癫痫脑活动-2021(同26)

EpilepsyGAN: Synthetic Epileptic Brain Activities with Privacy Preservation Abstract 癫痫是一种慢性神经系统疾病,影响全世界6500多万人,表现为反复发作的无端癫痫发作。癫痫发作的不可预测性不仅会降低患者的生活质量,而且还可能危及…

【前端领域】一个好玩好看的罗盘时钟 --- 附详细介绍

唯有热爱,可抵岁月漫长,唯有热爱,不畏世间无常! 少年不曾迷茫,展翅飞往神域,坚定初心,踏实行动。 新的一年,收下少年的祝福,一起踏上新道路。 💪(ง •_•)…

Spring Boot 日志文件

1.日志有什么用? ⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?答案是否定的,写程序不是买彩票,不能完全靠猜,…

Blender 非线性编辑器

文章目录非线性编辑器介绍动画摄影表/动作编辑器与非线性编辑器NAL非线性编辑器基本操作复制动画片段混合动画片段动画片段N键菜单活动片段栏回放剪辑栏非线性编辑器介绍 1 非线性编辑器是动画制作的一部分,类似于PR的轨道,可以合并多个不同的动画动作 …

【回答问题】ChatGPT上线了!推荐30个以上比较好的构建知识图谱源码

在此列出30个比较好的构建知识图谱的源码: Neo4j AgensGraph JanusGraph AnzoGraph Cayley GraphDB ArangoDB FlockDB OrientDB Redis Graph Virtuoso TigerGraph HyperGraphDB Titan Stardog GraphQL GRAKN.AI AllegroGraph Blazegraph Google Cloud Bigtable Apa…

10四个基本子空间

四个基本子空间 四个基本空间介绍 对于一个 m*n 矩阵 A 来说,以下四个基本空间是其基础。 2.1 四个基本空间的维数与基 还是研究 m*n 的矩阵 A,其四个子空间的基本性质如下: (1)列空间 之前介绍过列空间的基,设矩…

Go语言 值传递 引用传递 修改集合中的值

分类看一下Go的值传递和引用传递: 值传递:将值传递给函数 /* 引入单测包 */ import ("testing" )func TestSwap(t *testing.T) {x : 100y : 200swap(x, y)println("x:", x)println("y:", y) }/* 定义相互交换值的函数 *…

自己编译docker镜像

有时候官方现在的docker镜像并不能很好地符合自己的需求,我们需要自己定制。以下我主要是在官方mariadb:latest镜像的基础上,做一些定制化的操作如修改容器的编码格式。 /root/.pip目录下有两个文件: Dockerfile的文件内容如下:…

性能优化系列之你是否清楚浏览器的渲染过程?

文章の目录1、浏览器解析 HTML,生成 DOM Tree(Parse HTML)。2、浏览器解析 CSS,生成 CSSOM(CSS Object Model) Tree。3、JavaScript 会通过 DOM API 和 CSSOM API 来操作 DOM Tree 和 CSS Rule Tree&#x…