tensorflow(四)----队列和线程/文件读取

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: Caramel
@file: io.py
@time: 2020/05/30
@desc:
1.队列和线程
    队列和队列管理器
    线程和线程协调器
2.文件读取

"""
import tensorflow as tf

# #模拟一下同步先处理数据,然后才能取数据训练
# #1.首先定义队列
# Q = tf.FIFOQueue(3, tf.float32)
# # 放入数据
# en_q_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(en_q_many)
#     #处理数据
#     for i in range(100):
#         sess.run(en_q)
#
#     #训练数据
#     for i in range(Q.size().eval()):
#         print(sess.run(Q.dequeue()))

'''模拟异步子线程  存入样本  主线程   读取样本
1.定义一个队列,1000
2.定义子线程要做的事情     值 + 1    放入队列
3.定义队列管理器op,指定子线程要做什么事情,多少个子线程
'''
# Q = tf.FIFOQueue(1000, tf.float32)
#
# var = tf.Variable(0.0)
# #实线一个自增
# data = tf.assign_add(var, tf.constant(1.0))
# en_q = Q.enqueue(data)
#
# qr = tf.train.QueueRunner(Q, enqueue_ops=[en_q]*4)
# #初始化变量的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, start=True, coord=coord)
#
#     #主线程,不断读取训练数据
#     for i in range(300):
#         print(sess.run(Q.dequeue()))
#
#     #回收线程
#     coord.request_stop()
#     coord.join(threads)
'''
文件读取:
1.构造文件队列
2.读取队列内容
    csv文件:读取第一行
    二进制文件:执行一个样本的bytes肚脐眼
    图片文件:按一张张读取
3.读取队列内容decode
4.批处理:A中的所有样本
主线程要做:去样本数据训练
'''
import os
def csv_reader(csv_list):
    '''
    读取csv文件
    :param csv_list: 文件路径+名字的列表
    :return:读取的内容
    '''
    #1.构造文件队列
    file_queue = tf.train.string_input_producer(csv_list)

    #2.构造csv阅读器读取队列数据(按一行)
    reader = tf.TextLineReader(skip_header_lines=1)

    key, value = reader.read(file_queue)

    #3.对每行内容进行解码
    #record_defaults:指定每一个样本的每一列的类型,指定默认值
    record = [[0], [0], ['None']]
    date, hour, type_ = tf.decode_csv(value, record_defaults=record)
    print(date, hour, type)

    #4.读取多个数据:批处理
    date_batch, hour_batch, type_batch = tf.train.batch([date, hour, type_], batch_size=9, num_threads=1, capacity=9)

    return date_batch, hour_batch, type_batch


if __name__ == '__main__':
    # 找到文件,放入列表 路径+名字放到列表中
    filename = os.listdir('./')[0]
    filelist = ['./china_cities_20151201.csv']
    print(filelist)
    print(filename)
    date, hour, type_ = csv_reader(filelist)
    with tf.Session() as sess:
        # 定义一个线性协调器
        coord = tf.train.Coordinator()
        # 开启读取文件的线程
        threads = tf.train.start_queue_runners(sess, coord=coord)
        # 打印读取的内容
        print(sess.run([date, hour, type_]))
        # 回收线程
        coord.request_stop()
        coord.join(threads)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值