Как использовать окна, созданные методом Dataset.window () в TensorFlow 2.0? - PullRequest
3 голосов
/ 30 марта 2019

Я пытаюсь создать набор данных, который будет возвращать случайные окна из временного ряда вместе со следующим значением в качестве цели, используя TensorFlow 2.0.

Я использую Dataset.window(), что выглядит многообещающе:

import tensorflow as tf

dataset = tf.data.Dataset.from_tensor_slices(tf.range(10))
dataset = dataset.window(5, shift=1, drop_remainder=True)
for window in dataset:
    print([elem.numpy() for elem in window])

Выходы:

[0, 1, 2, 3, 4]
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]
[4, 5, 6, 7, 8]
[5, 6, 7, 8, 9]

Однако я хотел бы использовать последнее значение в качестве цели. Если бы каждое окно было тензорным, я бы использовал:

dataset = dataset.map(lambda window: (window[:-1], window[-1:]))

Однако, если я попробую это, я получу исключение:

TypeError: '_VariantDataset' object is not subscriptable

1 Ответ

3 голосов
/ 30 марта 2019

Решение состоит в том, чтобы позвонить flat_map() так:

dataset = dataset.flat_map(lambda window: window.batch(5))

Теперь каждый элемент в наборе данных является окном, поэтому вы можете разделить его следующим образом:

dataset = dataset.map(lambda window: (window[:-1], window[-1:]))

Итак, полный код:

import tensorflow as tf

dataset = tf.data.Dataset.from_tensor_slices(tf.range(10))
dataset = dataset.window(5, shift=1, drop_remainder=True)
dataset = dataset.flat_map(lambda window: window.batch(5))
dataset = dataset.map(lambda window: (window[:-1], window[-1:]))

for X, y in dataset:
    print("Input:", X.numpy(), "Target:", y.numpy())

Какие выходы:

Input: [0 1 2 3] Target: [4]
Input: [1 2 3 4] Target: [5]
Input: [2 3 4 5] Target: [6]
Input: [3 4 5 6] Target: [7]
Input: [4 5 6 7] Target: [8]
Input: [5 6 7 8] Target: [9]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...