Tensorflow入门(2)——深度学习框架Tesnsflow 线程+队列+IO操作 文件读取案例

目录

  • 一、二、Tesnsflow入门 & 环境配置 & 认识Tensorflow
  • 三、线程与队列与IO操作
    • 1.队列
      • 实例:完成一个出队列、+1、入队列操作(同步操作)
    • 2.队列管理器 创建线程
    • 3.线程协调器 管理线程
      • 案例:通过队列管理器来实现变量加1,入队,主线程出队列的操作,观察效果?(异步操作)
    • 4.文件读取流程
      • 1.文件读取API-文件队列构造
      • 2.文件读取API-文件阅读器
      • 3.文件读取API-文件内容解码器
      • 4.开启线程操作
      • 5.管道读端批处理
      • 案例:CSV文件读取
    • 5.图片文件


一、二、Tesnsflow入门 & 环境配置 & 认识Tensorflow

Tensorflow入门(1)——深度学习框架Tesnsflow入门 & 环境配置 & 认识Tensorflow

在这里插入图片描述

三、线程与队列与IO操作

1.队列

在训练样本的时候,希望读入的训练样本时有序的
• tf.FIFOQueue 先进先出队列,按顺序出队列
• tf.RandomShuffleQueue 随机出队列

在这里插入图片描述

FIFOQueue(capacity, dtypes, name=‘fifo_queue’)
创建一个以先进先出的顺序对元素进行排队的队列

  • capacity:整数。可能存储在此队列中的元素数量的上限
  • dtypes:DType对象列表。长度dtypes必须等于每个队列元素中的张量数,dtype的类型形状,决定了后面进队列元素形状
  • method:
      dequeue(name=None):出队列
      enqueue(vals, name=None):入队列
      enqueue_many(vals, name=None):vals列表或者元组:同时把许多数据放入队列,返回一个进队列操作
      size(name=None):队列的size

实例:完成一个出队列、+1、入队列操作(同步操作)

import tensorflow as tf
# tensorflow当中,运行操作有依赖性
# 1、首先定义队列
# 2、定义一些读数据,取数据的过程 ,  取数据,+1 ,入队列# 1\定义队列
Q = tf.FIFOQueue(3, tf.float32)
# 放入数据
enq_many = Q.enqueue_many([[0.1,0.2,0.3],])# 列表# 2\处理数据,取数据,+1,入队列
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(100):sess.run(en_q)# tensorflow当中,运行操作有依赖性# 训练数据for i in range(Q.size().eval()):print(sess.run(Q.dequeue()))

在这里插入图片描述

2.队列管理器 创建线程

在这里插入图片描述

tf.train.QueueRunner(queue, enqueue_ops=None)
创建一个QueueRunner

  • queue:A Queue
  • enqueue_ops:添加线程的队列操作列表,[]*2,指定两个线程
  • create_threads(sess, coord=None,start=False):创建线程来运行给定会话的入队操作
      start:布尔值,如果True启动线程;如果为False调用者必须调用start()启动线程
      coord:线程协调器,后面线程管理需要用到
      return:

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-文件内容解码器

在这里插入图片描述

由于从文件中读取的是字符串,需要函数去解析这些字符串到张量
tf.decode_csv(records,record_defaults=None,field_delim = None,name = None)

  • 将CSV转换为张量,与tf.TextLineReader搭配使用
    records:tensor 型字符串,每个字符串是csv中的记录行
    field_delim : 默认分割符”,”
    record_defaults :参数决定了所得张量的类型,并设置一个值在输入字符串中缺少使用默认值,如

    tf.decode_raw(bytes,out_type,little_endian = None,name = None)
  • 将字节转换为一个数字向量表示,字节为一字符串类型的张量,与函数tf.FixedLengthRecordReader搭配使用,二进制读取为uint8格式

4.开启线程操作

在这里插入图片描述

tf.train.start_queue_runners(sess=None,coord=None)
  收集所有图中的队列线程,并启动线程
  sess:所在的会话中
  coord:线程协调器
  return:返回所有线程队列

5.管道读端批处理

在这里插入图片描述

tf.train.batch(tensors,batch_size,num_threads = 1,capacity = 32,name=None)
读取指定大小(个数)的张量
  tensors:可以是包含张量的列表
  batch_size:从队列中读取的批处理大小
  num_threads:进入队列的线程数
  capacity:整数,队列中元素的最大数量
  return:tensors
tf.train.shuffle_batch(tensors,batch_size,capacity,min_after_dequeue,num_threads=1,)
  乱序读取指定大小(个数)的张量
  min_after_dequeue:留下队列里的张量个数,能够保持随机打乱

案例: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]] #指定两列的默认值为字符串和floatexample, 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_batchif __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.图片文件

