【TF】如何理解和使用dataset.interleave()

解析tf.data.Dataset.interleave()的用法

dataset = tf.data.Dataset.range(1, 6)  # ==> [ 1, 2, 3, 4, 5 ]
print(list(dataset.as_numpy_iterator()))
dataset = dataset.interleave(
    map_func=lambda x: tf.data.Dataset.from_tensors(x).repeat(3),
    cycle_length=4,
    block_length=2,
)
print(list(dataset.as_numpy_iterator()))
"""
    输入:[1, 2, 3, 4, 5]
    # 每次取block_length个元素
    [1, 1,
     2, 2,
     3, 3,
     4, 4,
     1, 2,
     3, 4,
     5, 5,
     5,
    ]
    # 具体逻辑如下:
    1. 先从原始dataset取出cycle_length个元素 
    >> [1, 2, 3,4]  # 第一次取
    >> [5]  # 第二次取
    2. 然后对cycle_length个元素运用map_func,即取出的这cycle_length元素分别重复repeat次,构成新的dataset
    >> [[1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4]] # 构成的新dataset-1
    >> [[5, 5, 5]]  # 构成的新dataset-2
    3. 从新的dataset上轮流取出block_length个元素
    >> [[1, 1], [2, 2], [3, 3], [4, 4]] # 新dataset-1
    >> [[1], [2], [3], [4]] # 新dataset-1
    >> [[5, 5]] # 新dataset-2
    >> [[5]] # 新dataset-2
    4. 当新的dataset中的元素取完后,再从原始dataset取出cycle_length个元素,即重复第一步
    >> [1, 1, 2, 2, 3, 3, 4, 4] # # 新dataset-1
    >> [1, 2, 3, 4] # # 新dataset-1
    >> [5, 5] # # 新dataset-2
    >> [5] # # 新dataset-2
    输出:[1, 1, 2, 2, 3, 3, 4, 4, 1, 2, 3, 4, 5, 5, 5]
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值