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,