TensorFlow batch
转自:http://blog.csdn.net/lujiandong1/article/details/53376802
这篇文章写数据读取,包含了线程以及batch的概念
1、准备数据,构造三个文件,A.csv,B.csv,C.csv
$ echo -e "Alpha1,A1\nAlpha2,A2\nAlpha3,A3" > A.csv
$ echo -e "Bee1,B1\nBee2,B2\nBee3,B3" > B.csv
$ echo -e "Sea1,C1\nSea2,C2\nSea3,C3" > C.csv
2、从数据里生成样本和标签
2.1、单个Reader,每次生成一个样本
#-*- coding:utf-8 -*-
import tensorflow as tf
# 生成一个先入先出队列和一个QueueRunner,生成文件名队列
filenames = ['A.csv', 'B.csv', 'C.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
# 定义Reader
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
# 定义Decoder
example, label = tf.decode_csv(value, record_defaults=[['null'], ['null']])
#example_batch, label_batch = tf.train.shuffle_batch([example,label], batch_size=1, capacity=200, min_after_dequeue=100, num_threads=2)
# 运行Graph
with tf.Session() as sess: coord = tf.train.Coordinator() #创建一个协调器,管理线程 threads = tf.train.start_queue_runners(coord=coord) #启动QueueRunner, 此时文件名队列已经进队。 for i in range(10): print example.eval(),label.eval() coord.request_stop() coord.join(threads)
结果:这里生成的样本和label之间对应不上,乱序了。生成结果如下:
Alpha1 A2
Alpha3 B1
Bee2 B3
Sea1 C2
Sea3 A1
Alpha2 A3
Bee1 B2
Bee3 C1
Sea2 C3
Alpha1 A2
2.2、用tf.train.shuffle_batch,生成的结果就能够对应上
#-*- coding:utf-8 -*-
import tensorflow as tf
# 生成一个先入先出队列和一个QueueRunner,生成文件名队列
filenames = ['A.csv', 'B.csv', 'C.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
# 定义Reader
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
# 定义Decoder
example, label = tf.decode_csv(value, record_defaults=[['null'], ['null']])
example_batch, label_batch = tf.train.shuffle_batch([example,label], batch_size=1, capacity=200, min_after_dequeue=100, num_threads=2)
# 运行Graph
with tf.Session() as sess: coord = tf.train.Coordinator() #创建一个协调器,管理线程 threads = tf.train.start_queue_runners(coord=coord) #启动QueueRunner, 此时文件名队列已经进队。 for i in range(10): e_val,l_val = sess.run([example_batch, label_batch]) print e_val,l_val coord.request_stop() coord.join(threads)
运行结果
2.3、单个Reader,每次生成一个batch,主要也是通过tf.train.shuffle_batch来实现
#-*- coding:utf-8 -*-
import tensorflow as tf
filenames = ['A.csv', 'B.csv', 'C.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
example, label = tf.decode_csv(value, record_defaults=[['null'], ['null']])
# 使用tf.train.batch()会多加了一个样本队列和一个QueueRunner。
#Decoder解后数据会进入这个队列,再批量出队。
# 虽然这里只有一个Reader,但可以设置多线程,相应增加线程数会提高读取速度,但并不是线程越多越好。
example_batch, label_batch = tf.train.batch( [example, label], batch_size=5)
with tf.Session() as sess: coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(coord=coord) for i in range(10): e_val,l_val = sess.run([example_batch,label_batch]) print e_val,l_val coord.request_stop() coord.join(threads)
运行结果
2.4、下面这种写法,提取batch_size个样本,特征和label之间也是不同步的
#-*- coding:utf-8 -*-
import tensorflow as tf
filenames = ['A.csv', 'B.csv', 'C.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
example, label = tf.decode_csv(value, record_defaults=[['null'], ['null']])
# 使用tf.train.batch()会多加了一个样本队列和一个QueueRunner。
#Decoder解后数据会进入这个队列,再批量出队。
# 虽然这里只有一个Reader,但可以设置多线程,相应增加线程数会提高读取速度,但并不是线程越多越好。
example_batch, label_batch = tf.train.batch( [example, label], batch_size=5)
with tf.Session() as sess: coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(coord=coord) for i in range(10): print example_batch.eval(), label_batch.eval() coord.request_stop() coord.join(threads)
运行结果
2.5、多个reader,生成batch。通过调用batch_join函数
#-*- coding:utf-8 -*-
import tensorflow as tf
filenames = ['A.csv', 'B.csv', 'C.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
record_defaults = [['null'], ['null']]
#定义了多种解码器,每个解码器跟一个reader相连
example_list = [tf.decode_csv(value, record_defaults=record_defaults) for _ in range(2)] # Reader设置为2
# 使用tf.train.batch_join(),可以使用多个reader,并行读取数据。每个Reader使用一个线程。
example_batch, label_batch = tf.train.batch_join( example_list, batch_size=5)
with tf.Session() as sess: coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(coord=coord) for i in range(10): e_val,l_val = sess.run([example_batch,label_batch]) print e_val,l_val coord.request_stop() coord.join(threads)
运行结果:
3、总结
tf.train.batch与tf.train.shuffle_batch函数使用单个Reader读取文件,但是可以使用多个线程(num_thread>1),这些线程同时读取同一个文件里的不同example。这种方法的优点:
- 如果读的线程比文件数多,这种方法可以避免两个线程同时读取同一个文件里的同一个example
- tf.train.batch_join方法所使用的同时读硬盘里的N个不同文件会花费多余的disk seek 时间
tf.train.batch_join与tf.train.shuffle_batch_join可设置多Reader读取,每个Reader使用一个线程、且每个reader读取各自的文件,直到这次epoch里的文件全部读取完。
至于两种方法的效率,单Reader时,2个线程就达到了速度的极限。多Reader时,2个Reader就达到了极限。所以并不是线程越多越快,甚至更多的线程反而会使效率下降。
TensorFlow batch相关推荐
- tensorflow --batch内负采样
class NegativeCosineLayer():""" 自定义batch内负采样并做cosine相似度的层 """"&qu ...
- 如何用一套引擎搞定机器学习全流程?
作者:陈戊超(仲卓) 深度学习技术在当代社会发挥的作用越来越大.目前深度学习被广泛应用于个性化推荐.商品搜索.人脸识别.机器翻译.自动驾驶等多个领域,此外还在向社会各个领域迅速渗透. 背景 当前,深度 ...
- 光流估计(三) PWC-Net 模型介绍
一.PWC-Net 概述 PWC-Net 的网络模型在 CVPR,2018 由 NVIDIA 提出,发表文章为 <PWC-Net: CNNs for Optical Flow Using Pyr ...
- Kubernetes 和 Kubeflow 学习笔记
Kubernetes Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制.多租户应用支撑能力.透明的服务注册和发现机制.內建智能负载均衡器.强大 ...
- Multi-task Learning
Deep Learning 回顾之多任务学习 https://www.52ml.net/20775.html?utm_source=tuicool&utm_medium=referral 深度 ...
- Tensorflow BatchNormalization详解:4_使用tf.nn.batch_normalization函数实现Batch Normalization操作...
使用tf.nn.batch_normalization函数实现Batch Normalization操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearnin ...
- 3.1 Tensorflow: 批标准化(Batch Normalization)
##BN 简介 背景 批标准化(Batch Normalization )简称BN算法,是为了克服神经网络层数加深导致难以训练而诞生的一个算法.根据ICS理论,当训练集的样本数据和目标样本集分布不一致 ...
- tensorflow 的 Batch Normalization 实现(tf.nn.moments、tf.nn.batch_normalization)
tensorflow 在实现 Batch Normalization(各个网络层输出的归一化)时,主要用到以下两个 api: tf.nn.moments(x, axes, name=None, kee ...
- tensorflow dataset.shuffle dataset.batch dataset.repeat 理解 注意点
batch很好理解,就是batch size.注意在一个epoch中最后一个batch大小可能小于等于batch size dataset.repeat就是俗称epoch,但在tf中与dataset ...
最新文章
- 理解Kubernetes(2): 应用的各种访问方式
- OpenMP的环境变量
- RoBERTa中文预训练模型:RoBERTa for Chinese
- XGBoost-原理推导(上)
- [译]时间自动机:语义,算法和工具
- Get 和 Post方法的登录
- 深度学习(2)--深度学习中的这25个概念
- 1191 消灭兔子(贪心+优先队列)
- 【iOS】打印方法名
- L01-03:python学习之控制语句
- Linux : 终端命令整理
- android获取当前位置的GPS经纬度
- android n sdk,Android SDK (phần 6) pptx
- 我是如何出版一本书的?(3)
- 实用化工计算机模拟-matlab在化学工程中的应用的光盘程序_这150款化工常用软件,你会用多少?...
- Android中 简洁优秀的AgentWeb框架基本使用
- 墨菲定律、二八法则、马太效应、手表定理、“不值得”定律等左右人生的金科玉律。
- 计算机二类中文核心期刊,我国科学院计算机网络信息中心在学研究生年终考核奖评定办法(试行).doc...
- echart绘制海南地图时增加南海诸岛显示(现成geojson数据)
- Unicode编码详解(二):编码预备知识
热门文章
- redis高可用:keepalived+redis主从部署
- Matlab 如何截取视频中的每一帧图像
- [xhr4412][extension 4] u-boot-2020.07 DM9621 网卡驱动移植
- java 声明和动态创建数组
- Response to preflight request doesn‘t pass access control check: It does not have HTTP ok status.
- shell中的try...catch...
- 小程序名片,让你彻底告别伸手递名片的烦恼!
- 建筑央企工程项目数字化管理整体解决方案
- 【网络流量监控工具之Nethogs】
- PopupWindow