首页 > 解决方案 > 如何使用 tensorflow.data.Dataset.flat_map(my_func) 与多个参数的功能?

问题描述

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

    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)

标签: pythontensorflowkerastensorflow2.0

解决方案


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

在此处输入图像描述

您可以自己阅读说明

所以你可以像这样做窗口数据集:

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]])>)

推荐阅读