Tensorflow学习笔记:变量作用域、模型的加载与保存、线程与队列实现多线程读取样本

TensorFlow学习笔记(7) 多线程输入数据处理框架 目录 多线程输入数据处理框架 队列与多线程 输入文件队列 组合训练数据 输入数据处理框架 多线程输入数据处理框架 为了避免图像预处理成为神经网络模型训练效率的瓶颈,TF提供了一套多线程处理输入数据的框架。经典的输入数据处理流程为如图所示。 队列与多线程 在tensorflow中,队列不仅是一种数据结构,更提供了多线程机制,队列也是TF中多线程输入数据处理框架的基础。比如... 阅读详情

# tensorflow变量作用域
    用上下文语句规定作用域
    with tf.variable_scope("作用域_name")
        ......
    这样可以使得变量在tensorboard中的显示更加简介

# 增加变量显示
    1、用tf.summary.scalar(name="",tensor)    收集单个值(0维的值)
       用tf.summary.histogram(name="",tensor)  收集高维度的值
        2、合并变量并写入event文件
    merged = tf.summary.merge_all()
    summary = sess.run(merged)    #每次迭代都需要运行
    FileWriter.add_summary(summary,i)    #i代表第几次的值

#模型的保存与加载
    保存为checkpoint文件
    tf.train.Saver(var_list=None,    #用字典或列表传递要保存和还原的变量
            max_to_keep    #保留最近的几个文件的最大数目
            )
    返回一个实例saver
    saver.save(sess,'path+name')
    saver.restore(sess,'path+name')
    示例:

saver = tf.train.Saver(var_list=(w,b),max_to_keep = 3)
    with tf.Session() as sess:
        saver.save(sess,'./train_data/model')


    Saver不是op,不用run

    如果需要加载模型,在训练开始之前进行加载
    if os.path.exists("checkpoint")    #判断保存时创建的checkpoint是否存在
    saver.restore(sess,'./trained_data/model')

#线程队列与IO操作
#队列
    tf.FIFOQueue()队列,先进先出
    tf.RandomShuffleQueue()随机出队列
#主要用到FIFOQueue
    FIFOQueue(capacity,    #最大数量
        dtype,    #数据类型
        name = None)
    方法:
    dequeue()出队列
    enqueue(vals)进队列
    enqueue_many(vals)     #vals为包含多组数据的列表或元组
    size()    返回大小

#队列管理器(可以创建线程)
    tf.train.QueueRunner(queue,enqueue_ops = None)
    其中queue是列表对象实例,en    queue_ops = [enqueue_op,dequque_op,...],指定线程做什么操作,[]*2代表指定两个线程
    create_threads(sess,    
            coord=None    #线程协调器,后面再说
            start=False    #为True直接启动线程,为False必须调用start()来启动
            )         #运行线程进行操作
    返回一个线程的实例

    示例:
    

#队列中加入数,每次取出后加1放入队列
    import tensorflow as tf
    import os

    #定义队列
    Q = tf.FIFOQueue(100,tf.float32)

    #定义变量
    var = tf.Variable(0.0,dtype = tf.float32)

    #取出变量自增后放入队列
    data = tf.assign_add(var,tf.constant(1.0))

    #data放入队列Q
    enq_op = Q.enqueue(data)

    Q_thread_op = tf.train.QueueRunner(Q,enqueue_ops = [enq_op])

    init_op = tf.global_variables_initializer()

    with tf.Session() as sess:
        sess.run(init_op)
        threads = Q_thread_op.create_threads(sess, start = True)

        for i in range(300):
            print(sess.run(Q.dequeue()),Q.size().eval())

#线程协调器tf.train.Coordinator()
    示例:加入线程协调器
    

