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操作对图片进行其他一些手段
相关推荐
2301_803875611 小时前
PHP 中处理会话数组时的类型错误解析与修复指南
jvm·数据库·python
m0_743623921 小时前
c++如何批量修改文件后缀名_std--filesystem--replace_extension【实战】
jvm·数据库·python
2501_914245932 小时前
CSS如何处理CSS变量作用域冲突_利用特定类名重写变量值
jvm·数据库·python
菜鸟学Python2 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
<-->2 小时前
Megatron(全称 Megatron-LM,由 NVIDIA 开发)和 DeepSpeed(由 Microsoft 开发)
人工智能·pytorch·python·深度学习·transformer
测试19983 小时前
2026最新软件测试面试八股文【附文档】
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
maqr_1103 小时前
MySQL数据库迁移到云端如何保障安全_数据加密与SSL连接配置
jvm·数据库·python
u0109147603 小时前
MySQL如何限制触发器递归调用的深度_防止触发器死循环方法
jvm·数据库·python
weixin_381288183 小时前
MySQL中如何使用HEX函数转换十六进制_MySQL进制转换函数
jvm·数据库·python
maqr_1104 小时前
HTML怎么生成订单预览_HTML只读订单信息结构【操作】
jvm·数据库·python