365天深度学习训练营-第T10周:数据增强

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/AtyZUu_j2k_ScNH6e732ow) 中的学习记录博客**

>- **🍦 参考文章:365天深度学习训练营-第10周:数据增强(训练营内部成员可读)**

>- **🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)**

>- **🚀 文章来

数据增强

以下是一些常用的数据增强技术及其在 TensorFlow 和 Keras 中的实现函数的简易使用示例:

1.  随机翻转(Random Flip):

使用 TensorFlow 函数:

    import tensorflow as tf
    
       # 随机水平翻转
       flipped_image = tf.image.random_flip_left_right(image)
    
       # 随机垂直翻转
       flipped_image = tf.image.random_flip_up_down(image)
    
    

使用 Keras 函数:

    import tensorflow as tf
    
       # 创建一个随机水平翻转的层
       random_flip = tf.keras.layers.experimental.preprocessing.RandomFlip("horizontal")
    
       # 对输入图像进行翻转
       flipped_image = random_flip(image)
    
    

1.  随机旋转(Random Rotation):

使用 TensorFlow 函数:

    import tensorflow as tf
    
       # 随机旋转(90°、180° 或 270°)
       rotated_image = tf.image.random_rot90(image)
    
       # 旋转 90°
       rotated_image = tf.image.rot90(image)
    
    

使用 Keras 函数:

    import tensorflow as tf
    
       # 创建一个随机旋转的层,设置旋转角度范围为 ±45°(约 ±0.785π)
       random_rotation = tf.keras.layers.experimental.preprocessing.RandomRotation(0.785)
    
       # 对输入图像进行旋转
       rotated_image = random_rotation(image)
    
    

1.  随机缩放(Random Zoom):

使用 TensorFlow 函数:

    import tensorflow as tf
    
       # 随机剪切和缩放到固定大小(例:缩放到原图的 80%)
       cropped_image = tf.image.random_crop(image, size=(int(height * 0.8), int(width * 0.8), channels))
    
    

使用 Keras 函数:

    import tensorflow as tf
    
       # 创建一个随机缩放的层,设置缩放范围为 ±20%
       random_zoom = tf.keras.layers.experimental.preprocessing.RandomZoom(height_factor=(-0.2, 0.2), width_factor=(-0.2, 0.2))
    
       # 对输入图像进行缩放
       zoomed_image = random_zoom(image)
    
    

1.  随机平移(Random Translation):

使用 Keras 函数:

    import tensorflow as tf
    
       # 创建一个随机平移的层,设置平移范围为 ±10%(在宽度和高度方向)
       random_translation = tf.keras.layers.experimental.preprocessing.RandomTranslation(height_factor=(-0.1, 0.1), width_factor=(-0.1, 0.1))
    
       # 对输入图像进行平移
       translated_image = random_translation(image)
    
    

这些数据增强方法可以单独运用,也可以组合实现更复杂的数据增强。在实际使用中,选择的增强方法和参数设置需要根据具体任务和数据集特点进行调整。

增强方式
方法一:将其嵌入model中

这种方法在模型结构中包含数据增强层,使得数据增强可以作为模型的一部分进行训练。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers.experimental.preprocessing import (
    RandomFlip, RandomRotation, RandomZoom, RandomTranslation)
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

def build_model(input_shape):
    model = Sequential([
        # 数据增强层
        RandomFlip("horizontal", input_shape=input_shape),
        RandomRotation(0.1),
        RandomZoom(0.1),

        # 其他模型层
        Conv2D(32, (3, 3), activation="relu"),
        MaxPooling2D((2, 2)),
        Flatten(),
        Dense(64, activation="relu"),
        Dense(10, activation="softmax")
    ])

    model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
    return model

方法二:在Dataset数据集中进行数据增强

这种方法在预处理数据集时直接应用数据增强操作。

import tensorflow as tf
import numpy as np

def augment_image(image, label):
    # 随机水平翻转
    image = tf.image.random_flip_left_right(image)

    # 随机旋转
    image = tf.image.random_rot90(image)

    # 随机缩放
    image = tf.image.random_zoom(
        image, zoom_range=[0.9, 1.1]
    )
    return image, label

# 创建一个模拟数据集
num_samples = 100
image_height, image_width, channels = 32, 32, 3
X = np.random.randint(0, 256, (num_samples, image_height, image_width, channels))
y = np.random.randint(0, 10, num_samples)

# 将 NumPy 数组转换为 tf.data.Dataset
dataset = tf.data.Dataset.from_tensor_slices((X, y))

# 应用数据增强
dataset = dataset.map(augment_image)

# 批处理、打乱和重复数据集
dataset = dataset.batch(32).shuffle(buffer_size=100).repeat()

您可以根据需要为 TensorFlow 和 Keras 创建自定义数据增强功能。以下示例说明了如何在 TensorFlow 中创建一个自定义的随机噪声增强函数:

1.  自定义随机噪声增强函数:

 

  import tensorflow as tf
    import numpy as np
    
    def random_noise(image, stddev=0.1, seed=None):
        with tf.device("/cpu:0"):
            shape = tf.shape(image)
            noise = tf.random.normal(shape, mean=0.0, stddev=stddev, seed=seed)
        noisy_image = tf.add(image, noise)
    
        return tf.clip_by_value(noisy_image, 0.0, 1.0)
    


    

该 `random_noise` 函数会在图像中加入具有给定标准差的高斯噪声,并确保结果图像的像素值在 \[0, 1\] 范围内。

1.  在 TensorFlow 数据集中应用自定义增强函数:

    def augment_image(image, label):
        # 已经存在的增强方法(例如:翻转、旋转等)
        # ...
    
        # 应用自定义随机噪声增强函数
        image = random_noise(image, stddev=0.1)
    
        return image, label
    
    dataset = dataset.map(augment_image)
    


    

在创建自定义数据增强功能时,务必在函数内部将原始图像和结果图像像素值限制在\[0, 1\]范围内,以防加入增强效果后出现数据值溢出带来的问题。此外,确保函数可以适用于任何大小的输入图像,可以通过在函数内部查找图像形状来实现适当的调整。

这种方式,您可以实现各种自定义数据增强功能以满足特定应用需求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值