tfsenflow队列|tf.train.slice_input_producer|tf.train.Coordinator|tf.train.start_queue_runners
####
'''
tf.train.slice_input_producer :定义样本放入文件名队列的方式[迭代次数,是否乱序],但此时文件名队列还没有真正写入数据
slice_input_producer(tensor_list, num_epochs=None, shuffle=True, seed=None,capacity=32, shared_name=None, name=None)
tensor_list:如[images,labels] = [['img1','image2','imag3','img4','img5','img6'],[1,2,3,4,5,6]]
num_epochs:可选参数,迭代次数 num_epochs=None 无限次遍历tensor列表 num_epochs=N 生成器只能遍历列表N次
shuffle:shuffle=True 乱序样本 shuffle=False需要在批处理时使用tf.train.shuffle_batch函数打乱样本
seed:随机数种子 在shuffle=True 时使用
capacity:设置tensor列表的容量
shared_name:可选参数,如果设置一个‘shared_name’,则在不同的上下文环境(Session)中可以通过这个名字共享生成的tensor
name:设置操作名称 '''
import tensorflow as tf ###思路:准备入文件名队列 创建线程 入队线程
images = ['img1','image2','imag3','img4','img5','img6']
labels = [1,2,3,4,5,6] epoch_num = 8
queue = tf.train.slice_input_producer([images,labels],num_epochs=None,shuffle=False) #从文件里抽取tensor,准备放入文件名队列
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
coord = tf.train.Coordinator() ###创建一个线程协调器,用来管理之后再Session中启动的所有线程
###启动入队线程,由多个或单个线程,按照设定规则把文件读入到文件名队列中,返回线程ID的列表。一般情况下,系统有多少核,就会启动多少个入队线程
###入队具体使用多少个线程在tf.train.batch中设定
threads = tf.train.start_queue_runners(sess,coord=coord)
for i in range(epoch_num):
k = sess.run(queue)
print("*************")
print(i,k,k[0],k[1]) '''
*************
0 [b'img1', 1] b'img1' 1
*************
1 [b'image2', 2] b'image2' 2
*************
2 [b'imag3', 3] b'imag3' 3
*************
3 [b'img4', 4] b'img4' 4
*************
4 [b'img5', 5] b'img5' 5
*************
5 [b'img6', 6] b'img6' 6
*************
6 [b'img1', 1] b'img1' 1
*************
7 [b'image2', 2] b'image2' 2
'''
准备 -- 创建线程 -- 入队线程
import tensorflow as tf ###思路:准备入文件名队列 创建线程 入队线程 异常处理
images = ['img1','image2','imag3','img4','img5','img6']
labels = [1,2,3,4,5,6] epoch_num = 8
queue = tf.train.slice_input_producer([images,labels],num_epochs=None,shuffle=False) #从文件里抽取tensor,准备放入文件名队列
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
coord = tf.train.Coordinator() ###创建一个线程协调器,用来管理之后再Session中启动的所有线程
###启动入队线程,由多个或单个线程,按照设定规则把文件读入到文件名队列中,返回线程ID的列表。一般情况下,系统有多少核,就会启动多少个入队线程
###入队具体使用多少个线程在tf.train.batch中设定
threads = tf.train.start_queue_runners(sess,coord=coord)
try:
for i in range(epoch_num):
if coord.should_stop(): ###查询是否应该终止所有线程,当文件队列(queue)中的所有文件都已经读取出列的时候,
# 会抛出一个 OutofRangeError 的异常,这时候就应该停止Sesson中的所有线程了;
break
k = sess.run(queue)
print("*************")
print(i,k,k[0],k[1])
except tf.errors.OutOfRangeError: ###如果读取文件到文件队列末尾会抛出此异常
print('完成!!现在终止所有线程')
finally:
##协调器coord发出所有线程终止信号,使用coord.join(threads)把线程加入主线程,等待threads结束
coord.request_stop()
print('所有线程请求终止')
coord.join(threads) ###把开启的线程加入主线程,等待threads结束
print('所有线程终止')
tfsenflow队列|tf.train.slice_input_producer|tf.train.Coordinator|tf.train.start_queue_runners的更多相关文章
- tensorflow|tf.train.slice_input_producer|tf.train.Coordinator|tf.train.start_queue_runners
#### ''' tf.train.slice_input_producer :定义样本放入文件名队列的方式[迭代次数,是否乱序],但此时文件名队列还没有真正写入数据 slice_input_prod ...
- 深度学习原理与框架-Tfrecord数据集的读取与训练(代码) 1.tf.train.batch(获取batch图片) 2.tf.image.resize_image_with_crop_or_pad(图片压缩) 3.tf.train.per_image_stand..(图片标准化) 4.tf.train.string_input_producer(字符串入队列) 5.tf.TFRecord(读
1.tf.train.batch(image, batch_size=batch_size, num_threads=1) # 获取一个batch的数据 参数说明:image表示输入图片,batch_ ...
- tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数(转)
tensorflow数据读取机制 tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算. 具体来说就是使用一个线程源源不断的将硬盘中的图片数 ...
- tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数
tensorflow数据读取机制 tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算. 具体来说就是使用一个线程源源不断的将硬盘中的图片数 ...
- 【转载】 tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数
原文地址: https://blog.csdn.net/dcrmg/article/details/79776876 ----------------------------------------- ...
- tensorflow数据读取机制tf.train.slice_input_producer 和 tf.train.batch 函数
tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算. 具体来说就是使用一个线程源源不断的将硬盘中的图片数据读入到一个内存队列中,另一个线程 ...
- 【转载】 tf.train.slice_input_producer()和tf.train.batch()
原文地址: https://www.jianshu.com/p/8ba9cfc738c2 ------------------------------------------------------- ...
- tf.train.slice_input_producer()
tf.train.slice_input_producer处理的是来源tensor的数据 转载自:https://blog.csdn.net/dcrmg/article/details/7977687 ...
- 深度学习原理与框架-图像补全(原理与代码) 1.tf.nn.moments(求平均值和标准差) 2.tf.control_dependencies(先执行内部操作) 3.tf.cond(判别执行前或后函数) 4.tf.nn.atrous_conv2d 5.tf.nn.conv2d_transpose(反卷积) 7.tf.train.get_checkpoint_state(判断sess是否存在
1. tf.nn.moments(x, axes=[0, 1, 2]) # 对前三个维度求平均值和标准差,结果为最后一个维度,即对每个feature_map求平均值和标准差 参数说明:x为输入的fe ...
随机推荐
- Sunday 字符串匹配算法(C++实现)
简介: Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法.其核心思想是:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不匹 ...
- JavaScript中的反柯里化
转载自:https://www.cnblogs.com/zztt/p/4152147.html 柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函 ...
- Kaldi学习手记(一):Kaldi的编译安装
下载 安装git sudo apt-get install git 下载Kaldi git clone https://github.com/kaldi-asr/kaldi.git kaldi-tru ...
- 转载一篇别人分享的VSFTPD.CONF的中文解释方便以后查询
# 服务器以standalong模式运行,这样可以进行下面的控制 listen=YES # 接受匿名用户 anonymous_enable=YES # 匿名用户login时不询问口令 no_anon_ ...
- vue,一路走来(6)--微信支付
微信支付 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 分享一下vue实现微信支付.在微信浏览器里面 ...
- IDS4授权分析
一.授权过程的场景名词 RO (resource owner): 资源所有者:用户. Resource Owner:简单理解为资源拥有者,文中称“user”: RS (resource server) ...
- mysql 联合表查询从表即使有索引依然ALL的一个原因
那就是主表和从表的关联字段的编码方式不一样!!! 晕啊,折腾了半天才发现,可能是不知道啥时候mysql更改主体编码方式了,结果导致后来新建的表的关联字段和之前的主表的字段的编码方式不一样 改成一样的编 ...
- [Luogu2170]选学霸
这一道题,由于他说,"如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议."而要求"既不让同学们抗议,又与原来的M尽可能接近".因此,我们要对实力相 ...
- IncepText算法笔记
源头:场景文本经常受到aspect ratio, scal, and orientation的影响 为了解决这个问题,提出了inceptext,主要贡献在于添加了inception-text modu ...
- CentOS7.2安装Oracle12.1.0.2
Centos7.2环境安装(安装桌面) #安装界面 #查看版本 cat /etc/redhat-release #查看连接 ifconfig eth0 echo "127.0.0.1 tes ...