在这里插入图片描述

图像读取器
  tf.WholeFileReader
  将文件的全部内容作为值输出的读取器
  return:读取器实例
  read(file_queue):输出将是一个文件名(key)和该文件的内容(值)

图像解码器
  tf.image.decode_jpeg(contents)
  将JPEG编码的图像解码为uint8张量
  return:uint8张量,3-D形状[height, width, channels]
  tf.image.decode_png(contents)将PNG编码的图像解码为uint8或uint16张量
  return:张量类型,3-D形状[height, width, channels]

缩小图片
  tf.image.resize_images(images, size)
  images:4-D形状[batch, height, width,   channels]或3-D形状的张量[height, width, channels]的图片数据
  size:1-D int32张量:new_height, new_width,图像的新尺寸返回4-D格式或者3-D格式图片

import tensorflow as tf
import osdef picread(filelist):"""读取狗图片并转换成张量:param filelist: 文件路径+ 名字的列表:return: 每张图片的张量"""# 1、构造文件队列file_queue = tf.train.string_input_producer(filelist)# 2、构造阅读器去读取图片内容(默认读取一张图片)reader = tf.WholeFileReader()key, value = reader.read(file_queue)print(value)# 3、对读取的图片数据进行解码image = tf.image.decode_jpeg(value)print(image)# 5、处理图片的大小(统一大小)image_resize = tf.image.resize_images(image, [200, 200])print(image_resize)# 注意:一定要把样本的形状固定 [200, 200, 3],在批处理的时候要求所有数据形状必须定义image_resize.set_shape([200, 200, 3])print(image_resize)# 6、进行批处理image_batch = tf.train.batch([image_resize], batch_size=20, num_threads=1, capacity=20)print(image_batch)return image_batchif __name__ == '__main__':# 1\找到文件,放入列表  路径+名字  放入列表当中file_name = os.listdir("./data/dog/")filelist = [os.path.join("./data/dog/" , file) for file in file_name]image_batch = picread(filelist)# 开启会话运行结果with tf.Session() as sess:# 定义一个线程协调器coord = tf.train.Coordinator()# 开启读取文件的线程threads = tf.train.start_queue_runners(sess, coord=coord)# 打印读取内容print(sess.run([image_batch]))#回收子线程coord.request_stop()coord.join(threads)  # 听老大的话

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用更少数据训练更好的alpaca

概述 该论文的研究背景是指令微调在大型语言模型中取得了重要的成果,但现有的训练数据质量问题导致模型性能下降。 过去的方法主要是使用低质量的数据进行指令微调,这些数据中存在错误或无关的回答,导致结果误导和训练成本增加。该论文的方…

Redis对象结构 — RedisObject

目录 Redis 键值对数据库的全过程​编辑 RedisObject结构体 Redis的encoding编码方式 type对应的数据对象类型 Redis 键值对数据库的全过程 redisDb 结构,表示 Redis 数据库的结构,结构体里存放了指向了 dict 结构的指针;dict 结构&#…

Windows操纵kafka

这里写目录标题 启动kafk创建一个测试主题查看所有主题查看first详细信息修改分区数(分区数只能增加 不能减少)删除主题生产者生产数据消费命令 启动kafk 安装目录下 .\bin\windows\kafka-server-start.bat .\config\server.properties创建一个测试主题 安装目录下 .\bin\wi…

Revit中墙体的问题,门窗洞口及柱断梁墙

一、如何同时开两道相邻墙的门窗洞口 做外墙装饰的时候,我们很经常为了方便、简洁在已经绘制好的墙体外围再绘制一面墙体,并且添加上材质作为外饰面,提高工作效率;但是遇到有门窗洞口的墙体时,外饰面墙体却没办法直接被门窗剪切&a…

Android APP性能及专项测试

Android篇 1. 性能测试 Android性能测试分为两类: 1、一类为rom版本(系统)的性能测试 2、一类为应用app的性能测试Android的app性能测试包括的测试项比如: 1、资源消耗 2、内存泄露 3、电量功耗 4、耗时 5、网络流量消耗 6、移动…

【hadoop】部署hadoop的伪分布模式

hadoop的伪分布模式 伪分布模式的特点部署伪分布模式hadoop-env.shhdfs-site.xmlcore-site.xmlmapred-site.xmlyarn-site.xml对NameNode进行格式化启动Hadoop 对部署是否完成进行测试免密码模式免密码模式的原理(重要)免密码模式的配置 伪分布模式的特点…

东莞-戴尔R540服务器故障告警处理方法

DELL PowerEdge R540服务器故障维修案例:(看到文章就是缘分) 客户名称:东莞市某街道管理中心 故障机型:DELL R540服务器 故障问题:DELL R540服务器无法开机,前面板亮黄灯,工程师通过…

