【问题标题】:How can I access the filenames gathered by tf.data.Dataset.list_files()?如何访问 tf.data.Dataset.list_files() 收集的文件名?
【发布时间】:2018-12-12 05:39:18
【问题描述】:

我正在使用

file_data = tf.data.Dataset.list_files("../*.png")

收集图像文件以在 TensorFlow 中进行训练,但想访问收集的文件名列表,以便执行标签查找。

调用 sess.run([file_data]) 不成功:

TypeError: Fetch argument <TensorSliceDataset shapes: (), types: tf.string> has invalid type <class 'tensorflow.python.data.ops.dataset_ops.TensorSliceDataset'>, must be a string or Tensor. (Can not convert a TensorSliceDataset into a Tensor or Operation.)

我还有其他方法可以使用吗?

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:

    Dataset.list_files() API 使用tf.matching_files() 操作列出与给定模式匹配的文件。您还可以使用该操作以tf.Tensor 的形式获取文件列表,并将其直接传递给sess.run():

    filenames_as_tensor = tf.matching_files("../*.png")
    filenames_as_array = sess.run(filenames_as_tensor)
    
    for filename in filenames_as_array:
      print(filename)
    

    【讨论】:

      【解决方案2】:

      通过一些额外的实验,我找到了解决这个问题的方法:

      首先,把Dataset变成一个迭代器:

      iterator_helper = file_data.make_one_shot_iterator()
      

      然后,遍历一个 tf Session 中的元素:

      with tf.Session() as sess:
          filename_temp = iterator_helper.get_next()
          print(sess.run[filename_temp])
      

      【讨论】:

        猜你喜欢
        • 2011-11-24
        • 2019-12-27
        • 1970-01-01
        • 2021-03-11
        • 2016-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-14
        相关资源
        最近更新 更多