1、知识点

"""
注意:在tensorflow当中,运行操作具有依赖性 1、CPU操作计算与IO计算区别:
CPU操作:
1、tensorflow是一个正真的多线程,并行的执行任务
2、使用tfrecords对文件读取进行改善 IO操作:
1、一次性读取数据,消耗内存
2、一次性进行训练 2、队列API:
1、tf.FIFOQueue(capacity, dtypes, name='fifo_queue') 先进先出队列,按顺序出队列
capacity:整数。可能存储在此队列中的元素数量的上限
dtypes:DType对象列表。长度dtypes必须等于每个队列元素中的张量数,dtype的类型形状,决定了后面进队列元素形状
return:返回一个进队列操作
dequeue(name=None) #从队列获取一个数据
enqueue(vals, name=None) #将数据存放在队列
enqueue_many(vals, name=None):放入数据,其中vals列表或者元组 2、tf.RandomShuffleQueue 随机出队列 3、队列管理器:qr = tf.train.QueueRunner(Q,enqueue_ops=[en_q*2])
qr.create_threads(sess,start=True) #开启子线程 4、线程协调器:tf.train.Coordinator() ,线程协调员,实现一个简单的机制来协调一组线程的终止
返回对象方法:
request_stop()
should_stop() 检查是否要求停止
join(threads=None, stop_grace_period_secs=120) 等待线程终止
return:线程协调员实例 5、CSV文件读取步骤:
1、先找到文件,构造一个列表
file_name = os.listdir("./csvData/")
file_list = [os.path.join(file) for file in file_name]
2、构造文件列队 3、构造阅读器,读取队列内容(一行)
4、解码内容
5、批处理(多个样本) 6、文件读取API-文件队列构造:tf.train.string_input_producer(string_tensor,,shuffle=True) 将输出字符串(例如文件名)输入到管道队列
参数:
string_tensor 含有文件名的1阶张量
num_epochs:过几遍数据,默认无限过数据
return:具有输出字符串的队列 7、文件读取API-文件阅读器:根据文件格式,选择对应的文件阅读器
a) class tf.TextLineReader() 阅读文本文件逗号分隔值(CSV)格式,默认按行读取
return:读取器实例
b) tf.FixedLengthRecordReader(record_bytes)要读取每个记录是固定数量字节的二进制文件
record_bytes:整型,指定每次读取的字节数
return:读取器实例
c) tf.TFRecordReader 读取TfRecords文件
共同的读取方法:read(file_queue):从队列中指定数量内容 ,返回一个Tensors元组(key文件名字,value默认的内容(行,字节)) 8、文件读取API-文件内容解码器:由于从文件中读取的是字符串,需要函数去解析这些字符串到张量
a) tf.decode_csv(records,record_defaults=None,field_delim = None,name = None) 将CSV转换为张量,与tf.TextLineReader搭配使用
records:tensor型字符串,每个字符串是csv中的记录行
field_delim:默认分割符”,”
record_defaults:参数决定了所得张量的类型,并设置一个值在输入字符串中缺少使用默认值,如
b) tf.decode_raw(bytes,out_type,little_endian = None,name = None)
将字节转换为一个数字向量表示,字节为一字符串类型的张量,与函数tf.FixedLengthRecordReader搭配使用,二进制读取为uint8格式 9、开启线程操作
tf.train.start_queue_runners(sess=None,coord=None) 收集所有图中的队列线程,并启动线程
sess:所在的会话中
coord:线程协调器
return:返回所有线程队列 9、管道读端批处理:
a) tf.train.batch(tensors,batch_size,num_threads = 1,capacity = 32,name=None) 读取指定大小(个数)的张量
tensors:可以是包含张量的列表
batch_size:从队列中读取的批处理大小
num_threads:进入队列的线程数
capacity:整数,队列中元素的最大数量
return:tensors
b) tf.train.shuffle_batch(tensors,batch_size,capacity,min_after_dequeue,num_threads=1,) 乱序读取指定大小(个数)的张量
min_after_dequeue:留下队列里的张量个数,能够保持随机打乱 10、错误
OutOfRangeError (see above for traceback): FIFOQueue '_1_batch/fifo_queue' is closed and has insufficient elements (requested 9, current size 0)
解决方法:由于从上可知需要9个数据,但是读取为0,因此可能是数据有问题,即数据文件或者读取路径有问题
"""

