博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TensorFlow中数据读取—如何载入样本
阅读量:4701 次
发布时间:2019-06-09

本文共 2084 字,大约阅读时间需要 6 分钟。

  考虑到要是自己去做一个项目,那么第一步是如何把数据导入到代码中,何种形式呢?是否需要做预处理?官网中给的实例mnist,数据导入都是写好的模块,那么自己的数据呢?

  一、从文件中读取数据(CSV文件、二进制文件、图片或其他格式)

  读取文件,都需要一个阅读器reader和一个转换解码操作decode,不同格式的文件对应不同的接口API。

  1)CSV文件:用的文件读取器和解码器是 TextLineReader 和 decode_csv 。 下面代码来自TensorFlow官网,加了注释。

filename_queue = tf.train.string_input_producer(["file0.csv", "file1.csv"])#["file0.csv", "file1.csv"]是文件名列表,tf.train.string_input_producer()用来生成文件名队列,有参数shuffle=True可执行乱序,num_epochs=None可设置文件名字符串的生成次数 #对于输入管道,输出文件名字符串到队列中
reader = tf.TextLineReader()#阅读器,个人感觉功能同Python的open()。key, value = reader.read(filename_queue)#参数是文件名队列,返回一个tuple,key和value,每次返回阅读器的下一条记录(一行)。# Default values, in case of empty columns. Also specifies the type of the# decoded result.record_defaults = [[1], [1], [1], [1], [1]] #定义解析的格式col1, col2, col3, col4, col5 = tf.decode_csv(    value, record_defaults=record_defaults)#将CSV解析为tensor,每列映射为一个tensor,返回一个tensor列表。features = tf.concat(0, [col1, col2, col3, col4])#0代表按行合并。参数1是在哪个维度合并,参数2是待合并的值。with tf.Session() as sess:  # Start populating the filename queue.  coord = tf.train.Coordinator()  #创建一个线程协调器  threads = tf.train.start_queue_runners(coord=coord)  #启动Graph中所有队列的线程  for i in range(1200):    # Retrieve a single instance:    example, label = sess.run([features, col5])    #运行,获取样本和标签  coord.request_stop()  #请求停止所有线程  coord.join(threads)  #等待线程结束

  2)二进制文件:用的文件读取器和解码器是  tf.FixedLengthRecordReader 和 tf.decode_raw ,读取固定长度的文件。

  decode_raw操作可以将一个字符串转换为一个uint8的张量。

  3)标准TensorFlow格式:

  可以将任意的数据转换为TensorFlow所支持的格式, 这种方法可以使TensorFlow的数据集更容易与网络应用架构相匹配。方法就是使用TFRecords文件。

  写入数据后,通过修改 tf.train.Example 的Features,将 protocol buffer 序列化为一个字符串,再通过 tf.python_io.TFRecordWriter 将序列化的字符串写入 TFRecords文件中。使用tf.TFRecordReader和tf.parse_single_example解析器,可以从TFRecords文件中读取数据。这个parse_single_example操作可以将 protocol buffer 解析为张量。

  

  二、供给数据feed_dict参数

  定义了operation之后,使用sess.run()或tensor.eval()或op.run()时,通过参数feed_dict传递数据,该参数是和placeholder配套使用的。先声明一个占位符,比如x,y。然后在op中使用了x,y进行计算,等到op.run()时,op.run(feed_dict={x:x_batch,y:y_batch})即可。前提是x_batch和y_batch已知,已有数据。

转载于:https://www.cnblogs.com/xiaoxiong-kankan/p/7610934.html

你可能感兴趣的文章
wordpress 开源博客系统部署
查看>>
MySQL Community Server 5.6和MySQL Installer 5.6
查看>>
hdu5282 最长公共子序列的变形
查看>>
SQL分页查询总结{转}
查看>>
迭代加深搜索 POJ 1129 Channel Allocation
查看>>
.Net调用Java带验证的WebService解决方法
查看>>
手机web下滑加载
查看>>
LeetCode 20. 有效的括号
查看>>
TCP 接收窗口自动调节
查看>>
JavaScript Patterns 3.7 Primitive Wrappers
查看>>
一个打砖块的小游戏1.0 KILL THE BLOCKS !
查看>>
学习、发现和创造-一切皆有规律
查看>>
107.为什么要使用数据库之文件增删查改直接操作
查看>>
深度学习笔记 (一) 卷积神经网络基础 (Foundation of Convolutional Neural Networks)
查看>>
python三个自带装饰器的功能与使用(@property、@staticmethod、@classmethod)
查看>>
三分法——求解凸性函数的极值问题
查看>>
HTML&CSS构建和设计网站
查看>>
快速排序+分治法
查看>>
HTML5开发之meta标签的viewport使用说明
查看>>
RF 中一条用例执行失败,终止其他用例执行
查看>>