python - 拆分和重组 TensorFlow 数据集
问题描述
我目前有一个Dataset
带有多个批次的张量流(批次数是可变的,但可以被 4 整除)。我想取出每 4 批用作测试,其余的用作训练,但我还没有遇到一个优雅的解决方案。所需结果的简化视觉示例:
Dataset = [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12]
train = [b1,b2,b3,b5,b6,b7,b9,b10,b11]
test = [b4,b8,b12]
大多数关于Dataset
s 的 train-validation-test 拆分的解决方案都使用 和 的组合Dataset.take()
,Dataset.skip()
因为他们不介意将数据拆分到中间的某个位置。然而,如果我要使用这个解决方案,它需要我计算数据集的大小,用多个take()
s 和skip()
s 在它上面运行一个丑陋的循环,然后收集结果并将它们连接到一个新的Dataset
. 没有更好的方法来选择张量流数据集中的批次间隔吗?
解决方案
该解决方案可以通过组合enumerate()
、filter()
和来实现map()
,类似于此处提供的答案。
玩具示例:
list(
Dataset.from_tensor_slices(np.arange(12))
.batch(2)
.as_numpy_iterator()
)
输出:
[array([0, 1]),
array([2, 3]),
array([4, 5]),
array([6, 7]),
array([8, 9]),
array([10, 11])]
玩具示例的解决方案:
list(
Dataset.from_tensor_slices(np.arange(12))
.batch(2)
#solution starts here
.enumerate()
.filter(lambda i, data: (i+1)%4 !=0)
.map(lambda i,data: data)
#solution ends here
.as_numpy_iterator()
)
出去:
[array([0, 1]),
array([2, 3]),
array([4, 5]),
array([8, 9]),
array([10, 11])]
推荐阅读
- javascript - Lodash:有没有办法用 lodash 将单词保持重音大写?
- sql - 在 cakephp 3 查询中将 where 子句添加到计算字段
- bash - 默认情况下如何在git中设置全局可执行的bash文件?
- c# - 如何“覆盖”AccountController 的 Index()?
- android - 删除 .cahcedIn(viewModelScope) 的 Android 分页 3 库将引发异常
- vue.js - dotnet api 和 vue 客户端检测关闭浏览器/选项卡
- php - 获取 woocommerce 购物车数量总和
- java - 根据条件将值放入不同的哈希图中
- c# - 在 C# 中使用“队列”发送短信
- php - Magento2 不为客户保存自定义属性