2、代码

# coding = utf-8

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '' def readCSVFile(filelist):
"""
读取CSV文件
:param filelist: 文件路径+名字列表
:return: 读取的内容
"""
#1、构造文件队列
file_queue = tf.train.string_input_producer(file_list)
#2、构造CSV阅读器读取队列数据(读一行)
reader = tf.TextLineReader()
key , value = reader.read(file_queue) #3、对每行内容解码
#record_defaults:指定每一个样本的每一列的类型,指定默认值[["None"], [4.0]]
records =[["None"],["None"]]
example , label = tf.decode_csv(value,record_defaults=records)
#批处理大小跟队列、数据的数量没有影响,只决定这批次取多少数据batch_size ##############批处理####################
#读取多个数据,就需要使用批处理
example_batch,label_batch = tf.train.batch([example,label],batch_size=20,num_threads=1,capacity=90)
print(example_batch, label_batch)
return example_batch,label_batch
#return example,label ############队列################
def queue():
#1、首先定义数据
Q = tf.FIFOQueue(3,tf.float32) #2、放入数据
enq_many = Q.enqueue_many([[0.1,0.2,0.3],]) #定义一些数据处理的逻辑
out_q = Q.dequeue()
out_q = out_q + 1
en_q = Q.enqueue(out_q) #运行会话
with tf.Session() as sess:
#初始化队列
sess.run(enq_many)
#处理数据
for i in range(100):
sess.run(en_q)
for i in range(Q.size().eval()):
print(sess.run(Q.dequeue()))
return None #############异步执行#########################
def unasynQueue():
"""
异步读取
:return:
"""
#1、定义一个队列,1000
Q = tf.FIFOQueue(1000,tf.float32)
#2、定义要做的事,并放入队列中
var = tf.Variable(0.0)
#实现自增
data = tf.assign_add(var,tf.constant(1.0))
en_q = Q.enqueue(data)
#3、定义队列管理器,指定多少个子线程,子线程做事
qr = tf.train.QueueRunner(Q,enqueue_ops=[en_q,]*2) #初始化变量OP
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op) # 开启线程管理器
coord = tf.train.Coordinator()
#开启子线程
threads = qr.create_threads(sess,coord,start=True)
#主线程不断读取数据
for i in range(300):
print(sess.run(Q.dequeue())) #回收线程
coord.request_stop()
coord.join(threads)
return None if __name__ == '__main__':
file_name = os.listdir("./csvData/")
file_list = [os.path.join("./csvData/",file) for file in file_name]
example_batch ,label_batch = readCSVFile(file_list)
with tf.Session() as sess:
# #定义一个线程协调器
coord = tf.train.Coordinator()
# #开启读文件的线程
threads = tf.train.start_queue_runners(sess,coord=coord)
#打印读取的内容
print(sess.run([example_batch,label_batch]))
#回收线程
coord.request_stop()
coord.join(threads)

