
 
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事it行业的老鸟或是对it行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
3.线程协调器 管理线程

tf.train.coordinator()
线程协调员,实现一个简单的机制来协调一组线程的终止
request\_stop() 
should\_stop() 检查是否要求停止
join(threads=none, stop_grace_period_secs=120)  
等待线程终止
return:线程协调员实例
案例:通过队列管理器来实现变量加1,入队,主线程出队列的操作,观察效果?(异步操作)
import tensorflow as tf
# 模拟异步 子线程:存入样本 ,主线程:读取样本
# 1、定义一个队列,1000
q = tf.fifoqueue(1000, tf.float32)
# 2、定义子线程要做的事情 循环 值 +1 ,放入队列中
var = tf.variable(0.0)
# 不能用data = var + 1
#实现一个自增, tf.assign_add
# data = tf.assign\_add(var, tf.constant(1.0))
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)
    # 开启线程管理器
    coord = tf.train.coordinator()
    # 开启真正子线程
    threads = qr.create\_threads(sess, coord=coord ,start=true) # 指定老大是coord
    # 主线程,不断读取数据训练
    for i in range(300):
        print(sess.run(q.dequeue()))
    # 回收你
    coord.request\_stop()
    coord.join(threads) # 听老大的话
4.文件读取流程


1.文件读取api-文件队列构造

tf.train.string\_input\_producer(string_tensor , shuffle=true)
将输出字符串(例如文件名)输入到管道队列
string_tensor	 含有文件名的1阶张量
num_epochs : 过几遍数据,默认无限过数据
return :       具有输出字符串的队列
2.文件读取api-文件阅读器

根据文件格式,选择对应的文件阅读器
class tf.textlinereader
阅读文本文件逗号分隔值(csv)格式 , 默认按行读取
return:读取器实例
tf.fixedlengthrecordreader(record_bytes)
要读取每个记录是固定数量字节的二进制文件
record_bytes:整型,指定每次读取的字节数
return:读取器实例
tf.tfrecordreader
读取tfrecords文件
有一个共同的读取方法:read(file_queue):从队列中指定数量内容
 返回一个tensors元组(key文件名字,value默认的内容(行,字节))
3.文件读取api-文件内容解码器

4.开启线程操作

5.管道读端批处理

案例:csv文件读取

import tensorflow as tf
import os
def csvread(filelist):
    '''
    读取csv文件
    :param filelist: 文件路径+名字的列表
    :return: 读取的内容
    '''
    # 2\构造文件队列
    file_queue = tf.train.string\_input\_producer(filelist)
    # 3\构造csv阅读器读取队列数据(按照一行)
    reader = tf.textlinereader()
    key , value = reader.read(file_queue)
    # 4\对每行数据进行解码
    # record_defaults: 指定每一个样本的每一列的类型,指定默认值
    records = [["none"],[4.0]] #指定两列的默认值为字符串和float
    example, label = tf.decode\_csv(value, record_defaults=records) #有两列,两个参数接受
    # 5\想要读取多个数据,就需要批量处理
    # 批处理大小,跟队列,数据的数量没有影响,只决定这批次读取多少数据
    example_batch ,label_batch= tf.train.batch([example, label],batch_size=9,num_threads = 1,capacity = 9)
    return example_batch ,label_batch
if __name__ == '__main__':
    # 1\找到文件,放入列表  路径+名字  放入列表当中
    file_name = os.listdir("./data/csvdata/")
    filelist = [os.path.join("./data/csvdata/" , file) for file in file_name]
    example_batch,label_batch = csvread(filelist)
    # 开启会话运行结果
    with tf.session() as sess:
        # 定义一个线程协调器
        coord = tf.train.coordinator()
        # 开启读取文件的线程
        threads = tf.train.start\_queue\_runners(sess, coord=coord)
        # 打印读取的内容
        print(sess.run([example_batch,label_batch]))
        #回收子线程
        coord.request\_stop()
        coord.join(threads)  # 听老大的话
5.图片文件

import tensorflow as tf
import os
def picread(filelist):
    """
 读取狗图片并转换成张量
 :param filelist: 文件路径+ 名字的列表
 :return: 每张图片的张量
 """
    # 1、构造文件队列



**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
1715284906267)]
[外链图片转存中...(img-p68xzi5q-1715284906267)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
 
             我要评论
我要评论 
                                             
                                             
                                             
                                            
发表评论