【放假第9天】TensorFlow总结3 线程队列以及IO操作---混乱

#这一章学的什么鬼,如此混乱,还不如神经网络,终究是没有理解,理解了再删

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
简单来讲就是之前是一个老头努力耕耘,现在我变成了有儿子帮忙插秧

import tensorflow as tf

#模拟一下同步处理数据,然后才能数据训练
#TensorFlow当中,运行操作有依赖性

#1.首先定义队列
Q=tf.FIFOQueue(3,tf.float32)

#放入一些数据
enq_many=Q.enqueue_many([0.1,0.2,0.3])

#2.定义一些独处数据的螺距,取数据的过程  取数据+ 然后入队列的过程
out_q=Q.dequeue()
data=out_q+1

en_q=Q.enqueue(data)

with tf.Session() as sess:
    #初始化队列
    sess.run(enq_many)
    
    #处理数据
    for i in range(300):
        sess.run(en_q)
        
    #训练数据
    for i in range(Q.size().eval()):   #这个时候体现eval的特性了吧
        print(sess.run(Q.dequeue()))#Q.dequeue写成out_q也行,没有运算
        

在这里插入图片描述
在这里插入图片描述
子线程不停地往里面放数据
主线程运行

#模拟异步子线程 存入样本 主线程 读取样本
#3.定义队列管理器 op 指定子线程做什么事情
#你放进去一个数据我 主线程 都能取
一个样本我都能训练了


#模拟异步子线程  存入样本  主线程读取样本

#1.定义一个队列  1000
Q=tf.FIFOQueue(1000,tf.float32)

#1.定义要做的事情,循环 值+1 放入队列
var=tf.Variable(0.0)

#2.实现一个自增  tf.assign_add
data=tf.assign_add(var,tf.constant(1.0))
en_q=Q.enqueue(data)

#3.定义队列管理器op,指定多少个子线程,子线程该干什么事情
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)
    
    #真正开启子线程
    threads=qr.create_threads(sess,start=True)
    
    #主线程,不断读取数据
    for i in range(300):
        print(sess.run(Q.dequeue()))

在这里插入图片描述

没有限定时间和周期 我们可以在主线程停止后 直接让子线程停止

with tf.Session() as sess:
    #初始化变量
    sess.run(init_op)
    
    #开启线程管理器
    coord=tf.train.Coordinator()
    
    #真正开启子线程
    threads=qr.create_threads(sess,coord=coord,start=True)
    
    #主线程,不断读取数据训练
    for i in range(200):
        print(sess.run(Q.dequeue))
        
    #回收你
    coord.request_stop()
    coord.join(threads)
    

在这里插入图片描述

有一个固定的流程
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#1.构造文件的队列
file_queue=tf.train.string_input_producer(filelist)

#2.构造csv阅读器读取队列数据(按一行)
reader=tf.TextLineReader()
key,value=reader.read(file_queue)

#3.对每行内容解码
#Record_defaults:指定每一个样本的每一列的类型,指定默认值
#这个其实是你随意写出来什么数字或者类型,一致

records=[["None"],["None"]]
example,label=tf.decode_csv(value,record_defaults=records)
#print(example,label)
return example,label

在这里插入图片描述#这一步比之前就更简单了

With tf.session() as sess:
     #定义一个线程协调器
     Coord=tf.train.Coordinator()
     #开启读文件的线程
     threads=tf.train.start_queue_runners(sess,coor=coord)
      #打读取的内容
      Print(sess.run([Example,label]))

      #回收子线程
      Coord.request_stop()
      Coord.join(threads)

在这里插入图片描述
#4.想要读取多个数据,就要批处理

example_bath,label_batch=tf.train.batch([example,label],bath_size=9,num_threads=1,capacity=9)

   if __name__="__main__":
    #1.找到文件,放入列表
    file_name=os.listdir("./data/csvdata/")
    filelist=[os.path.join("./data/csvdata/",file) for file in filename]
    
    #print(file_name)
    example_b,label=csvread(filelist)
    
    #开启会话运行结果
    with tf.Session() as sess:
        #定义一个线程协调器
        coord=tf.train.Coordinator()
        
        #开启读取文件线程
        threads=tf.train.start_queue_runners(sess,coord=coord)
        
        #打印读取的内容
        print(sess.run([example,label]))
        
        #回收子线程
        coord.request_stop()
        
        coord.join(threads)
     
    
发布了39 篇原创文章 · 获赞 1 · 访问量 461

猜你喜欢

转载自blog.csdn.net/qq_40647378/article/details/103661110