import tensorflow as tf
    import os

    #定义队列
    Q = tf.FIFOQueue(100,tf.float32)

    #定义变量
    var = tf.Variable(0.0,dtype = tf.float32)

    #取出变量自增后放入队列
    data = tf.assign_add(var,tf.constant(1.0))

    #data放入队列Q
    enq_op = Q.enqueue(data)

    Q_thread_op = tf.train.QueueRunner(Q,enqueue_ops = [enq_op])

    init_op = tf.global_variables_initializer()

    with tf.Session() as sess:
        sess.run(init_op)
        coord = tf.train.Coordinator()    #创建线程协调器
        threads = Q_thread_op.create_threads(sess,coord = coord, start = True)    #用线程协调器开启线程
        for i in range(300):
            print(sess.run(Q.dequeue()),Q.size().eval())
        coord.request_stop()    #请求线程结束
        coord.join(threads)    #回收线程

#文件读取
    1、构造文件读取队列
    tf.train.string_input_producer(string_tensor, num_epochs=None, shuffle=True, capacity=32)
    string_tensor:一维字符串张量,存储要读取的样本文件的字符串
    num_epochs:读取循环次数,默认无限次
    shuffle:随机选择文件读取
    capacity:文件读取队列的容量

    2、文件阅读器------读取队列内容
    tf.TextLineReader
        阅读文本文件(.txt,.CSV等)格式,默认按行读取
        return:读取器实例
    tf.FixedLengthRecordReader(record_bytes)
        阅读二进制文件,参数为要读取的字节数
        return 读取器实例
    tf.TFRecordReader()(后面再说)
    
    阅读器都有一个共同的方法:read(file_queue)    
    return :一个张量,(文件名字,value读取的内容(行,字节))    

    3、文件内容解码器
    tf.decode_csv(    records,    #即上面的value 
            record_defaults = None    #所返回张量的类型
            field_delim = None #默认分隔符
            name = None)
    tf.decode_raw(bytes,out_type,little_endian = None)
        读取二进制文件

#批处理:在解码器解码之后进行,系统将运行多遍读取操作

    read_result_batch = tf.train.batch(read_result,    #解码器的解码结果
                        batch_size = 5,    #每个batch的数量,该大小跟队列大小,数据个数无关,一般数据可以循环读取,如果batch_size很大,则会重复取
                        num_threads = 1,#利用多少个线程处理
                        capacity = 5)    #队列的大小,没有关系,只是定义队列的大小

#实例:读取CSV文件
    1、找到文件构造样本文件的目录+文件名
    2、构造文件队列
    3、构造阅读器,读取文件(一行)
    4、构造解码器,解码内容
    5、批处理
    

def csvread(filelist):
    
    #1、构造文件字符串列表
    file_queue = tf.train.string_input_producer(filelist)

    #2、构造阅读器读取数据
    reader = tf.TextLineReader()
    key, value = reader.read(file_queue)

    #3、构造解码器进行解码
    recoders = [[1],[1]]
    read_result = tf.decode_csv(value, record_defaults = recoders)

    #4、批量读取
    read_result_batch = tf.train.batch(read_result, batch_size = 5, num_threads = 1, capacity = 7)

    return read_result_batch


import tensorflow as tf
import os

if __name__ == "__main__":

    #用os模块查询存放数据文件的目录下是否真的存在数据文件
    dir_file_list = os.listdir("C:\\Users\\xie\\csv_data")

    #构造数据文件路径+文件名的字符串列表
    for i in range(len(dir_file_list)):
        dir_file_list[i] = "C:\\Users\\xie\\csv_data\\" + dir_file_list[i]

    #调用函数获得样本batch
    result_batch = csvread(dir_file_list)

    with tf.Session() as sess:

        #定义线程管理器
        coord = tf.train.Coordinator()

        #用tf.train.start_queue_runners方法开启queue的子线程文件读取,其机制是:
        #所有关于queue读取的操作都被放在一个集合内部,当调用该函数时,所有的读取子进程启动,进行读取
        thread = tf.train.start_queue_runners(sess, coord = coord)

        print(sess.run(result_batch))

        coord.request_stop()
        coord.join(thread)

    


    

