【问题标题】:TensorFlow: Example implementation of a simple custom transformation_func for Dataset's apply methodTensorFlow:Dataset 的 apply 方法的简单自定义 transformation_func 的示例实现
【发布时间】:2019-01-04 10:26:59
【问题描述】:

我正在尝试为 Dataset API 中的 apply 方法实现一个简单的自定义 transformation_func,但没有发现文档特别有用。

具体来说,我的dataset 包含视频帧和对应的标签:{[frame_0, label_0], [frame_1, label_1], [frame_2, label_2],...}

我想对其进行转换,使其另外包含每个标签的前一帧:{[frame_0, frame_1, label_1], [frame_1, frame_2, label_2], [frame_2, frame_3, label_3],...}

这可能可以通过执行tf.data.Dataset.zip(dataset, dataset.skip(1)) 之类的操作来实现,但那样我就会有重复的标签。

我找不到transformation_func 的参考实现。有人可以让我开始吗?

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:

    apply 只是为了方便与现有的转换函数一起使用,ds.apply(func)func(ds) 几乎相同,只是以更“可链接”的方式。这是一种可能的方式来做你想做的事:

    import tensorflow as tf
    
    frames = tf.constant([  1,   2,   3,   4,   5,   6], dtype=tf.int32)
    labels = tf.constant(['a', 'b', 'c', 'd', 'e', 'f'], dtype=tf.string)
    # Create dataset
    ds = tf.data.Dataset.from_tensor_slices((frames, labels))
    # Zip it with itself but skipping the first one
    ds = tf.data.Dataset.zip((ds, ds.skip(1)))
    # Make desired output structure
    ds = ds.map(lambda fl1, fl2: (fl1[0], fl2[0], fl2[1]))
    # Iterate
    it = ds.make_one_shot_iterator()
    elem = it.get_next()
    # Test
    with tf.Session() as sess:
        while True:
            try: print(sess.run(elem))
            except tf.errors.OutOfRangeError: break
    

    输出:

    (1, 2, b'b')
    (2, 3, b'c')
    (3, 4, b'd')
    (4, 5, b'e')
    (5, 6, b'f')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2011-07-12
      相关资源
      最近更新 更多