tensorflow2.0 学习笔记-make_csv_datasets

这篇博客介绍了如何利用TensorFlow 2.0中的`tf.data.experimental.make_csv_dataset`函数从CSV文件创建数据集。该函数能将CSV文件转换成适合训练模型的批次数据,支持指定列名、默认值、标签列以及各种参数来自定义数据处理流程。
摘要由CSDN通过智能技术生成

make_csv_datasets

**官方:
**https://tensorflow.google.cn/api_docs/python/tf/data/experimental/make_csv_dataset?hl=en

将CSV文件读入数据集,其中每个元素都是一个(功能,标签)元组,对应于一批CSV行。功能字典将功能列名称映射到Tensor包含相应功能数据的,标签是Tensor包含批次标签数据的。

tf.data.experimental.make_csv_dataset(

	    file_pattern, batch_size, 
	    column_names=None, 	
	    column_defaults=None,
	    label_name=None, 
	    select_columns=None, 
	    field_delim=',', 
	    use_quote_delim=True,
	    na_value='', 
	    header=True, 
	    num_epochs=None, 
	    shuffle=True,
	    shuffle_buffer_size=10000, 
	    shuffle_seed=None, 
	    prefetch_buffer_size=None,
	    num_parallel_reads=None, 
	    sloppy=False, 
	    num_rows_for_inference=100,
	    compression_type=None, 
	    ignore_errors=False

)

参数:

file_pattern:包含CSV记录的文件列表或文件路径模式。有关tf.io.gfile.glob模式规则,请参见。

***batch_size:***一个int,表示要在单个批次中合并的记录数。

column_names:按顺序对应于CSV列的可选字符串列表。输入记录的每一列一个。如果未提供,则从记录的第一行推断列名。这些名称将成为每个数据集元素的特征字典的键。

column_defaults:CSV字段的默认值的可选列表。输入记录的每个选定列中有一项。列表中的每个项目要么是有效的CSV dtype(float32,float64,int32,int64或字符串),要么是 Tensor带有上述类型之一。张量可以是标量默认值(如果该列是可选的),也可以是空张量(如果该列是必需的)。如果提供了dtype而不是张量,则也将根据需要处理该列。如果未提供此列表,则尝试基于读取指定文件的前num_rows_for_inference行来推断类型,并假定所有列都是可选的,默认0 为数字值和""字符串值。如果同时select_columns指定了和 ,则它们必须具有相同的长度,并且 column_defaults 假定按升序的列索引排序。

label_name:对应于标签列的可选字符串。如果提供了此列的数据,则将其与Tensor要素字典分开返回,以便数据集符合tf.Estimator.train或tf.Estimator.evaluate输入函数期望的格式。

***select_columns:***整数索引或字符串列名称的可选列表,用于指定要选择的CSV数据列的子集。如果提供了列名称,则这些名称必须对应于column_names文件标题行中提供的名称或从文件标题行推断出的名称 。指定此参数后,将仅解析和返回CSV列的子集,对应于指定的列。使用此方法可以加快解析速度并降低内存使用量。如果同时column_defaults指定了和,则它们必须具有相同的长度,并column_defaults假定按列索引的增加顺序进行排序。

field_delim:可选string。默认为","。字符分隔符,用于分隔记录中的字段。

use_quote_delim:可选的布尔值。默认为True。如果为false,则将双引号视为字符串字段内的常规字符。

***na_value:***附加字符串,识别为NA / NaN。

header:布尔值,指示提供的CSV文件的第一行是否对应于具有列名称的标题行,因此不应该包含在数据中。

***num_epochs:***一个整数,指定重复此数据集的次数。如果为“无”,则永远循环浏览数据集。

shuffle:一个布尔值,指示是否应将输入随机播放。

shuffle_buffer_size:用于改组的缓冲区大小。较大的缓冲区大小可确保更好的改组,但会增加内存使用量和启动时间。

shuffle_seed:随机种子用于改组。

prefetch_buffer_size:一个整数,指定要预取以提高性能的功能批次的数量。推荐值是每个训练步骤消耗的批次数。默认为自动调整。

num_parallel_reads:用于从文件读取CSV记录的线程数。如果> 1,结果将被交错。默认为1。

sloppy:如果为True,则阅读性能将得到改善,但不确定的顺序会有所增加。如果是False,则在重排之前产生的元素顺序是确定的(如果,元素仍然是随机的shuffle=True。请注意,如果设置了种子,则在重排之后元素的顺序是确定性的)。默认为False。

num_rows_for_inference:如果未提供record_defaults,则用于类型推断的文件的行数。如果为None,则读取所有文件的所有行。默认为100。

compression_type:(可选。)tf.string标量值为 “”(不压缩)“ZLIB"或之一"GZIP”。默认为无压缩。

ignore_errors:(可选。)如果为True,则忽略CSV文件解析错误(例如,格式错误的数据或空行),然后移至下一个有效的CSV记录。否则,数据集会在遇到任何无效记录时引发错误并停止处理。默认为False。

返回值:
一个数据集,其中每个元素都是一个(特征,标签)元组,对应于一批batch_sizeCSV行。功能字典将功能列名称映射到Tensors,其中包含对应的列数据,而labels是,其中Tensor包含由指定的标签列的列数据label_name。

示例1:
常规用法,csv第一行为列名。

import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds

TRAIN_DATA_URL = "https://storage.googleapis.com/tf-datasets/titanic/train.csv"
TEST_DATA_URL = "https://storage.googleapis.com/tf-datasets/titanic/eval.csv"

train_file_path = tf.keras.utils.get_file("train.csv", TRAIN_DATA_URL)
test_file_path = tf.keras.utils.get_file("eval.csv", TEST_DATA_URL)
train_file_path

#利用make_csv_datasets导入数据
"""
正如你看到的那样,CSV 文件的每列都会有一个列名。dataset 的构造函数会自动识别这些列名。如果你使用的文件的第一行不包含列名,
那么需要将列名通过字符串列表传给 make_csv_dataset 函数的 column_names 参数。
"""
"""
CSV_COLUMNS = ['survived', 'sex', 'age', 'n_siblings_spouses', 'parch', 'fare', 'class', 'deck', 'embark_town', 'alone']

dataset = tf.data.experimental.make_csv_dataset(
     ...,
     column_names=CSV_COLUMNS,
     ...)
"""
"""
如果你需要忽略数据集中的某些列,创建一个包含你需要使用的列的列表,然后传给构造器的(可选)参数 select_columns。

dataset = tf.data.experimental.make_csv_dataset(
  ...,
  select_columns = columns_to_use, 
  ...)

"""
#对于包含模型需要预测的值的列是你需要显式指定的。将label列指定出来

LABEL_COLUMN = 'survived'
LABELS = [0, 1]

def get_dataset(file_path):
    
    dataset = tf.data.experimental.make_csv_dataset(
              file_path,
              batch_size=12, # 为了示例更容易展示,手动设置较小的值
              label_name=LABEL_COLUMN,
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值