IC版图设计布局经验90条! 13 如果一个cell调用其它cell,被调用的cell的vssx,vddx,vssb,vddb如果没有和外层cell连起来,要打上PIN,否则通不过diva检查.尽量在布局低层cell时就连起来。48 在匹配电路的mos管左右画上dummy,用poly,poly的尺寸与管子尺寸一样,dummy与相邻的第一个poly gate的间距等于poly gate之间的间距。8 更改cell时查看路径,一定要在正确的library下更改,以防copy过来的cell是在其他的library下,被改错。 阅读详情

相关推荐

超声波测距的15度魔法:HC-SR04测量角度特性在机器人避障中的实战技巧

本文深入探讨了HC-SR04超声波测距模块在机器人避障中的15度测量角度特性及其应用技巧。通过分析15度角的工程意义、多模块阵列设计、狭小空间优化方案及温度补偿技术,帮助开发者提升机器人环境感知能力。文章特别强调了HC-SR04模块在低成本避障方案中的核心优势与实战优化策略。

weixin_29172963的博客 430

【代码记录】Python——使用socket+threading+tensorflow实现python多线程调用模型

Python开发——使用socket+threading+tensorflow实现python多线程调用模型

qq_42775328的博客 1565

VMware ESXi +DELL虚拟化存储磁盘容量处于紧急状态问题的处理

1、环境介绍 exsi server两台(DELL R730 ): 192.168.3.206 VMware EXSi6.5 192.168.3.207 VMware EXSi6.5 磁盘存储柜一台(DELL SC2000): 192.168.3.208 2、故障处理 由于前期规划的卷空间过大,虚拟机文件逐年增大以后,造成卷的磁盘占用过与整个磁盘空间的容量,虚拟化平台可用容量爆掉,DELL SC2000自动切换到紧急状态,禁止所有磁盘I/O,exsi主机上的虚拟机无法开机 首先,安装

wolf1105的博客 3530

Tensorflow学习系列(二): tensorflow基础

如需转载,请注明出处,欢迎加入深度学习群 255568483 Graph basics由nodes(结点)和Edges(边缘)组成。 用一个简单的例子来讲解:   数据从左到右,请参见箭头的方向 1.在开始的时候,有两个值5和3,他们可能来自其它的Graph 或者从文件中或者是用户直接输入的。 2.这两个初始化的值被传到input结点,在graph中被标记为a和b,a被传给了结

vs412237401的博客 2466

【UE5】【蓝图】 LevelSequence 动画播放与暂停

最近有些工作,在研究UE5 蓝图的LevelSequence,来制作一些简单动画。做个笔记,记录一下动画更换绑定actor的操作,以及动画播放后如何暂停和继续。

UE5开发备忘录 1万+

STM32 USB键盘实现指南

在STM32上实现键盘功能可以通过USB HID(人机接口设备)协议来实现,使STM32设备能被计算机识别为标准键盘。通过上述步骤,您可以在STM32上实现一个功能完整的USB键盘。关键点包括:正确配置USB HID设备实现键盘矩阵扫描处理按键事件并生成HID报告优化按键响应和消抖处理添加额外功能如宏键和LED反馈这个实现可以作为基础,进一步扩展为游戏键盘、宏键盘或特殊输入设备。

suny8的专栏 968

tensorflow函数学习(一)

1. tensorflow.Session() import tensorflow as tf state = tf.Variable(0.0,dtype=tf.float32) one = tf.constant(1.0,dtype=tf.float32) new_val = tf.add(state, one) update = tf.assign(state, new_val) # ...

weixin_36103474的博客 279

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

perseverance51博客 4231

python-tensorflow不定型变量

import tensorflow as tf #1、定义一个不定形状的变量 x = tf.Variable( initial_value = [], dtype = tf.float32, trainable=False, #不把它加载到内存环境中间,单独维护它 validate_shape=False #设置为True,表示在变量更新的时候,运行shape的检查,默认为True ) #2、变量更改 #定义一个拼接操作,axis=0表示横向拼接 concat.

