python-tensorflow Coordinate和QueueRunner配合管理队列-注入数据

转发: https://blog.csdn.net/dcrmg/article/details/79776876

第一种,利用FIFOQueue构建队列,然后enqueue_many出来,构成tensor列表

import tensorflow as tf

q = tf.FIFOQueue(10, [tf.int32,tf.int32,tf.int32])
init = q.enqueue_many(([[0], [10], [20]] ))

x类型是一个tensor list 

第二种,利用tf.train.slice_input_producer向文件名队列写数据

tf.train.slice_input_producer是一个tensor生成器,作用是按照设定,每次从一个tensor列表中按顺序或者随机抽取出一个tensor放入文件名队列。

slice_input_producer(tensor_list, num_epochs=None, shuffle=True, seed=None,
                         capacity=32, shared_name=None, name=None)

第一个参数 tensor_list:包含一系列tensor的列表,表中tensor的第一维度的值必须相等,即个数必须相等,有多少个图像,就应该有多少个对应的标签。
第二个参数num_epochs: 可选参数,是一个整数值,代表迭代的次数,如果设置 num_epochs=None,生成器可以无限次遍历tensor列表,如果设置为 num_epochs=N,生成器只能遍历tensor列表N次。
第三个参数shuffle: bool类型,设置是否打乱样本的顺序。一般情况下,如果shuffle=True,生成的样本顺序就被打乱了,在批处理的时候不需要再次打乱样本,使用 tf.train.batch函数就可以了;如果shuffle=False,就需要在批处理时候使用 tf.train.shuffle_batch函数打乱样本。
第四个参数seed: 可选的整数,是生成随机数的种子,在第三个参数设置为shuffle=True的情况下才有用。
第五个参数capacity:设置tensor列表的容量。
第六个参数shared_name:可选参数,如果设置一个‘shared_name’,则在不同的上下文环境(Session)中可以通过这个名字共享生成的tensor。
第七个参数name:可选,设置操作的名称。


tf.train.slice_input_producer定义了样本放入文件名队列的方式,包括迭代次数,是否乱序等,要真正将文件放入文件名队列,还需要调用tf.train.start_queue_runners 函数来启动执行文件名队列填充的线程,之后计算单元才可以把数据读出来,否则文件名队列为空的,计算单元就会处于一直等待状态,导致系统阻塞。

import tensorflow as tf
 
images = ['img1', 'img2', 'img3', 'img4', 'img5']
labels= [1,2,3,4,5]
 
epoch_num=8
 
f = tf.train.slice_input_producer([images, labels],num_epochs=None,shuffle=False) #images labels是tensor列表
 
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)    #启动线程
    for i in range(epoch_num):
        k = sess.run(f)
        print('************************')
        print (i,k)
 
    coord.request_stop()
    coord.join(threads)
************************
0 [b'img1', 1]
************************
1 [b'img2', 2]
************************
2 [b'img3', 3]
************************
3 [b'img4', 4]
************************
4 [b'img5', 5]
************************
5 [b'img1', 1]
************************
6 [b'img2', 2]
************************
7 [b'img3', 3]

第三种,利用tf.train.string_input_producer向文件名队列写.csv数据

实际上,就是将slice换成了string

file_queue = tf.train.string_input_producer(filename, shuffle=True, num_epochs=2)
reader = tf.WholeFileReader()
key, value = reader.read(file_queue)
import tensorflow as tf

filename = ['A.csv', 'B.csv', 'C.csv']

file_queue = tf.train.string_input_producer(filename, shuffle=True, num_epochs=2)
reader = tf.WholeFileReader()
key, value = reader.read(file_queue)

with tf.Session() as sess:
    sess.run(tf.local_variables_initializer())
    
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess,coord=coord)
    for i in range(6):
        print(sess.run([key, value]))
    # 使用tf.train.Coordinator来停止所有线程
    coord.request_stop()
    # 等待所有线程执行完毕
    coord.join(threads)

 

.csv中数据

还需要解码!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值