IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> tensorflow数据读入的基础步骤 -> 正文阅读

[人工智能]tensorflow数据读入的基础步骤

tensorflow数据读入的基础步骤

说实话,每次在跑模型的时候数据集输入网络的形式都让我很头疼,虽然自己会写,但总觉得代码不够简洁漂亮,也经常疑心数据传输的速度问题。所以每次都是去copy别人的数据处理的代码,自己则看的懵懵懂懂的,故在这里记录一下常用的数据输入网络的方式。

1. 输入与标签建立联系–zip
数据集处理的第一步就是建立输入数据与标签间的一一对应关系,下面使用zip()作为示例。
输入:可迭代的对象(列表)
输出:将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
实例

>>>a = [1,2,3]
>>>b = [4,5,6]
>>>c = [4,5,6,7,8]
>>>zipped = zip(a,b)
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)
[(1, 4), (2, 5), (3, 6)] 
# 总结:zip将两个或多个列表中对应位置的元素捆绑在一起,最后返回的是一个列表,其长度与输入的最短的列表一致
>>> zip(*zipped)
[(1, 2, 3), (4, 5, 6)]
# zip(*)的功能与zip()相反,可理解为将捆绑的列表元素进行解压

以图像超分辨率模型为例子,输入为低分辨率影像lr_image,那标签就是真实的高分辨率影像hr_image。

第一步,需要读取lr_image和hr_image的存放地址

def get_sorted_image_path(path, ext):
    # 获取文件夹下的所有图片地址 并进行排序
    ext_regex = "*" + ext # ext=.jpg/.png/.tif
    data_root = pathlib.Path(path) # 返回一个path对象,以前os.path中时str
    image_paths = list(data_root.rglob(ext_regex)) # 可跨越子文件夹 找到头文件夹下所有ext后缀的图片
    image_paths = sorted([str(path) for path in image_paths])
    return image_paths

第二步,用zip()生成lr和hr的绑定列表

lr_path = get_sorted_image_path(lr_image_path , ext=".png")
hr_path = get_sorted_image_path(hr_image_path , ext=".png")
# 打包hr和lr的所有地址 并进行shuffle打乱
lr_hr_sorted_paths = list(zip(lr_sorted_paths[:], hr_sorted_paths[:]))
random.shuffle(lr_hr_sorted_paths)

2. 使用tensorflow构建Dataset对象

第一步:生成数据迭代器
tf.data.Dataset.from_tensor_slices的作用和zip()相似,也是将两个或者多个对象的相应位置的元素进行捆绑。但区别在于tf.data.Dataset.from_tensor_slices的输入是元组形式,输出是TensorSliceDataset类型。

ds = tf.data.Dataset.from_tensor_slices((lr_path , hr_path))
# 用来读取图片
def load_and_preprocess_lr_hr_images(lr_path, hr_path, ext=ext):
        return load_and_preprocess_image(lr_path, ext), load_and_preprocess_image(hr_path, ext)
# 得到已读入图片的迭代器
lr_hr_ds = ds.map(load_and_preprocess_lr_hr_images, num_parallel_calls=4)

在理解ds.map之前,我们先来看看python中的map()函数的语法:
map(function, iterable, …),即根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

>>> def square(x)# 先定义一个函数
...     return x ** 2
...
>>> map(square, [1,2,3,4,5])    # 计算列表各个元素的平方
<map object at 0x100d3d550>     # 返回迭代器
>>> list(map(square, [1,2,3,4,5]))   # 使用 list() 转换为列表
[1, 4, 9, 16, 25]
>>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))   # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]

那么可以发现ds.map()和map()的区别就在于ds.map()中并没有传入数据,而是只传入了先前定义的函数load_and_preprocess_lr_hr_images(可看作对应为map()中的square)。这是因为ds已经是一个TensorSliceDataset了,其自身就包含了数据,因此不需要再额外传入。
tips: 可以看到在ds.map中有一个num_parallel_calls的参数设置,因为我们的电脑一般都是多核的,通过设置调用的核数来加快数据处理的速度,在上文代码中num_parallel_calls=4,即使用4核CPU。

第二步:对得到的Datasset对象进行预处理
在数据读取完成之后,我们还需要对数据进行打乱和分割batch分割。

lr_hr_ds = lr_hr_ds .shuffle(buffer_size=image_count) # buffer_size等于数据集大小确保充分打乱
lr_hr_ds = lr_hr_ds .repeat() #repeat 适用于next(iter(ds))
lr_hr_ds = lr_hr_ds .batch(BATCH_SIZE)
# 当GPU在训练模型的时候,`prefetch` 使CPU进行数据预加载在后台取得 batchszie的数据。
lr_hr_ds = lr_hr_ds .prefetch(buffer_size=AUTOTUNE)#随机缓冲区相关

总的来说,使用tf进行数据读取主要按照以下步骤来:

  1. from_tensor_slices()生成Dataset对象
  2. map()处理数据
  3. shuffle()打乱数据
  4. repeat() 将数据集复制epoch_num次
  5. batch()获取当此输入网络的数据量
  6. perfetch()指定缓冲,提高CPU核GPU并行率

第一次写博客,如果有不对的地方,希望各位读者指正。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:46:04  更:2021-12-23 15:46:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 0:38:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码