xingghaoyuxitong的博客 228

[特殊字符]用Python爬取中国裁判文书网案例信息:从爬虫到数据可视化全流程实战(附代码)

✅ 分析裁判文书网的网页结构;✅ 自动化爬取案件信息;✅ 解析加密参数并获取数据;✅ 数据可视化图表输出;✅ 模块化构建爬虫系统。

2201_76125261的博客 2822

SPI 总线信号完整性与时序一致性测试

SPI总线测试的核心目标是验证其电气与时序行为是否满足芯片规格要求,确保通信可靠性

硬核科技 328

python-tensorflow 变量、常量、占位符及相互赋值

import tensorflow as tf #1、定义一个变量,必须给定初始值 a = tf.Variable(initial_value = 3,dtype=tf.float32) #2、定义一个张量 b = tf.constant(value=2.0,dtype=tf.float32) c = tf.add(a,b) #3、在启动图之前,变量必须先经过初始化操作 init_op = tf.initialize_all_variables() #3、启动图 with tf.Session().

xingghaoyuxitong的博客 534

Docker 环境 Playwright MCP 部署全流程指南

Docker部署Playwright MCP全流程指南 本文详细介绍了使用Docker容器化部署Playwright MCP的完整流程,涵盖镜像拉取、容器启动、配置优化和问题排查。主要内容包括: 核心部署步骤:通过官方镜像快速搭建环境,支持自定义端口和数据持久化 关键配置要点:详解网络设置、持久化目录挂载和环境变量配置 服务验证方法:通过日志检查和服务连通性测试确保部署成功 客户端集成:提供VS Code等IDE的配置示例 常见问题解决:针对浏览器启动超时、跨域限制等问题给出解决方案 实战案例:演示自动化爬

勤奋的码农 1473

TensorFlow入门

TensorFlow入门 参考资料: TensorFlow中文社区教程 TENSORFLOW从入门到精通之——TENSORFLOW基本操作 TensorFlow升级到1.0版本的问题 Tensorflow save&restore遇到问题及解决应对 NotFoundError: Key Variable_10 not found in checkpoint TensorFlow的变量管理...

好女绪的博客 8952

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

TensorFlow多线程读取机制

1、TensorFlow读取机制图解     我们必须要把数据先读入后才能进行计算,假设读入用时0.1s,计算用时0.9s,那么就意味着每过1s,GPU都会有0.1s无事可做,这就大大降低了运算的效率。解决这个问题方法就是将读入数据和计算分别放在两个线程中,将数据读入内存的一个队列,如下图所示:     读取线程源源不断地将文件系统中的图片读入到一个内存的队列中,而负责计算的是另一个线程,...

蓬莱道人的博客 3486

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TensorFlow(三)之多线程

本博文参考TensorFlow实战Google深度学习框架(郑泽宇,顾思宇),仅用作学习 一、TFRecord输入数据格式 TFRecord是tensorflow中存储数据的统一格式。可以统一不同的原始数据格式,并更加有效地管理不同的属性。TFRecord文件中的数据都是通过tf.train.Example Protocol Buffer的格式存储的。是一种可将图像的数据和标签放在一起的二进制

chenglong_123的博客 7756

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

tensorflow多线程批量读取文件

tensorflow多线程批量读取数据 总所周知,在深度学习中,tensorflow是非常好用的一个框架,也是比较常用的一个框架,而我这篇博客主要是讲述如何用tensorflow多线程批量读取数据。 在我们使用算法来预测或者分类数据时,都会使用大量的数据来训练模型,而这些数据往往都是使用文件来保存的。而我们在机器学习中往往会遇到数据量太大,读取数据的速度太慢了,这种普通的读取数据的方式会严重影响了...

weixin_42304193的博客 1378

tensorflow 多线程队列读取

