【问题标题】:How can I modifya sequencial data using map or filter or reduce method for tf.data.Dataset objects?如何使用 tf.data.Dataset 对象的 map 或 filter 或 reduce 方法修改顺序数据?
【发布时间】:2020-11-17 06:29:16
【问题描述】:

我有一个 python 数据生成器-

import numpy as np
import tensorflow as tf

vocab_size = 5
def create_generator():
    'generates sequences of varying lengths(5 to 7) with random number from 0 to voca_size-1'
    count = 0
    while count < 5:
        sequence_len = np.random.randint(5, 8) # length varies from 5 to 7
        seq = np.random.randint(0, vocab_size, (sequence_len))
        yield seq
        count +=1

gen = tf.data.Dataset.from_generator(create_generator, 
                             args=[], 
                             output_types=tf.int32, 
                             output_shapes = (None, ), )

for g in gen:
    print(g)

它生成具有从 0 到 4 的整数值的不同长度(5 到 8)的序列。 以下是生成器生成的一些序列-

tf.Tensor([4 0 0 1 4 1], shape=(7,), dtype=int32) # 1st sequence
tf.Tensor([3 4 4 4 0], shape=(5,), dtype=int32)   # 2nd sequence
tf.Tensor([4 4 2 1 4 3], shape=(5,), dtype=int32) # 3rd sequence
tf.Tensor([1 0 2 4 0], shape=(7,), dtype=int32)   # 4th sequence
tf.Tensor([1 4 0 2 2], shape=(6,), dtype=int32)   # 5th sequence

现在我想以这样的方式修改序列-

  • 从每个序列中删除所有偶数
  • 长度

这应该给我们一个看起来像这样的结果-

[1 1] # 1st sequence
[1 3] # 3rd sequence

如何使用 tf.data.Dataset 方法进行此类转换?

【问题讨论】:

    标签: python tensorflow tensorflow2.0 tensorflow-datasets tf.data.dataset


    【解决方案1】:

    您的for 循环应如下所示:

    new_gen = []
    for g in gen:
        arr = np.array(g) % 2 != 0: 
        if len(list(arr)) >= 2:
            new_gen.append(arr)
    
    print(new_gen)
    

    【讨论】:

    • 我想使用 tf.data.Dataset 方法这样做,以便在使用数据并行性在 multi_GPU 机器上训练模型时能够优化输入管道。我的数据输入管道是瓶颈,我正在尝试对其进行优化。这就是为什么我希望使用 tf.data.Dataset 方法来完成它,因为它们支持数据并行性。
    猜你喜欢
    • 2021-02-28
    • 2017-08-23
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多