python - 在不丢失基数信息的情况下对 TensorFlow 数据集进行窗口化?
问题描述
tf.data.Dataset.window
返回一个新数据集,其元素是数据集,而这些嵌套数据集的元素是所需大小的窗口。如果你有一个数据集(比如说,Dataset.range(10)
并且想要一个类似的窗口数据集[0 1 2] [1 2 3] ... [7 8 9]
),那么使用window
plus可以做到这一点flat_map
:
>>> d = tf.data.Dataset.range(10).window(3, shift=1, drop_remainder=True).flat_map(lambda x: x.batch(3))
>>> print(list(d))
[<tf.Tensor: shape=(3,), dtype=int64, numpy=array([0, 1, 2])>, <tf.Tensor: shape=(3,), dtype=int64, numpy=array([1, 2, 3])>, <tf.Tensor: shape=(3,), dtype=int64, numpy=array([2, 3, 4])>, <tf.Tensor: shape=(3,), dtype=int64, numpy=array([3, 4, 5])>, <tf.Tensor: shape=(3,), dtype=int64, numpy=array([4, 5, 6])>, <tf.Tensor: shape=(3,), dtype=int64, numpy=array([5, 6, 7])>, <tf.Tensor: shape=(3,), dtype=int64, numpy=array([6, 7, 8])>, <tf.Tensor: shape=(3,), dtype=int64, numpy=array([7, 8, 9])>]
但是,flat_map
导致数据集丢失基数信息的原因:
>>> d.cardinality.numpy()
<tf.Tensor: shape=(), dtype=int64, numpy=-2>
(-2 是UNKNOWN_CARDINALITY;请参阅Tensorflow 2.0:flat_map() 以展平数据集的数据集返回基数 -2)
我想创建此类窗口的数据集,同时保留基数信息。处理未知基数的数据集的一个小烦恼是,Keras 训练进度条需要先在一个 epoch 上运行,然后才能生成 ETA。我尝试.take(n_windows)
了自己计算的地方n_windows
,但仍然返回了一个带有UNKNOWN_CARDINALITY
.
有没有办法在不丢失基数信息的情况下对数据集进行窗口化?
解决方案
推荐阅读
- java - 如何理解 pdf 表单标志?
- eclipse - 如何删除 Eclipse JSP 文件中突出显示的行
- ios - 在 iOS 应用中获取所有选定的辅助功能选项
- c# - 从选定的文件路径获取光盘的卷标 c# winform
- eclipse - 如何在 Eclipse 4.x RCP 应用程序中以编程方式调用 Undo
- amazon-web-services - Flask 与 aws api 网关、lambda 和 dynamodb 集成
- python - 如何使用python regex从不同类型日期格式的文本中提取日期
- jvm - g1 是否收集年轻 gc 中的所有(伊甸园和幸存者)或部分垃圾?
- r - XGBoost 不使用 Windows 下可用的最大内核数?
- python-3.x - GTK3、SVG 和 Cairo 小部件获得 gtk-missing-image 图标覆盖