1队列 队列和变量类似,都是计算图上有状态的节点,可以通过赋值操作修改变量的取值。对于队列,队列的操作主要有Enqueue、EnqueueMany和Dequeue。以下代码展示如何进行队列的初始化 入队 出队 # coding utf-8 import tensorflow as tf # 创建一个先进先出队列,指定队列中可以保存两个元...

weixin_33809981的博客 259

学习笔记TF049:TensorFlow 模型存储加载、队列线程、加载数据、自定义操作

生成检查点文件(chekpoint file),扩展名.ckpt,tf.train.Saver对象调用Saver.save()生成。包含权重和其他程序定义变量,不包含图结构。另一程序使用,需要重新创建图形结构,告诉TensorFlow如何处理权重。 生成图协议文件(graph proto file),二进制文件,扩展名.pb,tf.tran.write_graph()保存,只包含图形结构,不包含权

利炳根 1286

TensorFlow 数据读取方法总结

简介 TensorFlow输入数据的方式有四种: tf.data API:可以很容易的构建一个复杂的输入通道(pipeline)(首选数据输入方式)(Eager模式必须使用该API来构建输入通道) Feeding:使用Python代码提供数据,然后将数据feeding到计算图中。 QueueRunner:基于队列的输入通道(在计算图计算前从队列中读取数据) Preloaded data:用一...

黑暗星球 2万+

tensorflow没有这个参数_[TensorFlow] 三种数据读取方式Preload、Feeding、"队列、多线程"...

TensorFlow程序读取数据一共有3种方法:预加载数据: 在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数据量比较小的情况)。供给数据(Feeding):在TensorFlow程序运行的每一步,让Python代码来供给数据。基于队列多线程从文件中读取数据:在TensorFlow图的起始,让一个输入管线从文件中读取数据。预加载数据这仅用于可以完全加载到存储器中的小的数据集。有两...

weixin_36446407的博客 129

tensorflow java 线程_tensorflow 多线程队列读取

1队列队列和变量类似,都是计算图上有状态的节点,可以通过赋值操作修改变量的取值。对于队列,队列的操作主要有Enqueue、EnqueueMany和Dequeue。以下代码展示如何进行队列的初始化 入队 出队# coding utf-8import tensorflow as tf# 创建一个先进先出队列,指定队列中可以保存两个元素,并指定类型为整数。q = tf.FIFOQueue(2, 'int...

weixin_31009269的博客 189

tensorflow数据集制作/文件队列读取方式

TensorFlow程序读取数据3种方法: tensorflow数据集制作

continueOo的博客 3586

深度学习小白——Tensorflow(三) 读取数据

一个典型的文件读取管线会包含下面这些步骤: 文件名列表可配置的 文件名乱序(shuffling)可配置的 最大训练迭代数(epoch limit)文件名队列针对输入文件格式的阅读器纪录解析器可配置的预处理器样本队列

MargretWG的博客 7202

tensorflow常用图像处理代码,多线程,队列等python代码

TensorFlow学习笔记(五)图像数据处理 目录:   一、TFRecord输入数据格式   1.1 TFrecord格式介绍   1.2 TFRecord样例程序   二、图像数据处理   2.1TensorFlow图像处理函数   2.2图像预处理完整样例   三、多线程数据输入处理框架   3.1 队列与多线程   3.2输入文件队列   3.3组合...

m0_37192554的博客 632

tensorflow-队列与多线程

1、Tensorflow数据输入简介 为了避免图像预处理成为神经网络模型训练效率的瓶颈,Tensorflow提供了多线程处理输入数据的框架。流程如下: (1)指定原始数据的文件列表 (2)创建文件列表队列 (3)从文件中读取数据 (4)数据预处理 (5)整理成batch作为神经网络输入 tensorflow中的队列不仅是一种数据结构,还提供了多线程的机制。队列也是多线程输入数据处理框

fireflychh的博客 1621
上一篇: Tensorflow学习笔记:多输入线性回归神经网络
下一篇: Tensorflow学习笔记:读取二进制文件、读写TFRecord文件
WilliamCode
博客等级 码龄11年 118粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值