数据工程师,转型人工智能岗位的理想时空通道

news/2024/11/6 5:00:29/文章来源:https://www.cnblogs.com/jellyai/p/18524358

序言:数据工程师是从传统软件工程师向人工智能方向转型的最佳切入点之一。数据工程师的职责通常是为人工智能项目收集和准备高质量的训练数据集,包括从互联网上获取公开数据、或自行采集、清洗、整理数据集。尽管看似简单,但数据工程师的工作至关重要,因为数据质量直接影响模型的性能,数据准备不当可能导致模型开发失败。本文接下来的几个小节将主要讲解在谷歌的TensorFlow平台上如何使用自带数据集、第三方公开数据集以及自定义的数据集来支持模型训练。

在本文的前几节中,我们实际上已经使用了多种数据集来训练模型,从Keras自带的Fashion MNIST数据集,到需要下载并预处理的图像数据集如“Horses or Humans”和“Dogs vs. Cats”。我们可能已经意识到,获取训练模型的数据有很多不同的方法。

然而,许多公共数据集要求我们在设计模型架构之前,先掌握各种特定领域的技能。TensorFlow Datasets (TFDS)的目标就是简化数据的获取方式,使数据更易于使用,因为所有获取数据的预处理步骤和将数据转化为TensorFlow友好格式的操作都已为我们准备好。

在第1和第2篇中,我们已经看到了Keras处理Fashion MNIST数据集的这种理念。回顾一下,当时我们只需这样做就可以获取数据:

data = tf.keras.datasets.fashion_mnist

(training_images, training_labels), (test_images, test_labels) = data.load_data()

TFDS基于这种理念,极大地扩展了可用数据集的数量和多样性。可用数据集的列表正在不断增长,涵盖以下类别:

• 音频:包括语音和音乐数据

• 图像:从“Horses or Humans”这样的基础学习数据集到如糖尿病视网膜病变检测等高级研究数据集

• 目标检测:包括COCO、Open Images等

• 结构化数据:包括“泰坦尼克号幸存者”、亚马逊评论等

• 摘要生成:包括CNN和Daily Mail新闻、科学论文、wikiHow等

• 文本:包括IMDb评论、自然语言问题等

• 翻译:包括各种翻译训练数据集

• 视频:包括“Moving MNIST”、“星际争霸”等

请注意,TensorFlow Datasets是独立于TensorFlow的安装包,因此在运行任何示例之前务必先安装它!如果我们使用的是Google Colab,它已经预装了。

本章将介绍TFDS及其如何大大简化训练过程。我们将探索其底层的TFRecord结构,这一结构可以在不同类型的基础数据间提供一致性。我们还将了解如何使用TFDS的提取-转换-加载(ETL)模式,以高效地处理大量数据来训练模型。

开始使用TFDS

让我们通过一些简单的例子来看看如何使用TFDS,以展示它如何为我们提供数据的标准接口,不论数据类型如何。

如果你需要安装它,可以通过以下pip命令完成:

pip install tensorflow-datasets

安装完成后,你可以通过tfds.load访问一个数据集,只需传入所需数据集的名称。例如,如果你想使用Fashion MNIST数据集,可以使用以下代码:

import tensorflow as tf

import tensorflow_datasets as tfds

mnist_data = tfds.load("fashion_mnist")

for item in mnist_data:

print(item)

务必检查从tfds.load命令返回的数据类型——打印item的输出将是数据集中本身可用的不同分割。在这个例子中,它是一个包含两个字符串“test”和“train”的字典。这些是可用的分割。

如果你想将这些分割加载到包含实际数据的数据集中,只需在tfds.load命令中指定所需的分割,例如:

mnist_train = tfds.load(name="fashion_mnist", split="train")

assert isinstance(mnist_train, tf.data.Dataset)

print(type(mnist_train))

在这种情况下,你会看到输出是一个DatasetAdapter,你可以遍历它来检查数据。这个适配器的一个好处是可以直接调用take(1)来获取第一条记录。让我们来检查一下数据的样子:

for item in mnist_train.take(1):

print(type(item))

print(item.keys())

第一个print的输出会显示每条记录中的item类型是一个字典。当我们打印其键时,可以看到在此图像数据集中,类型是“image”和“label”。所以,如果我们想检查数据集中的某个值,可以这样做:

for item in mnist_train.take(1):

print(type(item))

print(item.keys())

print(item['image'])

print(item['label'])

你会看到“image”的输出是一个28 × 28的数组(在一个tf.Tensor中),取值范围是0–255,表示像素强度。“label”会输出为tf.Tensor(2, shape=(), dtype=int64),指示该图像在数据集中属于类别2。

在加载数据集时,还可以使用with_info参数来获取数据集的相关信息,例如:

mnist_test, info = tfds.load(name="fashion_mnist", with_info=True)

print(info)

打印info会提供数据集内容的详细信息。例如,对于Fashion MNIST,你会看到如下输出:

tfds.core.DatasetInfo(

name='fashion_mnist',

version=3.0.0,

description='Fashion-MNIST是一个包含Zalando商品图像的数据集,包含6万个训练样本和1万个测试样本。每个样本是一个28x28的灰度图像,与10个类别中的某个标签相关联。',

homepage='https://github.com/zalandoresearch/fashion-mnist',

features=FeaturesDict({

'image': Image(shape=(28, 28, 1), dtype=tf.uint8),

'label': ClassLabel(shape=(), dtype=tf.int64, num_classes=10),

}),

total_num_examples=70000,

splits={

'test': 10000,

'train': 60000,

},

supervised_keys=('image', 'label'),

citation="""@article{DBLP:journals/corr/abs-1708-07747,

author = {Han Xiao and

Kashif Rasul and

Roland Vollgraf},

title = {Fashion-MNIST: a Novel Image Dataset for Benchmarking Machine Learning Algorithms},

journal = {CoRR},

volume = {abs/1708.07747},

year = {2017},

url = {http://arxiv.org/abs/1708.07747},

archivePrefix = {arXiv},

eprint = {1708.07747},

timestamp = {Mon, 13 Aug 2018 16:47:27 +0200},

biburl = {https://dblp.org/rec/bib/journals/corr/abs-1708-07747},

bibsource = {dblp computer science bibliography, https://dblp.org}

""",

redistribution_info=,

)

