#这一章学的什么鬼,如此混乱,还不如神经网络,终究是没有理解,理解了再删
简单来讲就是之前是一个老头努力耕耘,现在我变成了有儿子帮忙插秧
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)