备战秋招 | 笔试强训9

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、某函数申明如下() void Func(int &nVal1); A. Func(a) B. Func(&a) C. Func(*a) D. Func(&(*a)) 2、C语言中,类ClassA的构造函数和析构函数的执行…

Layui基本功能(增删改查)

话不多说,根据我前面的博客我们直接进行操作。记住以下的文件放置,防止操作出不来. 这是我们要完成的界面及功能 后台功能实现 数据查看 我们在userDao方法里面进行增删改查的方法我们在userAction进行方法的编写R工具类的介绍 查询 userDao方法 因为我…

pico添加devmem2读写内存模块

devmem2读写内存 自定义msh命令devmem2验证msh命令devmem2读CPUID读写全局变量 devmem2模块可实现对设备寄存器的读写操作。在RT-Thread的命令行组件Fish中添加devmem2模块,用户可在终端输入devmem2相关命令,FinSH根据输入对指定寄存器进行读写&#xff…

Flask SQLAlchemy_Serializer ORM模型序列化

在前后端分离项目中,经常需要把ORM模型转化为字典,再将字典转化为JSON格式的字符串。在遇到sqlalchemy_serializer之前,我都是通过类似Java中的反射原理,获取当前ORM模型的所有字段,然后写一个to_dict方法来将字段以及…

FPGA adrv9002 4收4发板卡,支持NVME SATA EMMC 光口 FMC

板卡采用ADI 射频直采芯片ADRV9002 ,支持4收4发支持外部本振 跳频 同时支持4X 10G光口对外传输,FMC扩展 。同时支持4X NVME接口,可以实时流盘,备份一路SAT A接口,板卡同时预留了EMMC,可以PS PL选通访问&…

IDEA 常用快捷键

•快速生成:main psvm / main •控制台快速输出语句 sout •删除一行:CTRL Y •复制一行:CTRL D •查找 •跳转切换 •阅读源码 •编辑 •新添,新建:ALT insert •目录显示与关闭:CTRL Fn F12 …

【Ajax】笔记-服务端响应JSON数据

服务端响应JSON数据 构建测试案例 键盘按键触发请求服务端&#xff1a; 键盘按下触发事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…

【剧前爆米花--web】HTTP协议格式详解以及构造

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是一篇关于HTTP协议的文章&#xff0c;在这篇文章中我会说明HTTP协议格式以及相关的构造&#xff0c;希望对你有所帮助&#xff01; 目录 HTTP协议 HTTP协议格式 HTTP请求 HTTP响应详情…

TCP的窗口控制和重发控制【TCP原理(笔记三)】

文章目录 利用窗口控制提高速度窗口控制与重发控制确认应答未能返回的情况某个报文段丢失的情况 控制流 利用窗口控制提高速度 TCP以1个段为单位&#xff0c;每发一个段进行一次确认应答的处理&#xff0c;如图。这样的传输方式有一个缺点。那就是&#xff0c;包的往返时间越长…

【Spring】Spring AOP入门及实现原理剖析

文章目录 1 初探Aop1.1 何为AOP&#xff1f;1.2 AOP的组成1.2.1 切面(Aspect)1.2.2 连接点(Join Point)1.2.3 切点(Pointcut)1.2.4 通知(Advice) 1.3 AOP的使用场景 2 Spring AOP入门2.1 添加 Spring AOP 框架⽀持2.2 定义切面和切点2.3 定义相关通知 3 Spring AOP实现原理3.1 …

Fofa搜索技巧(理论加实践的整理)

目录 题记技巧&#xff08;我一般找国内的&#xff0c;所以下边一直加cn&#xff09;1、搜索HTTP响应头中含有"thinkphp"关键词的网站和IP。2、加上标题带有后台的。3、加上时间&#xff0c;现在新网站有thinkphp日志泄露的有很多。4、搜索html正文中含有"管理…

http-server 的安装与使用

文章目录 问题背景http-server简介安装nodejs安装http-server开启http服务http-server参数 问题背景 打开一个文档默认使用file协议打开&#xff0c;不能发送ajax请求&#xff0c;只能使用http协议才能请求资源&#xff0c;所以此时我们需要在本地建立一个http服务&#xff0c…

list最常用的遍历五种方式以及使用场景

目录 遍历方式的适用场景对比 迭代器遍历 列表迭代器 增强for遍历 Lambda表达式 lambda表达式简介 普通for遍历 集合中通用的并且常用的六种方法 遍历方式的适用场景对比 迭代器遍历 &#xff1a;在遍历过程中需要删除元素&#xff0c;请使用迭代器 列表迭代器&#xff1…