У меня сейчас есть data.tar.gz
, который я извлекаю с помощью библиотеки Python shutil. Затем я хотел бы:
- Хранить только файлы, которые
some_regex
в имени, заканчивающиеся на num
- Чтение и объединение всех файлов содержимого
- Сохранить только выбранный список столбцов
- Удалить пустые строки и строки со значениями
NaN
- Нормализация входов (функции + метка)
- Создать
tf.data.Dataset
- Разделить набор данных на
train/eval
В настоящее время у меня есть рабочий конвейер в Pandas + tf.data
, как показано ниже, но я считаю очень удобной идею сделать все предварительная обработка с помощью tf.Transform и pu sh операций на графике + все преимущества tfdv
, tfma
, поэтому я ищу способ использовать только TFX.
import numpy as np
import pandas as pd
import tensorflow as tf
from sklearn import preprocessing as pp
features = ['fh', 'gh', 'th', 'fl']
label = 'force_cmp'
def _make_training_input_fn(data_dir, num, features, label, batch_size, epochs):
def input_fn():
path = os.path.join(data_dir, '**', '*some_regex{}'.format(str(num)))
filtered_paths = tf.io.gfile.glob(path)
original_df = pd.concat(map(lambda path: pd.read_csv(path, sep=';'), filtered_paths))
print("Original dataset has {} rows.".format(len(original_df)))
df = original_df.copy()
df = df.dropna()
df = df[(df['force_np'] > .02) & (df['force_np'] < .96)]
print("Transformed dataset has {} rows.".format(len(df)))
df = pd.DataFrame(pp.MinMaxScaler().fit_transform(df.values), columns=list(df.columns))
print("Normalizing the inputs.")
data_split = .8
msk = np.random.rand(len(df)) < data_split
print("Using a mask of {}.".format(msk))
traindf = df[msk]
train_features = traindf[features]
train_labels = traindf[[label]]
trainds = tf.data.Dataset.from_tensor_slices((train_features.values, train_labels.values))
trainds = trainds.shuffle(len(train_features))
trainds = trainds.batch(batch_size)
trainds = trainds.repeat(epochs)
trainds = trainds.prefetch(tf.data.experimental.AUTOTUNE)
return trainds
return input_fn
Я ищу решение, которое использует только функции TF, а не pd.DataFrame
или np.numpy
. Во-первых, это даже уместно, или я все еще должен использовать Numpy и Pandas?
Я изучил лучи tf.data
и TFX +, и не могу показаться найти правильное решение. Я что-то пропустил или неправильно понял дух этих библиотек?