Как перенести код, использующий TimeseriesGenerator, в API набора данных? - PullRequest
0 голосов
/ 18 февраля 2020

При использовании Tensorflow 1.x у нас было следующее:

X_train, Y_train = get_data('train')
gen = TimeseriesGenerator(X, Y, spec_w, batch_size=batch_size)
model.fit(gen, ...)

X имеет форму (n_examples, n_bins) np.float32, а Y имеет форму (n_examples, n_predictions) np.bool

Я преобразовал наш набор в TFrecord с примерами. Особенности в каждом примере: (X [n], Y [n]):

{
  'bins': tf.io.FixedLenFeature([n_bins], tf.float32),
  'predictions': tf.io.FixedLenFeature([n_predictions], tf.int64),
}

Я пробую подход window / flat_map, но не могу получить набор данных результата в правильной форме, поскольку только входной вектор должен иметь форму (?, spec_w, n_bins), тогда как вектор предсказания должен иметь форму (?, n_predictions). Мне как-то нужно разделить набор данных на входные данные и прогнозы, окно и flat_map на входные данные, а затем почтовый индекс с прогнозами.

Это мой текущий (неправильный) код:

    ds = tf.data.TFRecordDataset(kind + '.tfrecord')
    ds = ds.batch(batch_size)
    ds = ds.map(_parse_batch)
    ds = ds.window(spec_w, 1).flat_map(
        lambda *x: tf.data.Dataset.zip(tuple(col.batch(spec_w)
                                             for col in x)))
    ds = ds.prefetch(tf.data.experimental.AUTOTUNE)

Этот вопрос обсуждается похожая проблема: Скользящее окно пакета в Tensorflow с использованием API набора данных

...