详解TensorFlow2.0 API:tf.data.Dataset

tf.data.Dataset是TensorFlow中的一个类,用于创建和操作数据集。它提供了一种高效的方式来处理大量数据,支持并行读取、批处理、重复等操作。在使用tf.data.Dataset时,需要注意数据类型的兼容性。如果需要将字符串和数字混合在一起,可以使用tf.data.Dataset.from_generator或tf.data.Dataset.map方法将字符串转换为数字。在处理大型数据集时,需要注意内存占用。可以通过设置batch_size参数来控制每次处理的数据量,以降低内存占用。在使用tf.data.Dataset时,需要注意数据预处理的顺序。可以先进行数据清洗、归一化等操作,然后再进行其他转换操作。

1、常用方法

  • **from_tensor_slices:**从张量切片创建数据集。
  • **from_generator:**从生成器创建数据集。
  • **map:**对数据集中的每个元素应用一个函数。
  • **filter:**过滤掉不满足条件的数据集元素。
  • **batch:**将数据集分成批次。
  • **shuffle:**打乱数据集中的元素顺序。
  • **repeat:**重复数据集中的元素。
  • **prefetch:**预取数据集中的下一个元素,以便在训练过程中更快地访问。
  • **take:**从数据集中获取指定数量的元素。
  • **skip:**跳过数据集中指定数量的元素。
  • **shard:**将数据集分割成多个文件。
  • **interleave:**交错地从多个文件中读取数据。
  • **cache:**缓存数据集以加快读取速度。
  • **reduce:**对数据集中的多个元素进行归约操作。
  • **window:**创建一个滑动窗口数据集。
  • **flat_map:**将嵌套的数据集展平。
  • **enumerate:**为数据集中的每个元素添加索引。
  • **zip:**将多个数据集组合成一个数据集。
  • **concatenate:**将多个数据集连接成一个数据集。
  • **list_files:**列出给定目录下的所有文件。

2、示例1

使用tf.data.Dataset从CSV文件中读取数据并进行预处理

python 复制代码
import tensorflow as tf

# 定义解析CSV数据的函数
def parse_csv(line):
    columns = tf.io.decode_csv(line, record_defaults=[[""], [""], [""]])
    return {"feature1": columns[0], "feature2": columns[1], "label": columns[2]}

# 从CSV文件中读取数据
file_pattern = "path/csv/files/test.csv"
dataset = tf.data.Dataset.list_files(file_pattern)
dataset = dataset.flat_map(lambda file: tf.data.TextLineDataset(file).skip(1))
dataset = dataset.map(parse_csv)

# 对数据进行预处理
def preprocess(features):
    feature1 = tf.strings.to_number(features["feature1"], out_type=tf.float32)
    feature2 = tf.strings.to_number(features["feature2"], out_type=tf.float32)
    label = tf.strings.to_number(features["label"], out_type=tf.int32)
    return feature1, feature2, label

dataset = dataset.map(preprocess)

# 划分训练集和测试集
train_size = int(0.8 * len(dataset))
train_dataset = dataset.take(train_size)
test_dataset = dataset.skip(train_size)

# 对训练集进行批处理和打乱
train_dataset = train_dataset.shuffle(buffer_size=len(train_dataset)).batch(32)

# 对测试集进行批处理
test_dataset = test_dataset.batch(32)

在以上例子中,我们首先使用tf.data.Dataset.list_files从CSV文件中读取数据,然后使用flat_map将每行数据展平。接着,我们使用map函数定义了一个parse_csv函数来解析CSV数据,并将其转换为字典格式。最后,我们对数据进行了预处理、划分训练集和测试集以及批处理等操作 。

3、示例2

  • 分别使用from_tensor_slices、from_generator方法创建数据集
  • 使用map对数据集中的每个元素应用一个函数
  • 使用filter过滤掉不满足条件的数据集元素
  • 使用batch将数据集分成批次
  • 使用shuffle打乱数据集中的元素顺序
python 复制代码
import tensorflow as tf

# 使用from_tensor_slices创建数据集
data = tf.data.Dataset.from_tensor_slices([1, 2, 3, 4, 5])
print(list(data.as_numpy_iterator()))  # 输出:[1, 2, 3, 4, 5]

# 使用from_generator创建数据集
def generator():
    for i in range(10):
        yield i

data = tf.data.Dataset.from_generator(generator, output_types=tf.int32)
print(list(data.as_numpy_iterator()))  # 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 使用map对数据集中的每个元素应用一个函数
data = tf.data.Dataset.range(10)
data = data.map(lambda x: x * 2)
print(list(data.as_numpy_iterator()))  # 输出:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

# 使用filter过滤掉不满足条件的数据集元素
data = tf.data.Dataset.range(10)
data = data.filter(lambda x: x % 2 == 0)
print(list(data.as_numpy_iterator()))  # 输出:[0, 2, 4, 6, 8]

# 使用batch将数据集分成批次
data = tf.data.Dataset.range(10)
data = data.batch(3)
print(list(data.as_numpy_iterator()))  # 输出:[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]

# 使用shuffle打乱数据集中的元素顺序
data = tf.data.Dataset.range(10)
data = data.shuffle(buffer_size=5)
print(list(data.as_numpy_iterator()))  # 输出:随机顺序的[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(data.as_numpy_iterator()))  # 输出:随机顺序的[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

4、示例3

  • 使用tf.data.TextLineDataset从文件中读取数据
  • 使用tf.data.Dataset.list_files从目录中读取数据
  • 定义一个函数,用于将字符串转换为整数
  • 使用map方法对数据进行预处理
  • 使用batch将数据集分成批次,每批包含10个元素
  • 使用dataset.repeat对数据进行重复,重复3次
  • 使用dataset.prefetch对数据进行预取,预取大小为10000
python 复制代码
import tensorflow as tf

# 从文件中读取数据
dataset = tf.data.TextLineDataset("file.txt")


# 从目录中读取数据
dataset = tf.data.Dataset.list_files("directory/*.txt")



# 定义一个函数,用于将字符串转换为整数
def parse_function(example_proto):
    # 解析输入的序列化字符串
    features = {"x": tf.io.FixedLenFeature([], tf.string),
                "y": tf.io.FixedLenFeature([], tf.int64)}
    parsed_features = tf.io.parse_single_example(example_proto, features)
    # 将字符串转换为整数
    x = tf.io.decode_raw(parsed_features["x"], tf.uint8)
    y = tf.cast(parsed_features["y"], tf.int32)
    return x, y


# 使用map方法对数据进行预处理
dataset = dataset.map(parse_function)


# 对数据进行批处理,每批包含10个元素
dataset = dataset.batch(10)


# 对数据进行重复,重复3次
dataset = dataset.repeat(3)


# 对数据进行打乱
dataset = dataset.shuffle(buffer_size=10000)


# 对数据进行预取,预取大小为10000
dataset = dataset.prefetch(buffer_size=10000)
相关推荐
2501_938140074 小时前
做内容很省心,2026好用AI笔记,支持抖音小红书视频无水印保存
人工智能
sell-cloud7 小时前
Prompt Engineering要凉了?Fable 5.5能“猜“意图,但银行正在封杀AI Agent——企业AI的真正护城河是什么
人工智能·prompt
Navicat中国8 小时前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI8 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区9 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris10 小时前
郴州logo设计机构
大数据·人工智能·python
Goboy11 小时前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V11 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI11 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技11 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人