tensorflow文件读取的更多相关文章

  1. 【学习笔记】tensorflow文件读取

    目录 文件读取 文件队列构造 文件阅读器 文件内容解码器 开启线程操作 管道读端批处理 CSV文件读取案例 先看下文件读取以及读取数据处理成张量结果的过程: 一般数据文件格式有文本.excel和图片数 ...

  2. TensorFlow笔记-文件读取

    小数量数据读取 这些只用于可以完全加载到内存中的小型数据集: 1,储存在常数中 2,储存在变量中,初始化后,永远不改变它的值 使用常量 training_data = ... training_lab ...

  3. tensorflow二进制文件读取与tfrecords文件读取

    1.知识点 """ TFRecords介绍: TFRecords是Tensorflow设计的一种内置文件格式,是一种二进制文件,它能更好的利用内存, 更方便复制和移动,为 ...

  4. TensorFlow从0到1之TensorFlow csv文件读取数据(14)

    大多数人了解 Pandas 及其在处理大数据文件方面的实用性.TensorFlow 提供了读取这种文件的方法. 前面章节中,介绍了如何在 TensorFlow 中读取文件,本节将重点介绍如何从 CSV ...

  5. TensorFlow csv读取文件数据(代码实现)

    TensorFlow csv读取文件数据(代码实现) 大多数人了解 Pandas 及其在处理大数据文件方面的实用性.TensorFlow 提供了读取这种文件的方法. 前面章节中,介绍了如何在 Tens ...

  6. (第二章第一部分)TensorFlow框架之文件读取流程

    本章概述:在第一章的系列文章中介绍了tf框架的基本用法,从本章开始,介绍与tf框架相关的数据读取和写入的方法,并会在最后,用基础的神经网络,实现经典的Mnist手写数字识别. 有四种获取数据到Tens ...

  7. tensorflow 1.0 学习:十图详解tensorflow数据读取机制

    本文转自:https://zhuanlan.zhihu.com/p/27238630 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找 ...

  8. TensorFlow数据读取

    TensorFlow高效读取数据的方法 TF Boys (TensorFlow Boys ) 养成记(二): TensorFlow 数据读取 Tensorflow从文件读取数据 极客学院-数据读取 十 ...

  9. Tensorflow高效读取数据

    关于Tensorflow读取数据,官网给出了三种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据. 从文件读取数据: 在TensorFlow ...

随机推荐

  1. 第十章· MySQL的主从复制

    一.主从复制简介  2015年5月28日11时,12小时后恢复,损失:平均每小时106.48W$ 1)高可用 2)辅助备份 3)分担负载 复制是 MySQL 的一项功能,允许服务器将更改从一个实例复 ...

  2. Redis日志级别

    Redis默认的设置为verbose,开发测试阶段可以用debug,生产模式一般选用notice 1. debug:会打印出很多信息,适用于开发和测试阶段 2. verbose(冗长的):包含很多不太 ...

  3. ScrollView 滚动视图

    ScrollView 种类: 1.HorizontalScrollView:水平滚动视图 2.ScrollView:垂直滚动视图(常用类) public class MainActivity exte ...

  4. BZOJ 最大公约数 (通俗易懂&效率高&欧拉函数)

    题目 题目描述 给定整数\(N\),求\(1 \le x,y \le N\)且\(gcd(x,y)\)为素数的数对\((x,y)\)有多少对. \(gcd(x,y)\)即求\(x,y\)的最大公约数. ...

  5. 不能使用 float 和 double 来表示金额等精确的值

    不能使用 float 和 double 来表示金额等精确的值 关于面试,金额用什么数据类型? 不是 doube,更不是 float ,而是用 BigDecimal.对于金融项目,对于金额,误差是不能容 ...

  6. Android studio测试软件——Monkey学习及运用

    Android studio测试软件——Monkey学习及运用 在第十五周的个人博客上,王老师安排我们根据最终的团队大作业所用的软件(Android studio)进行软件测试的介绍,而我选择的是基于 ...

  7. Maven编译

    多模块 只有需要编译成jar的模块才设置build <build> <plugins> <plugin> <groupId>org.springfram ...

  8. Kafka、RabbitMQ、RocketMQ等 消息中间件 介绍和对比

    文章目录 1.前言 2.概念 2.1.MQ简介 2.2.MQ特点 2.2.1.先进先出 2.2.2.发布订阅 2.2.3.持久化 2.2.4.分布式 3.消息中间件性能究竟哪家强? 3.1.Kafka ...

  9. MySQL 异地 双机房同步之otter

    一.背景: 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求, 同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了ott ...

  10. hive的事物性 transaction manager

    create table lk3 (id string,nname string,grade int,goldUser int); insert into lk3 values (,, ), (,, ...