深度学习之深度学习框架——Tensorflow(线程队列与IO操作)

本文详细介绍了Tensorflow中的队列和线程管理,包括FIFOQueue的使用、同步与异步读取的实现。接着探讨了CSV文件的读取流程和API,如文件队列构造、解码和批量处理。同时,讲解了图片读取的基本知识和操作,包括图像读取器和解码器的应用。此外,还涉及二进制文件的读取以及tfrecord文件的存储和读取案例。
摘要由CSDN通过智能技术生成

(一)队列和线程

Tensorflow的队列

在这里插入图片描述

tf.FIFOQueue

在这里插入图片描述

Tensorflow的队列管理器

在这里插入图片描述

Tensorflow的线程管理器

在这里插入图片描述

代码实现

实现同步读取

import tensorflow as tf

# 模拟一下同步先处理数据,然后再取数据训练
# tensorflow当中,运行操作有依赖性
# 1、先定义队列
Q=tf.FIFOQueue(3,tf.float32)
# 2、放入一些数据
enq_many=Q.enqueue_many([[0.1,0.2,0.3],])
# 3、定义一些处理数据的逻辑,取数据的过程    取数据,+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)
    #训练数据
    for i in range(Q.size().eval()):
        print(sess.run(Q.dequeue()))

注意
在这里插入图片描述

实现异步读取

import tensorflow as tf

# 模拟异步子线程,存入样本, 主线程 读取样本
# 1、定义一个队列,1000
Q=tf.FIFOQueue(1000,tf.float32)

# 2、定义要做的事情,循环 值+1 放入队列当中
var=tf.Variable(0.0)
# 实现一个自增 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)
    #开启线程管理器
    coord=tf.train.Coordinator()
    #真正开启子线程
    threads=qr.create_threads(sess,coord=coord,start=True)
    # 主线程,不断读取数据训练
    for i in range(300):
        print(sess.run(Q.dequeue()))

    # 回收你
    coord.request_stop()

    coord.join(threads)

(二)csv文件的读取

文件读取流程

1.构造一个文件队列
2.构造文件阅读器读取队列内容
3.解码
4.批处理
在这里插入图片描述

文件读取API

文件队列构造

在这里插入图片描述

文件阅读器

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

文件内容解码器

在这里插入图片描述

开启线程操作

在这里插入图片描述

批量处理操作

在这里插入图片描述

CSV文件读取案例

在这里插入图片描述

import tensorflow as tf
import os

# 批处理大小,跟队列,数据的数量没有影响,只决定 这批次取多少数据
def csvread(filelist):
    """
    读取CSV文件
    :param filelist: 文件路径+名字的列表
    :return: 读取的内容
    """
    #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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值