Tensorflow数据读取

TensorFlow程序读取数据一共有3种方法:

Preloaded data:预加载数据。
Feeding:利用python读取原始数据,将数据feed到图中。
Reading from file:从文件中直接读取。

方式一

预加载数据: 在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数据量比较小的情况)。

直接读取数据到内存, 形成tf自己类的dataset

适合小数据

方式二

供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据。

每次从硬盘存一个batch的数据到内存中,然后送入到占位符中,在图中进行计算。这种方式的优势在于训练过程只需要一个batch的内存

是最常用的方法

import tensorflow as tf

# 设计graph,用占位符代替
x = tf.placeholder(tf.int16)
y = tf.placeholder(tf.int16)
z = tf.add(x,y, name='z')

# 打开一个session
with tf.Session() as sess:
    # 创建数据
    xs = [1,2,3]
    ys = [2,3,4]
    # 运行session,用feed_dict来将创建的数据传递进占位符
    print(sess.run(z, feed_dict={x: xs, y: ys}))

但是这种方式也有很大缺陷,就是当数据规模较大的时候,也会出现数据传输的较大时间损耗,效率偏低。这里的传输只从python读入的数据传入到图中计算的数据,这之间存在一个数据转换的问题。

训练每个batch都需要停下GPU计算图的脚步去读取一个batch的数据

方式三

从文件读取数据: 在TensorFlow图的起始, 让一个输入管道从文件中读取数据。

TF提供一种双线程的方法,读取数据的线程不断将文件系统中的图片读入,另一个线程则是负责计算,计算需要的数据直接从内存中取即可。

三个接口:
tf.data.TFRecordDataset
tf.data.TextLineDataset
tf.contrib.data.CsvDataset

tensorflow TextLineDataset

tf.data.TextLineDataset 接口提供了一种方法从数据文件中读取。我们提供只需要提供文件名(1个或者多个)。这个接口会自动构造一个dataset,类中保存的元素:文中一行,就是一个元素,是string类型的tensor。

这篇讲的非常好:
https://zhuanlan.zhihu.com/p/40243876

参考链接

https://zhuanlan.zhihu.com/p/163656225

https://tensorflow.google.cn/api_docs/python/tf/data/TextLineDataset?hl=zh-CN

https://www.cnblogs.com/wj-1314/p/11211333.html

https://zhuanlan.zhihu.com/p/138099468

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值