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操作对图片进行其他一些手段
相关推荐
应用市场1 小时前
构建自定义命令行工具 - 打造专属指令体
开发语言·windows·python
东方佑1 小时前
从字符串中提取重复子串的Python算法解析
windows·python·算法
Dfreedom.2 小时前
一文掌握Python四大核心数据结构:变量、结构体、类与枚举
开发语言·数据结构·python·变量·数据类型
一半烟火以谋生2 小时前
Python + Pytest + Allure 自动化测试报告教程
开发语言·python·pytest
叶子丶苏3 小时前
第八节_PySide6基本窗口控件_按钮类控件(QAbstractButton)
python·pyqt
百锦再4 小时前
对前后端分离与前后端不分离(通常指服务端渲染)的架构进行全方位的对比分析
java·开发语言·python·架构·eclipse·php·maven
Blossom.1184 小时前
把AI“刻”进玻璃:基于飞秒激光量子缺陷的随机数生成器与边缘安全实战
人工智能·python·单片机·深度学习·神经网络·安全·机器学习
Kratzdisteln5 小时前
【Python OOP Diary 1.1】题目二:简单计算器,改错与优化
python·面向对象编程
小白银子5 小时前
零基础从头教学Linux(Day 53)
linux·运维·python
skywalk81635 小时前
基于频域的数字盲水印blind-watermark
linux·开发语言·python