python - 如何使用 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)
解决方案
您可以使用 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]])>)
推荐阅读
- sql - 为什么 SQLite CTE JOIN 中的 RANDOM() 行为与其他 RDBMS 不同?
- kubernetes - 在实现 HA Kubernetes 集群时将 master1 和 master2 添加到负载均衡器
- collections - 如何在集合聚合器中一次聚合 10 条记录?我想用集合拆分器拆分 100 条记录
- java - 将物品添加到库存混乱中
- google-chrome - 允许 Chrome 上的 Google Colab 域 cookie
- javascript - 从 ESLint 应用自动修复是否安全?
- r - 使用 IF 语句进行条件舍入
- react-native - 如何导出包含黑色矩形的图像(png)
- django - 由于 RDS InvalidParameterCombination,Elastic Beanstalk (Django) 部署失败
- r - 如何按 R 中的组/因子计算 NA 值的长度?