【问题标题】:How to load pickle files by tensorflow's tf.data API如何通过 tensorflow 的 tf.data API 加载泡菜文件
【发布时间】:2018-06-15 06:22:22
【问题描述】:

我的数据存储在磁盘上的多个泡菜文件中。我想使用 tensorflow 的 tf.data.Dataset 将我的数据加载到训练管道中。我的代码是:

def _parse_file(path):
    image, label = *load pickle file*
    return image, label
paths = glob.glob('*.pkl')
print(len(paths))
dataset = tf.data.Dataset.from_tensor_slices(paths)
dataset = dataset.map(_parse_file)
iterator = dataset.make_one_shot_iterator()

问题是我不知道如何实现_parse_file 功能。此函数的参数path 是张量类型。我试过了

def _parse_file(path):
    with tf.Session() as s:
        p = s.run(path)
        image, label = pickle.load(open(p, 'rb'))
    return image, label

并收到错误消息:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'arg0' with dtype string
     [[Node: arg0 = Placeholder[dtype=DT_STRING, shape=<unknown>, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

在互联网上搜索了一些之后,我仍然不知道该怎么做。我会感谢任何给我提示的人。

【问题讨论】:

  • 为什么要将路径传递给会话,只需加载图像并通过会话循环它们
  • @Eliethesaiyan 因为从数据集中检索到的path 是张量类型,不能直接用作字符串

标签: tensorflow pickle


【解决方案1】:

我自己解决了这个问题。我应该像 doc 一样使用 tf.py_func

【讨论】:

【解决方案2】:

tf.py_func 此功能用于解决该问题,也可作为文档中的说明。

【讨论】:

  • 请添加详细信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2016-03-14
  • 2014-12-11
相关资源
最近更新 更多