如何将tensorflow.data.Dataset.flat_map(my_func)与多个参数一起使用?

时间:2020-10-17 13:15:43

标签: tensorflow tensorflow2.0

我将此代码作为开窗功能的一部分:

    dataset = tf.data.Dataset.from_tensor_slices(series)
    dataset = dataset.window(size=window_size, shift=1, drop_remainder=True)
    dataset = dataset.flat_map(lambda window: window.batch(window_size))

但是,在TF认证考试中,我不能使用 lambda !因此,我需要删除 lambda 部分。我尝试使用类似这样的功能:

def window_to_tensor(window_ds: tf.data.Dataset, window_size: int):
    return window_ds.batch(window_size)

dataset = dataset.flat_map(window_to_tensor ,window_size)

但是我得到一个错误:

TypeError:flat_map()接受2个位置参数,但给出了3个

即使我尝试使用如下所示的两个功能,也会出现类似的错误:

dataset = dataset.apply(window_to_tensor,window_size)
dataset = tf.keras.backend.flatten(dataset)

我该如何映射一个函数,然后在不使用flat_map的情况下(或在不使用lambda的情况下使用)将其数据集展平? (我必须使用TF2.0.0)

1 个答案:

答案 0 :(得分:1)

可以使用lambda。仅禁止 layers 层:

enter image description here

您可以自己阅读instructions

因此,您可以像这样处理窗口化数据集:

import tensorflow as tf
import numpy as np

window_size = 5

dataset = tf.data.Dataset.from_tensor_slices(np.random.rand(100))
dataset = dataset.window(window_size, shift=1, drop_remainder=True)
dataset = dataset.flat_map(lambda window: window.batch(5))
dataset = dataset.map(lambda window: (window[:-1], window[-1:])).batch(4)

next(iter(dataset))
(<tf.Tensor: shape=(4, 4), dtype=float64, numpy=
 array([[0.82421497, 0.02775336, 0.51822687, 0.99682813],
        [0.02775336, 0.51822687, 0.99682813, 0.25681553],
        [0.51822687, 0.99682813, 0.25681553, 0.80613281],
        [0.99682813, 0.25681553, 0.80613281, 0.01170842]])>,
 <tf.Tensor: shape=(4, 1), dtype=float64, numpy=
 array([[0.25681553],
        [0.80613281],
        [0.01170842],
        [0.01685387]])>)
相关问题