tensorflow2过拟合和欠拟合知识点记录

这几天看了机器学习一点入门的内容。

写这篇笔记是因为我搞了个验证码识别demo,验证码是用ImageCaptcha生成的(用我的近视眼有些都分不清)识别率为0;如果你有这个好的模型在评论区告诉我!!!

调了下只识别出来两个!!!

先记点理论知识吧。

1.概念理解

通过观测训练准确率和验证准确率可以大致推断模型是否出现过拟合和欠拟合。

模型的训练误差较低,训练准确率较高,但是验证误差较高,验证准确率较低,那么可能出现了过拟合现 象。

训练集和验证集上面的误差都较高,准确率较低,那么可能出现了欠拟合现象.

过拟合:我理解的意思就是训练数据很好看,实际执行的时候不行。

欠拟合:训练的都不行。

2.遇到过拟合如何处理

2.1数据比例划分

训练集、验证集和测试集可以按着自定义的比例来划 分,比如常见的 60%-20%-20%的划分。

2.2调整网络模型

过拟合:如降低网络的层数、降低网络的参数量、添加正则化手段、添加假设空间的约束等,使得模型的实际容量降低,从而减轻或解决过拟合现象;

过拟合降低网络参数转换

欠拟合:当观测到欠拟合现象时,可以尝试增大网络的容量,如加深网络的层数、增加网络的参数量,尝试更复杂的网络结构。

欠拟合增加网络复杂度

2.3训练提前停止
python 复制代码
history=model.fit(训练集数据, 训练集标签, 
batch_size=, epochs=,
validation_split=用作测试数据的比例,
validation_data=测试集, 
validation_freq=测试频率)

batch运算更新一次 = 一次step

所有样本迭代一次 = 一次epochs

可以在适当的位置中断提前终止训练

2.4正则惩罚(目的降低网络的实际参数量和网络容量

数学我是一点都不会了 L0(中范数非零元素的个数)、L1(中范数所有元素的绝对值之和)、L2(中范数所有元素的平方和)

python 复制代码
def build_model_with_regularization(_lambda): 
    # 创建带正则化项的神经网络 
    model = Sequential() 
    model.add(Dense(8, input_dim=2,activation='relu')) # 不带正则化项 
    model.add(Dense(256, activation='relu', # 带 L2 正则化项 
                    kernel_regularizer=regularizers.l2(_lambda))) 
    model.add(Dense(256, activation='relu', # 带 L2 正则化项 
                    kernel_regularizer=regularizers.l2(_lambda))) 
    model.add(Dense(256, activation='relu', # 带 L2 正则化项 
                    kernel_regularizer=regularizers.l2(_lambda))) 
    # 输出层 
    model.add(Dense(1, activation='sigmoid')) 
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 模型装配 
    return model 
2.5Dropout

丢弃掉一些参数

python 复制代码
model.add(layers.Dropout(rate=0.5))

3.欠拟合

数据量少的情况,通过一些方法改变下图片:旋转、翻转、裁剪、对抗网络 (Conditional GAN,简称 CGAN)可以生成带标签的样本数据、其他一些手段(opencv添加噪点、遮挡、擦除

python 复制代码
    # 图片逆时针旋转 180 度 
    x = tf.image.rot90(x,2)
 
    # 随机水平翻转 
    x = tf.image.random_flip_left_right(x) 
    # 随机竖直翻转 
    x = tf.image.random_flip_up_down(x)
    
     # 图片先缩放到稍大尺寸 
    x = tf.image.resize(x, [244, 244]) 
    # 再随机裁剪到合适尺寸 
    x = tf.image.random_crop(x, [224,224,3])

   通过opencv操作对图片进行其他一些手段
相关推荐
zone773911 小时前
001:简单 RAG 入门
后端·python·面试
F_Quant11 小时前
🚀 Python打包踩坑指南:彻底解决 Nuitka --onefile 配置文件丢失与重启报错问题
python·操作系统
允许部分打工人先富起来12 小时前
在node项目中执行python脚本
前端·python·node.js
IVEN_12 小时前
Python OpenCV: RGB三色识别的最佳工程实践
python·opencv
haosend13 小时前
AI时代,传统网络运维人员的转型指南
python·数据网络·网络自动化
曲幽13 小时前
不止于JWT:用FastAPI的Depends实现细粒度权限控制
python·fastapi·web·jwt·rbac·permission·depends·abac
IVEN_1 天前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang1 天前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮1 天前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling1 天前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python