当前位置: 首页 > news >正文

深度学习笔记20_数据增强

  •  🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊 | 接辅导、项目定制

一、我的环境

1.语言环境:Python 3.9

2.编译器:Pycharm

3.深度学习环境:TensorFlow 2.10.0

二、GPU设置

       若使用的是cpu则可忽略

import tensorflow as tf
gpus = tf.config.list_physical_devices("GPU")if gpus:gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPUtf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量按需使用tf.config.set_visible_devices([gpu0],"GPU")

、加载数据

data_dir   = "./data/"
img_height = 224
img_width  = 224
batch_size = 32train_ds = tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split=0.3,subset="training",seed=12,image_size=(img_height, img_width),batch_size=batch_size)val_ds = tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split=0.3,subset="validation",seed=12,image_size=(img_height, img_width),batch_size=batch_size)

       由于原始数据集不包含测试集,因此需要创建一个。使用 tf.data.experimental.cardinality 确定验证集中有多少批次的数据,然后将其中的 20% 移至测试集。
 

val_batches = tf.data.experimental.cardinality(val_ds)
test_ds     = val_ds.take(val_batches // 5)
val_ds      = val_ds.skip(val_batches // 5)print('Number of validation batches: %d' % tf.data.experimental.cardinality(val_ds))
print('Number of test batches: %d' % tf.data.experimental.cardinality(test_ds))
class_names = train_ds.class_names
print(class_names)
#['cat', 'dog']
AUTOTUNE = tf.data.AUTOTUNEdef preprocess_image(image,label):return (image/255.0,label)# 归一化处理
train_ds = train_ds.map(preprocess_image, num_parallel_calls=AUTOTUNE)
val_ds   = val_ds.map(preprocess_image, num_parallel_calls=AUTOTUNE)
test_ds  = test_ds.map(preprocess_image, num_parallel_calls=AUTOTUNE)train_ds = train_ds.cache().prefetch(buffer_size=AUTOTUNE)
val_ds   = val_ds.cache().prefetch(buffer_size=AUTOTUNE)
plt.figure(figsize=(15, 10))  # 图形的宽为15高为10for images, labels in train_ds.take(1):for i in range(8):ax = plt.subplot(5, 8, i + 1) plt.imshow(images[i])plt.title(class_names[labels[i]])plt.axis("off")

 

、数据增强

我们可以使用 tf.keras.layers.experimental.preprocessing.RandomFliptf.keras.layers.experimental. preprocessing.RandomRotation 进行数据增强。

  • tf.keras.layers.experimental.preprocessing.RandomFlip:水平和垂直随机翻转每个图像。
  • tf.keras.layers.experimental.preprocessing.RandomRotation:随机旋转每个图像
data_augmentation = tf.keras.Sequential([tf.keras.layers.experimental.preprocessing.RandomFlip("horizontal_and_vertical"),tf.keras.layers.experimental.preprocessing.RandomRotation(0.2),
])

第一个层表示进行随机的水平和垂直翻转,而第二个层表示按照 0.2 的弧度值进行随机旋转。 

plt.figure(figsize=(8, 8))
for i in range(9):augmented_image = data_augmentation(image)ax = plt.subplot(3, 3, i + 1)plt.imshow(augmented_image[0])plt.axis("off")

运行结果: 

五、增强方式

方法一:将其嵌入model中 

model = tf.keras.Sequential([data_augmentation,layers.Conv2D(16, 3, padding='same', activation='relu'),layers.MaxPooling2D(),
])
#这样做的好处是:
# 数据增强这块的工作可以得到GPU的加速(如果你使用了GPU训练的话)
# 注意:只有在模型训练时(Model.fit)才会进行增强,在模型评估(Model.evaluate)以及预测 
# (Model.predict)时并不会进行增强操作。

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

batch_size = 32
AUTOTUNE = tf.data.AUTOTUNEdef prepare(ds):ds = ds.map(lambda x, y: (data_augmentation(x, training=True), y), num_parallel_calls=AUTOTUNE)return ds

 运行结果:

train_ds = prepare(train_ds)

六、训练模型

model = tf.keras.Sequential([layers.Conv2D(16, 3, padding='same', activation='relu'),layers.MaxPooling2D(),layers.Conv2D(32, 3, padding='same', activation='relu'),layers.MaxPooling2D(),layers.Conv2D(64, 3, padding='same', activation='relu'),layers.MaxPooling2D(),layers.Flatten(),layers.Dense(128, activation='relu'),layers.Dense(len(class_names))
])
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
epochs=20
history = model.fit(train_ds,validation_data=val_ds,epochs=epochs
)

 运行结果:

Epoch 1/20
14/14 [==============================] - 9s 60ms/step - loss: 0.8157 - accuracy: 0.5452 - val_loss: 0.6570 - val_accuracy: 0.5811
Epoch 2/20
14/14 [==============================] - 0s 32ms/step - loss: 0.5555 - accuracy: 0.7310 - val_loss: 0.4195 - val_accuracy: 0.8311
Epoch 3/20
14/14 [==============================] - 0s 30ms/step - loss: 0.2668 - accuracy: 0.8881 - val_loss: 0.4676 - val_accuracy: 0.8041
Epoch 4/20
14/14 [==============================] - 0s 31ms/step - loss: 0.1672 - accuracy: 0.9310 - val_loss: 0.3413 - val_accuracy: 0.8649
Epoch 5/20
14/14 [==============================] - 0s 30ms/step - loss: 0.1526 - accuracy: 0.9452 - val_loss: 0.2555 - val_accuracy: 0.9054
Epoch 6/20
14/14 [==============================] - 0s 29ms/step - loss: 0.0710 - accuracy: 0.9881 - val_loss: 0.2825 - val_accuracy: 0.9122
Epoch 7/20
14/14 [==============================] - 0s 29ms/step - loss: 0.0278 - accuracy: 0.9976 - val_loss: 0.2849 - val_accuracy: 0.9054
Epoch 8/20
14/14 [==============================] - 0s 28ms/step - loss: 0.0140 - accuracy: 0.9976 - val_loss: 0.2841 - val_accuracy: 0.9122
Epoch 9/20
14/14 [==============================] - 0s 29ms/step - loss: 0.0103 - accuracy: 1.0000 - val_loss: 0.3034 - val_accuracy: 0.9122
Epoch 10/20
14/14 [==============================] - 0s 29ms/step - loss: 0.0060 - accuracy: 1.0000 - val_loss: 0.7403 - val_accuracy: 0.8446
Epoch 11/20
14/14 [==============================] - 0s 29ms/step - loss: 0.0620 - accuracy: 0.9738 - val_loss: 0.2892 - val_accuracy: 0.9054
Epoch 12/20
14/14 [==============================] - 0s 29ms/step - loss: 0.0377 - accuracy: 0.9881 - val_loss: 0.3887 - val_accuracy: 0.8919
Epoch 13/20
14/14 [==============================] - 0s 29ms/step - loss: 0.0312 - accuracy: 0.9881 - val_loss: 0.5183 - val_accuracy: 0.8784
Epoch 14/20
14/14 [==============================] - 0s 28ms/step - loss: 0.0264 - accuracy: 0.9929 - val_loss: 0.7976 - val_accuracy: 0.8784
Epoch 15/20
14/14 [==============================] - 0s 28ms/step - loss: 0.0697 - accuracy: 0.9690 - val_loss: 0.3325 - val_accuracy: 0.8851
Epoch 16/20
14/14 [==============================] - 0s 28ms/step - loss: 0.0270 - accuracy: 0.9952 - val_loss: 0.4877 - val_accuracy: 0.9122
Epoch 17/20
14/14 [==============================] - 0s 29ms/step - loss: 0.0129 - accuracy: 0.9952 - val_loss: 1.3700 - val_accuracy: 0.8378
Epoch 18/20
14/14 [==============================] - 0s 28ms/step - loss: 0.0229 - accuracy: 0.9905 - val_loss: 0.4864 - val_accuracy: 0.9122
Epoch 19/20
14/14 [==============================] - 0s 28ms/step - loss: 0.0231 - accuracy: 0.9952 - val_loss: 0.3220 - val_accuracy: 0.9257
Epoch 20/20
14/14 [==============================] - 0s 28ms/step - loss: 0.0331 - accuracy: 0.9881 - val_loss: 0.4932 - val_accuracy: 0.8919

七、自定义增强函数

import random
# 这是大家可以自由发挥的一个地方
def aug_img(image):seed = (random.randint(0,9), 0)# 随机改变图像对比度stateless_random_brightness = tf.image.stateless_random_contrast(image, lower=0.1, upper=1.0, seed=seed)return stateless_random_brightness
image = tf.expand_dims(images[3]*255, 0)
print("Min and max pixel values:", image.numpy().min(), image.numpy().max())
plt.figure(figsize=(8, 8))
for i in range(9):augmented_image = aug_img(image)ax = plt.subplot(3, 3, i + 1)plt.imshow(augmented_image[0].numpy().astype("uint8"))plt.axis("off")

八、总结

数据增强类型:

1.图像增强

  • 随机旋转
  • 随机翻转
  • 随机缩放
  • 裁剪和调整大小

2.文本数据增强

字符级别在字符级别,数据增强涉及更改文本数据中的单个字符。

短语级别在短语级别扩充数据涉及以连贯的方式修改短语或单词组。

3.音频数据增强

噪声注入:我们可以通过简单地使用 numpy 向数据添加一些随机值来增加音频样本的数量。

转移时间:转移时间的想法非常简单。它只是随机将音频向左/向右移动。

改变音高:我们可以使用 librosa 函数改变音高。

改变速度:我们可以使用 librosa 函数以固定速率拉伸音频时间序列。

相关文章:

深度学习笔记20_数据增强

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 一、我的环境 1.语言环境:Python 3.9 2.编译器:Pycharm 3.深度学习环境:TensorFlow 2.10.0 二、GPU设置…...

模板变量与php变量对比做判断

${item.create_name}如何与php变量对比 在PHP中,您可以通过将字符串内嵌到双引号中来将模板变量 ${item.create_name} 与PHP变量进行对比。如果您有一个PHP变量 $phpVariable 并且想要检查它是否与 ${item.create_name} 相同,您可以使用 str_replace 函…...

C语言 | Leetcode C语言题解之第485题最大连续1的个数

题目&#xff1a; 题解&#xff1a; int findMaxConsecutiveOnes(int* nums, int numsSize) {int maxCount 0, count 0;for (int i 0; i < numsSize; i) {if (nums[i] 1) {count;} else {maxCount fmax(maxCount, count);count 0;}}maxCount fmax(maxCount, count);…...

C语言复习概要(六)

公主请阅 1. 深入理解数组与指针在C语言中的应用1.1 数组名的理解 2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序的实现5. 二级指针6. 指针数组7. 指针数组模拟二维数组8.总结 1. 深入理解数组与指针在C语言中的应用 数组与指针是C语言的核心概念之一&#xff0c;理解…...

PyQt 入门教程(2)搭建开发环境

文章目录 一、搭建开发环境1、安装PyQt5与pyqt5-tools2、配置QtDesigner3、配置Pyuic4、配置Pyrcc 一、搭建开发环境 1、安装PyQt5与pyqt5-tools PyQt5&#xff1a; PyQt的开发库。Pyqt5-tools&#xff1a; 它是一个包含多种工具的工具包&#xff0c;旨在帮助开发者更方便地使…...

Flink Kubernetes Operator

Flink Kubernetes Operator是一个用于在Kubernetes集群上管理Apache Flink应用的工具。 一、基本概念 Flink Kubernetes Operator允许用户通过Kubernetes的原生工具&#xff08;如kubectl&#xff09;来管理Flink应用程序及其生命周期。它简化了Flink应用在Kubernetes集群上的…...

【最新华为OD机试E卷-支持在线评测】字符统计及重排(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…...

springboot使用GDAL获取tif文件的缩略图并转为base64

springboot使用GDAL获取tif文件的缩略图并转为base64 首先需要安装gdal&#xff1a;https://blog.csdn.net/qq_61950936/article/details/142880279?spm1001.2014.3001.5501 然后是配置pom.xml文件&#xff1a; <!--处理缩略图的--><dependency><groupId>o…...

Pytorch——pip下载安装pytorch慢的解决办法

一、找到需要下载的pytorch链接 运行&#xff1a;pip install torch1.11.0cu113 torchvision0.12.0cu113 torchaudio0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113。然后得到&#xff1a; 我这里为&#xff1a;https://download.pytorch.org/whl/cu113/t…...

uniapp微信小程序调用百度OCR

uniapp编写微信小程序调用百度OCR 公司有一个识别行驶证需求&#xff0c;调用百度ocr识别 使用了image-tools这个插件&#xff0c;因为百度ocr接口用图片的base64 这里只是简单演示&#xff0c;accesstoken获取接口还是要放在服务器端&#xff0c;不然就暴露了自己的百度项目k…...

Vue3+TS项目---实用的复杂类型定义总结

namespace 概念 在TypeScript中&#xff0c;namespace是一种用于组织代码得结构&#xff0c;主要用于将相关得功能&#xff08;例如类、接口、函数等&#xff09;组合在一起。它可以帮助避免命名冲突&#xff0c;尤其是在大项目中。 用法 1.定义命名空间 使用namespace关键…...

尚硅谷rabbitmq2024 工作模式路由篇 第11节 答疑

String exchangeName "test_direct"; /! 创建交换机 人图全 channel.exchangeDeclare(exchangeName,BuiltinExchangeType.DIREcT, b: true, b1: false, b2: false, map: null); /1 创建队列 String queue1Name "test_direct_queue1"; String queue2Name &q…...

HTTP vs WebSocket

本文将对比介绍HTTP 和 WebSocket &#xff01; 相关文章&#xff1a; 1.HTTP 详解 2.WebSocket 详解 一、HTTP&#xff1a;请求/响应的主流协议 HTTP&#xff08;超文本传输协议&#xff09;是用于发送和接收网页数据的标准协议。它最早于1991年由Tim Berners-Lee提出来&…...

R语言医学数据分析实践-数据读写

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言编程_夏天又到了的博客-CSDN博客 R编程环境的搭建-CSDN博客 在分析公共卫生数据时&#xff0c;数…...

JavaWeb环境下Spring Boot在线考试系统的优化策略

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于JavaWeb技术的在线考试系统设计与实现的开发全过程。通过分析基于Java Web技术的在线考试系统设计与实现管理的不足&#xff0c;创建了一个计算机管理基于Ja…...

ETL技术在金蝶云星空与旺店通WMS集成中的应用

金蝶云星空数据集成到旺店通WMS的技术案例分享 在数字化转型的背景下&#xff0c;现代企业对系统间的数据集成需求日益增加。本篇文章将以“组装入库>其他入库单-1”方案为例&#xff0c;详细解析如何通过轻易云数据集成平台&#xff0c;实现金蝶云星空与旺店通WMS之间的数…...

【力扣热题100】3194. 最小元素和最大元素的最小平均值【Java】

题目&#xff1a;3194.最小元素和最大元素的最小平均值 你有一个初始为空的浮点数数组 averages。另给你一个包含 n 个整数的数组 nums&#xff0c;其中 n 为偶数。 你需要重复以下步骤 n / 2 次&#xff1a; 从 nums 中移除 最小 的元素 minElement 和 最大 的元素 maxElement…...

机器学习拟合过程

import numpy as np import matplotlib.pyplot as plt# 步骤1: 生成模拟数据 np.random.seed(0) X 2 * np.random.rand(100, 1) y 4 3 * X 2 * X**2 np.random.randn(100, 1)# 步骤2: 定义线性模型 (我们从随机权重开始) w np.random.randn(2, 1) b np.random.randn(1)#…...

如何快速部署一套智能化openGauss测试环境

一、openGauss介绍 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行&#xff0c;允许用户自由地复制、使用、修改和分发软件。openGauss内核深度融合了华为在数据库领域多年的研发经验&#xff0c;结合企业级场景需求&#xff0c;持续构建竞争力…...

【设计模式】深入理解Python中的原型设计模式

深入理解Python中的原型设计模式 在软件开发中&#xff0c;有时需要创建对象的过程非常复杂或者代价较高&#xff0c;而在同一类对象的实例之间有很多重复的属性。为了避免重复构造对象&#xff0c;提升性能和效率&#xff0c;原型设计模式&#xff08;Prototype Pattern&…...

终极免费虚拟光驱指南:如何在Windows上轻松挂载ISO文件

终极免费虚拟光驱指南&#xff1a;如何在Windows上轻松挂载ISO文件 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu 在数字时代&#xff0c;我们不再需要物理光驱来读取光盘内容&#xff0c;但ISO、NRG、MDS等光盘映像文件仍然无处不…...

Phi-4-mini-reasoning推理模型快速入门:Docker一键部署全攻略

Phi-4-mini-reasoning推理模型快速入门&#xff1a;Docker一键部署全攻略 1. 认识Phi-4-mini-reasoning推理模型 Phi-4-mini-reasoning是微软推出的轻量级开源推理模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个3.8B参数的模型虽然体积小巧&#x…...

Git-Sim终极调试指南:快速解决常见错误与性能优化技巧

Git-Sim终极调试指南&#xff1a;快速解决常见错误与性能优化技巧 【免费下载链接】git-sim Visually simulate Git operations in your own repos with a single terminal command. 项目地址: https://gitcode.com/gh_mirrors/gi/git-sim Git-Sim是一款强大的Git操作可…...

基于STM32LXXX的数字电位器(MAX5481EUD+)驱动应用程序设计

一、简介: MAX5481EUD+ 是一款10位(1024抽头)、非易失性、线性变化数字电位器,采用SPI/增删双模式接口,特别适合需要高分辨率、低温漂和掉电保存设置的STM32LXXX低功耗应用。 二、主要技术特性: 参数项 典型值/描述 分辨率 10-bit (1024 taps) 端到端电阻 10kΩ (另有50…...

DeepXDE终极指南:科学机器学习与物理信息学习的完整解决方案

DeepXDE终极指南&#xff1a;科学机器学习与物理信息学习的完整解决方案 【免费下载链接】deepxde A library for scientific machine learning and physics-informed learning 项目地址: https://gitcode.com/gh_mirrors/de/deepxde 在科学计算和工程仿真领域&#xff…...

3步彻底优化:如何让Windows系统性能飙升30%?

3步彻底优化&#xff1a;如何让Windows系统性能飙升30%&#xff1f; 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors/w…...

BilibiliDown终极指南:3步掌握B站视频下载完整流程

BilibiliDown终极指南&#xff1a;3步掌握B站视频下载完整流程 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi/B…...

英飞凌功率MOSFET SPICE模型在TINA中的热仿真与参数优化指南

1. 为什么需要功率MOSFET热仿真&#xff1f; 做电源设计的朋友应该都深有体会&#xff0c;功率MOSFET的发热问题就像个甩不掉的"小尾巴"。我去年做一个48V转12V的DC-DC项目时&#xff0c;就遇到过MOSFET莫名其妙烧毁的情况。后来用热成像仪一看&#xff0c;才发现某个…...

如何用Diablo Edit2打造暗黑破坏神II完美角色:全版本角色编辑器使用指南

如何用Diablo Edit2打造暗黑破坏神II完美角色&#xff1a;全版本角色编辑器使用指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit Diablo Edit2是一款功能强大的暗黑破坏神II角色存档编辑器&…...

颠覆式效率革命:Krita智能选区插件重新定义图像分割工作流

颠覆式效率革命&#xff1a;Krita智能选区插件重新定义图像分割工作流 【免费下载链接】krita-vision-tools Krita plugin which adds selection tools to mask objects with a single click, or by drawing a bounding box. 项目地址: https://gitcode.com/gh_mirrors/kr/kr…...