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操作对图片进行其他一些手段
相关推荐
大菠萝学姐16 分钟前
基于Spring Boot和Vue的高校图书馆座位预约系统的设计与实现
java·vue.js·spring boot·后端·python·mysql·vue
Tomorrow'sThinker24 分钟前
[特殊字符] Python 批量生成词云:读取词频 Excel + 自定义背景 + Excel to.png 流程解析
python·excel
野指针121381 小时前
【使用Flask基于PaddleOCR3.0开发一个接口 调用时报错RuntimeError: std::exception】
python·flask
格林威2 小时前
Baumer工业相机堡盟工业相机如何通过DeepOCR模型识别判断数值和字符串的范围和相似度(C#)
开发语言·人工智能·python·数码相机·计算机视觉·c#·视觉检测
赵英英俊2 小时前
Python Day8
python
DAWN_T172 小时前
Python编译器(Pycharm Jupyter)
python·机器学习·jupyter·pycharm
Draina2 小时前
在pycharm中运行sagemath脚本的配置过程
ide·python·安全·pycharm·密码学
presenttttt2 小时前
用Python和OpenCV从零搭建一个完整的双目视觉系统(五)
开发语言·python·opencv·计算机视觉
aramae2 小时前
Python3 -- 第二章 基本数据类型
笔记·python