Тензорный поток: каждая строка в наборе данных обучения содержит 99% данных предыдущих строк - могу ли я оптимизировать ее перед запуском тренировки? - PullRequest
0 голосов
/ 07 октября 2018

Я ищу способ уменьшить размер моих данных об обучении и тестировании по размеру файла.

Модель, с которой я хочу получить

Я хочуобучить модель, которая предсказывает, делает ли крипто-монета цену или нет, и скачок х% (0,4 или около того) в течение следующих 10 минут (т. е. я хочу, чтобы модель ответила Да или Нет).

Каждую минуту я получу модель с данными о ценах и объеме за последние 3 часа (это означает 180 точек данных, каждый из которых содержит 5 значений открытия, закрытия, максимума, минимума цены и объема).

Мои текущие наборы для обучения и тестирования являются БОЛЬШИМИ

Поэтому мои наборы для обучения и тестирования представляют собой строку в файле CSV, где каждая строка содержит 5 x 180 = 900 номеров плюс один ярлык (Да или Нет) ис примерно 100 тыс. строк, я думаю, это очень большой набор данных.

Но каждая строка в CSV содержит в основном избыточные данные

Но каждая "соседняя" строка в файле CSVсодержит только 1 новую точку данных, поскольку каждая следующая строка «старше» только на 1 минуту и, следовательно, пропустила только точку данных самой старой минуты и вместо нее ввела новую точку следующей минуты.

Is itможно настроить код отслеживания, чтобы в файле csv требовалось указывать только самые последние минуты данных в каждой строке?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Да, вы можете настроить это так, чтобы файл CSV должен был содержать только самую последнюю минуту данных в каждой строке.

Если ваш файл CSV содержит одну точку данных на строку, вы можете создать скользящее окноПакеты выполняются следующим образом:

В TF 1.12 и далее:

window_size = 180
dataset = tf.data.experimental.CsvDataset(filenames, defaults)
dataset = dataset.window(window_size=window_size, shift=1)
dataset = dataset.flat_map(lambda x: x.batch(window_size))

Например, если у вас был набор данных, содержащий элементы {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

# Contains {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
dataset = ...

dataset = dataset.window(window_size=3, shift=1)
dataset = dataset.flat_map(lambda x: x.batch(3))
it = dataset.make_one_shot_iterator()
nxt = it.get_next()
with tf.Session() as sess:
  sess.run(nxt)  # [1, 2, 3]
  sess.run(nxt)  # [2, 3, 4]
  sess.run(nxt)  # [3, 4, 5]
  ...etc...

В TF1.11 и ранее:

window_size = 180
dataset = tf.contrib.data.CsvDataset(filenames, defaults)
dataset = dataset.apply(tf.contrib.data.sliding_window_batch(window_size=window_size))
0 голосов
/ 15 октября 2018

Если вы используете Data API, вы можете кэшировать ввод.Также, возможно, здесь поможет TF для Kafka, так как вы можете смоделировать ее как поток данных.

Другой подход заключается в повторном использовании некоторых данных между вызовами сеанса.Тогда вам придется использовать переменную ресурса (в текущей спецификации Variable() это означает использование флага use_resource в конструкторе).Таким образом, ваш CSV-файл может содержать только данные минутного уровня, и вы просто добавите его в переменную - создайте из него своего рода кольцевой буфер.

...