如何分割数据集并馈送到input_fn



我已经成功地在input_fn()中使用make_csv_dataset读取了两个csv文件,并将其传递给tf.estimator

我首先将主csv分成两个单独的帧,一个用于训练,一个用于测试,然后将它们保存为新的csv文件。

train, test = train_test_split(df, test_size = 0.2)
train_csv_path = 'data/2020_train.csv.gz'
test_csv_path = 'data/2020_test.csv.gz'
train.to_csv(train_csv_path, compression = 'gzip')
test.to_csv(test_csv_path, compression = 'gzip')
def make_input_fn(csv_path, n_epochs = None):
def input_fn():
dataset = tf.data.experimental.make_csv_dataset(csv_path,
batch_size = 1000,
label_name = 'Shipped On SSD',
compression_type = 'GZIP',
num_epochs = n_epochs)
return dataset
return input_fn
train_input_fn = make_input_fn(train_csv_path)
test_input_fn = make_input_fn(test_csv_path, n_epochs = 1)

但是,我只想使用一个文件并对数据集进行分割。

我可以成功地分割数据集(像这样),但问题发生时,将其传递给tf.estimator。我不知道如何使用在input_fn()之外定义的数据集,或者如何在input_fn()内进行拆分。

dataset = tf.data.experimental.make_csv_dataset(full_csv_path,
batch_size = 1000,
label_name = 'Shipped On SSD',
compression_type = 'GZIP')
split = 4
split_fn = lambda *ds: ds[0] if len(ds) == 1 else tf.data.Dataset.zip(ds)
dataset_train = dataset.window(split, split + 1).flat_map(split_fn)
dataset_test = dataset.skip(split).window(1, split + 1).flat_map(split_fn)

您可以将数据集创建封装在函数中。不幸的是,该函数将读取csv两次,每个集合读取一次。

def make_input_fn_from_ds(ds, training=True):
def input_fn():
dataset = tf.data.experimental.make_csv_dataset(full_csv_path,
batch_size = 1000,
label_name = 'Shipped On SSD',
compression_type = 'GZIP')
split = 4
split_fn = lambda *ds: ds[0] if len(ds) == 1 else   tf.data.Dataset.zip(ds)
if training:
return dataset_train = dataset.window(split, split + 1).flat_map(split_fn)
return dataset_test = dataset.skip(split).window(1, split + 1).flat_map(split_fn)
return input_fn
train_input_fn = make_input_fn_from_ds(dataset_train, training=True)
test_input_fn = make_input_fn_from_ds(dataset_train, training=False)

相关内容

  • 没有找到相关文章

最新更新