机器学习笔记(六)tensorflowIO操作

一、队列和线程

1、tensorflow解决读取数据

计算密集型:IO速度稍慢、一次性读取消耗内存。

解决:tensorflow能够多线程并行的执行任务(真正的多线程):队列、文件的改善(tfrecords)

2、队列与队列管理器

在训练样本的时候,希望读入的训练样本是有序的

tf.FIFOQueue 先进先出队列,按顺序出队列

tf.RandomShuffleQueue 随机出队列

 

FIFOQueue(capacity, dtypes, name='fifo_queue')

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

 

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

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# 模拟同步(完成一个 出队列、+1、入队列 操作)

# 1 定义队列
Q = tf.FIFOQueue(3, tf.float32)
# enm_op = Q.enqueue_many([0.1, 0.2, 0.3]) # 这么写传入的数据会被当成张量而不是数组
enm_op = Q.enqueue_many([[0.1, 0.2, 0.3], ])
# 2 定义一些处理数据的op
de_op = Q.dequeue()
data = de_op + 1  # 重载+
en_op = Q.enqueue(data)

with tf.Session() as sess:
    # 初始化队列
    sess.run(enm_op)
    # 处理数据
    for i in range(100):
        # tensorflow中运行操作有依赖性
        sess.run(en_op)
    # 模拟训练数据
    for i in range(Q.size().eval()): # size是个op必须运行
        print(sess.run(Q.dequeue()))

机器学习笔记(六)tensorflowIO操作_第1张图片

 

 

 

 

3、线程和协调器

 

 

二、文件读取

 

 

 

三、图片处理

你可能感兴趣的:(机器学习笔记(六)tensorflowIO操作)