24/9/16 算法笔记 数据增强

news/2024/9/19 23:53:38 标签: 算法, 笔记, 机器学习

数据增强是指通过对原始数据集进行一系列变换操作来生成新的训练样本,从而扩充数据集的方法。数据增强通常用于解决数据不足的问题,提高模型的泛化能力,减少过拟合。数据增强通常在训练模型之前应用。

以下是一些情况下可以考虑使用数据增强的建议:

  1. 数据不足:当训练数据集相对较小时,数据增强可以帮助模型更好地学习到数据的特征,提高模型的泛化能力。

  2. 类别不平衡:在类别不平衡的情况下,数据增强可以通过生成新的样本来平衡各个类别之间的数据分布,有助于提高模型对少数类别的识别能力。

  3. 增强模型的鲁棒性:通过引入各种变换,如旋转、翻转、缩放、裁剪、亮度调整等,可以使模型更具鲁棒性,减少对输入数据微小变化的敏感度。

  4. 防止过拟合:数据增强可以有效减少过拟合的风险,通过引入噪声和变化,使模型更难以记住训练数据的细节,从而提高其泛化能力。

在实际应用中,数据增强通常在训练阶段进行,以下是一些常见的数据增强方法:

  1. 几何变换:包括平移、旋转、缩放、剪切、翻转等操作,可以通过这些操作改变图像的角度、大小和位置。

  2. 色彩变换:如亮度、对比度、饱和度、色调的调整,可以增加模型对不同光照和色彩条件的适应能力。

  3. 增加噪声:添加高斯噪声、椒盐噪声等,可以使模型更鲁棒。

  4. 随机裁剪:随机裁剪图像的一部分,可以增加模型对不同尺度和位置的物体的识别能力。

  5. 混合样本:将不同样本进行混合,生成新的训练样本。

数据增强的一些函数

  1. PyTorch

    • transforms.Compose():将多个数据增强操作组合在一起。
    • transforms.RandomHorizontalFlip():随机水平翻转图像。
    • transforms.RandomRotation():随机旋转图像。
    • transforms.ColorJitter():随机调整图像的亮度、对比度和饱和度等。
    • transforms.RandomCrop():随机裁剪图像。
  2. TensorFlow

    • tf.image.random_flip_left_right():随机水平翻转图像。
    • tf.image.random_brightness():随机调整图像的亮度。
    • tf.image.random_contrast():随机调整图像的对比度。
    • tf.image.random_crop():随机裁剪图像。
  3. Keras

    • ImageDataGenerator 类:提供了多种数据增强选项,如水平翻转、旋转、缩放等。
    • ImageDataGenerator.flow_from_directory():从文件夹中读取图像数据并应用数据增强。

举个例子,我要做数字识别器,为了避免过拟合,需要对手写数字数据集进行人工扩充,它可以让我现有的数据集变得更大,一些常用增强是灰度、水平翻转、垂直翻转、随机裁剪、颜色抖动、平移、旋转还有缩放等等。

通过数据增强可以轻松地将训练集的数量增加一倍或多倍,从而可以创建一个非常健壮的模型

# 增加数据以防止过拟合
datagen = ImageDataGenerator(
        featurewise_center=False,  				# 在数据集上将输入平均值设置为0
        samplewise_center=False,  				# 将每个样本的平均值设置为0
        featurewise_std_normalization=False,    # 将输入除以数据集的std
        samplewise_std_normalization=False,  	# 将每个输入除以它的std
        zca_whitening=False,  					# 使用ZCA白化
        rotation_range=10,  					# 在范围内随机旋转图像(0到180度)
        zoom_range = 0.1, 						# 随机缩放图像
        width_shift_range=0.1,  				# 水平随机移动图像(总宽度的一部分)
        height_shift_range=0.1,  				# 垂直随机移动图像(总高度的一部分)
        horizontal_flip=False,  				# 随机翻转图像
        vertical_flip=False)  					# 随机翻转图像


datagen.fit(X_train)

为了增加数据选择了:

  • 训练图像随机旋转10度;
  • 随机缩放10%一些训练图像;
  • 将图像水平移动10%的宽度;
  • 将图像垂直移动10%的高度;
  • 没有应用垂直翻转或水平翻转,因为它可能导致错误分类对称数字,如6和9。

数据增强后就可以拟合训练数据集


http://www.niftyadmin.cn/n/5666337.html

相关文章

PyTorch----模型运维与实战

一、PyTorch是什么 PyTorch 由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。 二、PyTorch安装 首先确保你已经安装了GPU环境,即Anaconda、CUDA和CUDNN 随后进入Pytorch官网​​​​​​PyTorch 官…

二进制补码及与原码的互相转换方法-成都仪器定制

大沙把一些基础的知识说清楚,本文介绍二进制补码及与原码的转换方法。 先说原码,原码‌是一种计算机中对数字的二进制定点表示方法。在原码表示法中,数值前面增加了一位符号位,最高位为符号位,0表示正数,1表…

java项目之编程训练系统源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的编程训练系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 编程训练系统的主要使用者管…

“树”据结构:并查集从入门到AC

“树”据结构:并查集 前言算法设计代码示例优化相关文章 前言 在一组数据中,数据被分为了不同的集合,那么其中的集合往往可以用树形来表示。而区分集合,与查找集合的元素,就会成为核心的问题。并查集主要就是解决这类…

win/mac常用命令

这里写目录标题 windows(powershell)mac windows(powershell) Get-ChildItem | ForEach-Object { $_.Name }:打印当前目录中所有文件的名字Get-ChildItem | ForEach-Object { $_.Name } > file_list.txt&#xff1…

Java | Leetcode Java题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, new Comparator<int[]>() {public int compare(int[] person1, int[] person2) {if (person1[0] ! person2[0]) {return person2[0] - perso…

STM32 HAL freertos零基础(十一)中断管理

1、简介 在FreeRTOS中,中断管理是一个重要的方面,尤其是在嵌入式系统中。正确地处理中断可以确保系统的实时响应能力,并且能够在中断服务程序(ISR)中执行关键操作。FreeRTOS提供了一些机制来帮助开发者管理中断,并确保在多任务环境下中断处理的安全性和高效性。 任何中…

【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 &#x1f354…