Удалите значения NaN и пустые строки из tf.data.Dataset (TFX, TF 2.0, предварительная обработка) - PullRequest
0 голосов
/ 06 января 2020

У меня сейчас есть 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

  1. Я ищу решение, которое использует только функции TF, а не pd.DataFrame или np.numpy. Во-первых, это даже уместно, или я все еще должен использовать Numpy и Pandas?

  2. Я изучил лучи tf.data и TFX +, и не могу показаться найти правильное решение. Я что-то пропустил или неправильно понял дух этих библиотек?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...