使用数据增强技术对已有样本进行扩充

本文介绍了在样本量有限的情况下,如何利用Python的PIL库对图像进行数据增强,包括水平翻转、垂直翻转和三种不同角度的旋转,以防止过拟合。提供的代码示例展示了如何实现这些操作并保存处理后的图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  当数据集中的样本量较少时,直接将其输入网络进行训练可能会导致过拟合,所以需要对已有样本通过使用数据增强技术进行扩充。扩充时主要有翻转和旋转两种操作,其中翻转包含水平翻转、上下翻转两种,旋转包含逆时针旋转 9 0 ∘ 90^{\circ} 90 18 0 ∘ 180^{\circ} 180 27 0 ∘ 270^{\circ} 270三种。

  具体代码如下所示。

# -*- coding: utf-8 -*-

from PIL import Image
import os

file_dir = 'E:/Remote Sensing/' # 原始图片路径
save_dir = 'E:/Remote Sensing/'  # 保存路径
img_name = 'airplane.jpg'
img_path = file_dir + img_name  # 批量读取图片
im = Image.open(img_path)
LEFT_RIGHT = im.transpose(Image.FLIP_LEFT_RIGHT)  # 左右翻转
TOP_BOTTOM = im.transpose(Image.FLIP_TOP_BOTTOM)  # 上下翻转
rotated_90 = im.transpose(Image.ROTATE_90)  # 逆时针旋转90度
rotated_180 = im.transpose(Image.ROTATE_180)  # 逆时针旋转180度
rotated_270 = im.transpose(Image.ROTATE_270)  # 逆时针旋转270度
LEFT_RIGHT.save(save_dir + 'LEFT_RIGHT_'+img_name)  # 保存左右翻转后的图片
TOP_BOTTOM.save(save_dir + 'TOP_BOTTOM_'+img_name)  # 保存上下翻转后的图片
rotated_90.save(save_dir + 'rotated_90_'+img_name)  # 保存逆时针旋转90度后的图片
rotated_180.save(save_dir + 'rotated_180_'+img_name)  # 保存逆时针旋转180度后的图片
rotated_270.save(save_dir + 'rotated_270_'+img_name)  # 保存逆时针旋转270度后的图片

  运行代码后得到的结果如下所示。

  • 原图
    在这里插入图片描述

  • 水平翻转
    在这里插入图片描述

  • 上下翻转
    在这里插入图片描述

  • 逆时针旋转 9 0 ∘ 90^{\circ} 90
    在这里插入图片描述

  • 逆时针旋转 18 0 ∘ 180^{\circ} 180
    在这里插入图片描述

  • 逆时针旋转 27 0 ∘ 270^{\circ} 270
    在这里插入图片描述

### 数据增强技术在机器学习和深度学习中的应用 数据增强是一种有效的方法,用于扩充训练数据集并提升模型的泛化能力。这种方法不仅能够增加数据量,还能通过引入多样化的样本来减少过拟合的风险[^1]。 #### 数据增强的核心理念 数据增强主要分为两类操作: 1. **数据集扩充**:指通过多种手段扩大原始数据的数量。这可以通过收集更多真实数据或者利用人工方法生成额外的数据来实现。 2. **数据增强**:专注于通过对已有数据施加变换(如旋转、缩放、裁剪等),从而创建新的样本以模拟不同的场景或条件。 对于图像领域,常见的增强策略包括但不限于水平翻转、垂直翻转、颜色调整以及几何变形;而对于自然语言处理任务,则可以采用诸如随机删除词语、替换同义词等方式来进行文本层面的数据增强[^2]。 以下是基于Python的一个简单例子展示如何运用函数`random_deletion()`与`random_insertion()`完成对一段英文句子执行随机删减及插入字词的操作: ```python import random def random_deletion(words, p=0.3): """Randomly delete words from the list with probability `p`.""" if len(words) == 1: return words remaining = [word for word in words if random.uniform(0, 1) > p] if not remaining: # Ensure at least one word remains. return [random.choice(words)] return remaining def random_insertion(words, n=3): """Insert `n` randomly chosen existing words into their original positions within the sentence.""" for _ in range(n): insert_position = random.randint(0, len(words)) inserted_word = random.choice(words) words.insert(insert_position, inserted_word) return words text = "This is a sample sentence for random deletion and insertion." words = text.split() augmented_text_deletion = ' '.join(random_deletion(words)) print(f"After Deletion: {augmented_text_deletion}") augmented_text_insertion = ' '.join(random_insertion(words[:])) # Use copy to avoid side effects on input data. print(f"After Insertion: {augmented_text_insertion}") ``` 上述脚本定义了两个辅助功能——`random_deletion` 和 `random_insertion` 来分别演示两种典型的数据增强技巧即随机移除部分词汇以及向序列内部嵌入若干重复项的过程[^2]。 #### 总结 无论是结构化还是非结构化数据,在实际项目开发过程中合理选用合适的技术方案实施适当程度上的数据扩增措施均有助于改善最终预测效果的质量。值得注意的是,尽管这些方法确实能带来好处但也需谨慎行事以免造成负面影响比如过度扭曲原意等情况发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值