在这里,你可以看到数据集的详细信息,比如前面演示过的分割和数据集中的特征,还有额外的信息如引用、描述和数据集版本。

本节主要为TFDS的使用做了一个入门介绍,接下来的两章将详细说明如何在实际场景中使用它。TFDS是TensorFlow Datasets的简称。TensorFlow Datasets是一个专门为人工智能和机器学习模型开发提供支持的库,内含多种预处理好的数据集,方便用户直接在TensorFlow中使用,免去了编写复杂的数据导入和预处理代码的步骤。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/826477.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H.265 HEVC 视频编码 All In One

H.265 & HEVC 视频编码 All In One 高效视频编码 (HEVC),也称为 H.265,是一项视频压缩标准,允许 GoPro 摄像机以几乎一半的文件大小拍摄更大的视频内容(如 5.3k60fps 和 1080p240),同时具有同等画质。H.265 & HEVC 视频编码 All In One高效视频编码 (HEVC),也称…

南沙C++信奥赛陈老师解一本通题 1230:寻找平面上的极大点

​【题目描述】在一个平面上,如果有两个点(x,y),(a,b),如果说(x,y)支配了(a,b),这是指x≥a,y≥b; 用图形来看就是(a,b)坐落在以(x,y)为右上角的一个无限的区域内。 给定n个点的集合,一定存在若干个点,它们不会被集合中的任何一点所支配,这些点叫做极大值点。 编程找出所有…

CSP-S 2024 游寄

掉大分记 upd:更新正文我不曾忘记 很好听的草神歌,打算推完经过就推这个 。 我的破木箱 装满枯萎的花 放不下 光与壤 和新鲜的愿望 如果能飞翔 去高高的地方 撒一张 梦的网 收集爱的回响 你也在听吗 落单的孩子啊 别害怕 别害怕 黑夜不会太长 悬崖上的花 让我为你摘下 数…

说说Java的类加载机制?究竟什么是双亲委派模型?

首先引入一个概念,什么是Java类加载器? 一句话总结:类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。 官方总结:Java类加载器(英语:Java Classloader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。…

Sophos Firewall (SFOS) v21 GA - 下一代防火墙

Sophos Firewall (SFOS) v21 GA - 下一代防火墙Sophos Firewall (SFOS) v21 GA - 下一代防火墙 设备 • 云 • 虚拟 请访问原文链接:https://sysin.org/blog/sfos-21/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgSophos Firewall 2024 年 10 月 17 日,Sopho…

.NET开发者福音:JetBrains官方宣布 Rider 非商用免费开放!

前言 JetBrains官方前段时间宣布重磅消息,其两款知名IDE应用WebStorm和Rider现已面向社区开放,允许用户免费用于非商业用途。此举旨在支持学习、开源项目开发、内容创作及业余开发等活动。Rider介绍 JetBrains Rider 是一款一体化 IDE,适合使用整个 .NET 技术堆栈以及参与游…

鸿蒙开发案例:指南针

【1】引言(完整代码在最后面) 在本文中,我们将介绍如何使用鸿蒙系统(HarmonyOS)开发一个简单的指南针应用。通过这个案例,你可以学习如何使用传感器服务、状态管理以及UI构建等基本技能。 【2】环境准备 电脑系统:windows 10 开发工具:DevEco Studio NEXT Beta1 Build …

读数据工程之道:设计和构建健壮的数据系统27转换

转换1. 转换 1.1. 转换与查询不同1.1.1. 查询是根据过滤和连接逻辑从各种来源检索数据1.1.2. 转换将结果持久化,供其他转换或查询使用1.1.2.1. 结果可以被短暂地或永久地保存1.1.3. 除了持久性,转换区别于查询的另一个特点是复杂性1.1.3.1. 你可能会建立复杂的数据管道,结合…

使用 ollama 在本地试玩 LLM

在 chatGPT 的推动下。LLM 简直火出天际,各行各业都在蹭。听说最近 meta 开源的 llama3 模型可以轻松在普通 PC 上运行,这让我也忍不住来蹭一层。以下是使用 ollama 试玩 llama3 的一些记录。 什么是 llama LLaMA(Large Language Model Meta AI)是Meta开发的大规模预训练语…

获取绝对路径 【文件找不到】

场景# main.py 部分代码def _run_login_script(self):import subprocess# 定义 tools 目录下 login.py 脚本的路径script_path = os.path.join(os.getcwd(), "tools", "login.py")if "CONDA_DEFAULT_ENV" in os.environ and os.environ["CO…

Motivation Challenge

LightTR: A Lightweight Framework for Federated Trajectory Recovery general的问题,数据来源于边缘设备。无法很好的训练一个最优的模型 框架分散训练的得问题 (边缘设备) 一般来说,这些网络是由一堆时空(ST)块组成的,旨在学习轨迹之间的复杂的时空依赖性。st块包含基…

浅谈Windows下的线程细节

绪论 最近阅读了《windows核心编程》关于线程的章节,原书作者讨论得颇为深入,初读者极易被绕晕,我专门写这篇文章供初读者参考阅读。本文的最后,着重讨论了Windows线程API与c/c++运行时库的注意事项。由于本人水平有限,文章难免有纰漏,还望各位读者指正。 Windows提供的创…